View Javadoc

1   /**
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  package org.apache.hadoop.hbase.io.hfile;
20  
21  import static org.junit.Assert.assertEquals;
22  import org.apache.hadoop.hbase.io.hfile.CombinedBlockCache.CombinedCacheStats;
23  import org.apache.hadoop.hbase.testclassification.SmallTests;
24  import org.junit.Test;
25  import org.junit.experimental.categories.Category;
26  
27  @Category({SmallTests.class})
28  public class TestCombinedBlockCache {
29    @Test
30    public void testCombinedCacheStats() {
31      CacheStats lruCacheStats = new CacheStats("lruCacheStats", 2);
32      CacheStats bucketCacheStats = new CacheStats("bucketCacheStats", 2);
33      CombinedCacheStats stats =
34          new CombinedCacheStats(lruCacheStats, bucketCacheStats);
35      
36      double delta = 0.01;
37      
38      // period 1:
39      // lru cache: 1 hit caching, 1 miss caching
40      // bucket cache: 2 hit non-caching,1 miss non-caching/primary,1 fail insert
41      lruCacheStats.hit(true);
42      lruCacheStats.miss(true, false);
43      bucketCacheStats.hit(false);
44      bucketCacheStats.hit(false);
45      bucketCacheStats.miss(false, true);
46      
47      assertEquals(5, stats.getRequestCount());
48      assertEquals(2, stats.getRequestCachingCount());
49      assertEquals(2, stats.getMissCount());
50      assertEquals(1, stats.getPrimaryMissCount());
51      assertEquals(1, stats.getMissCachingCount());
52      assertEquals(3, stats.getHitCount());
53      assertEquals(3, stats.getPrimaryHitCount());
54      assertEquals(1, stats.getHitCachingCount());
55      assertEquals(0.6, stats.getHitRatio(), delta);
56      assertEquals(0.5, stats.getHitCachingRatio(), delta);
57      assertEquals(0.4, stats.getMissRatio(), delta);
58      assertEquals(0.5, stats.getMissCachingRatio(), delta);
59      
60      
61      // lru cache: 2 evicted, 1 evict
62      // bucket cache: 1 evict
63      lruCacheStats.evicted(1000, true);
64      lruCacheStats.evicted(1000, false);
65      lruCacheStats.evict();
66      bucketCacheStats.evict();
67      assertEquals(2, stats.getEvictionCount());
68      assertEquals(2, stats.getEvictedCount());
69      assertEquals(1, stats.getPrimaryEvictedCount());
70      assertEquals(1.0, stats.evictedPerEviction(), delta);
71      
72      // lru cache:  1 fail insert
73      lruCacheStats.failInsert();
74      assertEquals(1, stats.getFailedInserts());
75      
76      // rollMetricsPeriod
77      stats.rollMetricsPeriod();
78      assertEquals(3, stats.getSumHitCountsPastNPeriods());
79      assertEquals(5, stats.getSumRequestCountsPastNPeriods());
80      assertEquals(1, stats.getSumHitCachingCountsPastNPeriods());
81      assertEquals(2, stats.getSumRequestCachingCountsPastNPeriods());
82      assertEquals(0.6, stats.getHitRatioPastNPeriods(), delta);
83      assertEquals(0.5, stats.getHitCachingRatioPastNPeriods(), delta);
84      
85      // period 2:
86      // lru cache: 3 hit caching
87      lruCacheStats.hit(true);
88      lruCacheStats.hit(true);
89      lruCacheStats.hit(true);
90      stats.rollMetricsPeriod();
91      assertEquals(6, stats.getSumHitCountsPastNPeriods());
92      assertEquals(8, stats.getSumRequestCountsPastNPeriods());
93      assertEquals(4, stats.getSumHitCachingCountsPastNPeriods());
94      assertEquals(5, stats.getSumRequestCachingCountsPastNPeriods());
95      assertEquals(0.75, stats.getHitRatioPastNPeriods(), delta);
96      assertEquals(0.8, stats.getHitCachingRatioPastNPeriods(), delta);
97    }
98  }