You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ch...@apache.org on 2015/12/14 10:25:37 UTC

hbase git commit: HBASE-14936 CombinedBlockCache should overwrite CacheStats#rollMetricsPeriod() (Jianwei Cui)

Repository: hbase
Updated Branches:
  refs/heads/master 555d9b70b -> 04622254f


HBASE-14936 CombinedBlockCache should overwrite CacheStats#rollMetricsPeriod() (Jianwei Cui)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/04622254
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/04622254
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/04622254

Branch: refs/heads/master
Commit: 04622254f7209c5cfeadcfa137a97fbed161075a
Parents: 555d9b7
Author: chenheng <ch...@apache.org>
Authored: Mon Dec 14 17:20:50 2015 +0800
Committer: chenheng <ch...@apache.org>
Committed: Mon Dec 14 17:20:50 2015 +0800

----------------------------------------------------------------------
 .../hadoop/hbase/io/hfile/CacheStats.java       |  7 +-
 .../hbase/io/hfile/CombinedBlockCache.java      | 48 ++++++----
 .../hbase/io/hfile/TestCombinedBlockCache.java  | 98 ++++++++++++++++++++
 3 files changed, 134 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/04622254/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
index 2dae66f..fff6585 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
@@ -260,13 +260,14 @@ public class CacheStats {
   }
 
   public double getHitRatioPastNPeriods() {
-    double ratio = ((double)sum(hitCounts)/(double)sum(requestCounts));
+    double ratio = ((double)getSumHitCountsPastNPeriods() /
+        (double)getSumRequestCountsPastNPeriods());
     return Double.isNaN(ratio) ? 0 : ratio;
   }
 
   public double getHitCachingRatioPastNPeriods() {
-    double ratio =
-      ((double)sum(hitCachingCounts)/(double)sum(requestCachingCounts));
+    double ratio = ((double)getSumHitCachingCountsPastNPeriods() /
+        (double)getSumRequestCachingCountsPastNPeriods());
     return Double.isNaN(ratio) ? 0 : ratio;
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/04622254/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java
index 3f65823..22bffee 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java
@@ -203,22 +203,38 @@ public class CombinedBlockCache implements ResizableBlockCache, HeapSize {
     }
 
     @Override
-    public double getHitRatioPastNPeriods() {
-      double ratio = ((double) (lruCacheStats.getSumHitCountsPastNPeriods() + bucketCacheStats
-          .getSumHitCountsPastNPeriods()) / (double) (lruCacheStats
-          .getSumRequestCountsPastNPeriods() + bucketCacheStats
-          .getSumRequestCountsPastNPeriods()));
-      return Double.isNaN(ratio) ? 0 : ratio;
-    }
-
-    @Override
-    public double getHitCachingRatioPastNPeriods() {
-      double ratio = ((double) (lruCacheStats
-          .getSumHitCachingCountsPastNPeriods() + bucketCacheStats
-          .getSumHitCachingCountsPastNPeriods()) / (double) (lruCacheStats
-          .getSumRequestCachingCountsPastNPeriods() + bucketCacheStats
-          .getSumRequestCachingCountsPastNPeriods()));
-      return Double.isNaN(ratio) ? 0 : ratio;
+    public void rollMetricsPeriod() {
+      lruCacheStats.rollMetricsPeriod();
+      bucketCacheStats.rollMetricsPeriod();
+    }
+    
+    @Override
+    public long getFailedInserts() {
+      return lruCacheStats.getFailedInserts() + bucketCacheStats.getFailedInserts();
+    }
+
+    @Override
+    public long getSumHitCountsPastNPeriods() {
+      return lruCacheStats.getSumHitCountsPastNPeriods()
+          + bucketCacheStats.getSumHitCountsPastNPeriods();
+    }
+    
+    @Override
+    public long getSumRequestCountsPastNPeriods() {
+      return lruCacheStats.getSumRequestCountsPastNPeriods()
+          + bucketCacheStats.getSumRequestCountsPastNPeriods();
+    }
+    
+    @Override
+    public long getSumHitCachingCountsPastNPeriods() {
+      return lruCacheStats.getSumHitCachingCountsPastNPeriods()
+          + bucketCacheStats.getSumHitCachingCountsPastNPeriods();
+    }
+
+    @Override
+    public long getSumRequestCachingCountsPastNPeriods() {
+      return lruCacheStats.getSumRequestCachingCountsPastNPeriods()
+          + bucketCacheStats.getSumRequestCachingCountsPastNPeriods();
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/04622254/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.java
new file mode 100644
index 0000000..50bf331
--- /dev/null
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.java
@@ -0,0 +1,98 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.io.hfile;
+
+import static org.junit.Assert.assertEquals;
+import org.apache.hadoop.hbase.io.hfile.CombinedBlockCache.CombinedCacheStats;
+import org.apache.hadoop.hbase.testclassification.SmallTests;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category({SmallTests.class})
+public class TestCombinedBlockCache {
+  @Test
+  public void testCombinedCacheStats() {
+    CacheStats lruCacheStats = new CacheStats("lruCacheStats", 2);
+    CacheStats bucketCacheStats = new CacheStats("bucketCacheStats", 2);
+    CombinedCacheStats stats =
+        new CombinedCacheStats(lruCacheStats, bucketCacheStats);
+    
+    double delta = 0.01;
+    
+    // period 1:
+    // lru cache: 1 hit caching, 1 miss caching
+    // bucket cache: 2 hit non-caching,1 miss non-caching/primary,1 fail insert
+    lruCacheStats.hit(true);
+    lruCacheStats.miss(true, false);
+    bucketCacheStats.hit(false);
+    bucketCacheStats.hit(false);
+    bucketCacheStats.miss(false, true);
+    
+    assertEquals(5, stats.getRequestCount());
+    assertEquals(2, stats.getRequestCachingCount());
+    assertEquals(2, stats.getMissCount());
+    assertEquals(1, stats.getPrimaryMissCount());
+    assertEquals(1, stats.getMissCachingCount());
+    assertEquals(3, stats.getHitCount());
+    assertEquals(3, stats.getPrimaryHitCount());
+    assertEquals(1, stats.getHitCachingCount());
+    assertEquals(0.6, stats.getHitRatio(), delta);
+    assertEquals(0.5, stats.getHitCachingRatio(), delta);
+    assertEquals(0.4, stats.getMissRatio(), delta);
+    assertEquals(0.5, stats.getMissCachingRatio(), delta);
+    
+    
+    // lru cache: 2 evicted, 1 evict
+    // bucket cache: 1 evict
+    lruCacheStats.evicted(1000, true);
+    lruCacheStats.evicted(1000, false);
+    lruCacheStats.evict();
+    bucketCacheStats.evict();
+    assertEquals(2, stats.getEvictionCount());
+    assertEquals(2, stats.getEvictedCount());
+    assertEquals(1, stats.getPrimaryEvictedCount());
+    assertEquals(1.0, stats.evictedPerEviction(), delta);
+    
+    // lru cache:  1 fail insert
+    lruCacheStats.failInsert();
+    assertEquals(1, stats.getFailedInserts());
+    
+    // rollMetricsPeriod
+    stats.rollMetricsPeriod();
+    assertEquals(3, stats.getSumHitCountsPastNPeriods());
+    assertEquals(5, stats.getSumRequestCountsPastNPeriods());
+    assertEquals(1, stats.getSumHitCachingCountsPastNPeriods());
+    assertEquals(2, stats.getSumRequestCachingCountsPastNPeriods());
+    assertEquals(0.6, stats.getHitRatioPastNPeriods(), delta);
+    assertEquals(0.5, stats.getHitCachingRatioPastNPeriods(), delta);
+    
+    // period 2:
+    // lru cache: 3 hit caching
+    lruCacheStats.hit(true);
+    lruCacheStats.hit(true);
+    lruCacheStats.hit(true);
+    stats.rollMetricsPeriod();
+    assertEquals(6, stats.getSumHitCountsPastNPeriods());
+    assertEquals(8, stats.getSumRequestCountsPastNPeriods());
+    assertEquals(4, stats.getSumHitCachingCountsPastNPeriods());
+    assertEquals(5, stats.getSumRequestCachingCountsPastNPeriods());
+    assertEquals(0.75, stats.getHitRatioPastNPeriods(), delta);
+    assertEquals(0.8, stats.getHitCachingRatioPastNPeriods(), delta);
+  }
+}