From 4ae9f79080c2ceeaf013db4df1a627d6e76ffa81 Mon Sep 17 00:00:00 2001 From: "terence.yoo" Date: Mon, 15 Feb 2016 10:11:38 +0900 Subject: [PATCH] Read requests count metric is increased when Get operation does not return any record --- .../apache/hadoop/hbase/regionserver/HRegion.java | 5 +- .../hadoop/hbase/TestRegionServerMetrics.java | 71 +++++++++++++++++++--- 2 files changed, 68 insertions(+), 8 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index 3e6c092..c14a7e9 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -5550,7 +5550,6 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi "or a lengthy garbage collection"); } startRegionOperation(Operation.SCAN); - readRequestsCount.increment(); try { return nextRaw(outResults, scannerContext); } finally { @@ -6683,6 +6682,10 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi } this.metricsRegion.updateGet(totalSize); } + + if (results.size() > 0) { + readRequestsCount.increment(); + } } @Override diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionServerMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionServerMetrics.java index 76e5842..f7786f8 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionServerMetrics.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionServerMetrics.java @@ -47,6 +47,8 @@ import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; @Category(MediumTests.class) public class TestRegionServerMetrics { @@ -58,6 +60,7 @@ public class TestRegionServerMetrics { private static final byte[] ROW1 = "a".getBytes(); private static final byte[] ROW2 = "b".getBytes(); private static final byte[] ROW3 = "c".getBytes(); + private static final byte[] ROW4 = "d".getBytes(); private static final byte[] COL1 = "q1".getBytes(); private static final byte[] COL2 = "q2".getBytes(); private static final byte[] COL3 = "q3".getBytes(); @@ -67,7 +70,7 @@ public class TestRegionServerMetrics { private static final int MAX_TRY = 20; private static final int SLEEP_MS = 100; - private static final int TTL = 1; + private static final int TTL = 2; private static Admin admin; private static Collection serverNames; @@ -124,6 +127,19 @@ public class TestRegionServerMetrics { assertEquals(expectedReadRequests, resultCount); } + private static void testReadRequests(long expectedReadRequests, long expectedFilteredReadRequests) + throws IOException, InterruptedException { + updateMetricsMap(); + System.out.println("requestsMapPrev = " + requestsMapPrev); + System.out.println("requestsMap = " + requestsMap); + + assertEquals(expectedReadRequests, + requestsMap.get(Metric.REGION_READ) - requestsMapPrev.get(Metric.REGION_READ)); + assertEquals(expectedFilteredReadRequests, + requestsMap.get(Metric.FILTERED_REGION_READ) + - requestsMapPrev.get(Metric.FILTERED_REGION_READ)); + } + private static void updateMetricsMap() throws IOException, InterruptedException { for (Metric metric : Metric.values()) { requestsMapPrev.put(metric, requestsMap.get(metric)); @@ -296,6 +312,8 @@ public class TestRegionServerMetrics { public void testReadRequestsCountWithFilter() throws Exception { int resultCount; Scan scan; + Get get; + Result result; // test for scan scan = new Scan(); @@ -330,12 +348,35 @@ public class TestRegionServerMetrics { testReadRequests(resultCount, 0, 1); } - // fixme filtered get should not increase readRequestsCount -// Get get = new Get(ROW2); -// get.setFilter(new SingleColumnValueFilter(CF1, COL1, CompareFilter.CompareOp.EQUAL, VAL1)); -// Result result = table.get(get); -// resultCount = result.isEmpty() ? 0 : 1; -// testReadRequests(resultCount, 0, 1); + // test for get filtering out a row + get = new Get(ROW2); + get.setFilter(new SingleColumnValueFilter(CF1, COL1, CompareFilter.CompareOp.EQUAL, VAL1)); + result = table.get(get); + resultCount = result.isEmpty() ? 0 : 1; + testReadRequests(resultCount, 0, 1); + + // test for get returning a row + get = new Get(ROW2); + get.setFilter(new SingleColumnValueFilter(CF1, COL1, CompareFilter.CompareOp.EQUAL, VAL2)); + result = table.get(get); + resultCount = result.isEmpty() ? 0 : 1; + testReadRequests(resultCount, 1, 0); + } + + @Test + public void testReadRequestsCountNotExistingRow() throws Exception { + // test for get + Get get = new Get(ROW4); + Result result = table.get(get); + assertTrue(result.isEmpty()); + testReadRequests(0, 0); + + // test for increment + Increment increment = new Increment(ROW4); + increment.addColumn(CF1, COL3, 1); + result = table.increment(increment); + assertFalse(result.isEmpty()); + testReadRequests(0, 0); } @Test @@ -344,6 +385,7 @@ public class TestRegionServerMetrics { Delete delete = new Delete(ROW3); table.delete(delete); + // test for scan Scan scan = new Scan(); try (ResultScanner scanner = table.getScanner(scan)) { int resultCount = 0; @@ -352,6 +394,12 @@ public class TestRegionServerMetrics { } testReadRequests(resultCount, 2, 1); } + + // test for get + Get get = new Get(ROW3); + Result result = table.get(get); + int resultCount = result.isEmpty() ? 0 : 1; + testReadRequests(resultCount, 0, 1); } finally { Put put = new Put(ROW3); put.addColumn(CF1, COL1, VAL1); @@ -362,8 +410,10 @@ public class TestRegionServerMetrics { @Test public void testReadRequestsCountWithTTLExpiration() throws Exception { + // ROW1 is TTL expired putTTLExpiredData(); + // test for scan Scan scan = new Scan(); scan.addFamily(CF2); try (ResultScanner scanner = table.getScanner(scan)) { @@ -373,6 +423,13 @@ public class TestRegionServerMetrics { } testReadRequests(resultCount, 2, 1); } + + // test for get + Get get = new Get(ROW1); + get.addFamily(CF2); + Result result = table.get(get); + int resultCount = result.isEmpty() ? 0 : 1; + testReadRequests(resultCount, 0, 1); } private enum Metric {REGION_READ, SERVER_READ, FILTERED_REGION_READ, FILTERED_SERVER_READ} -- 2.5.4 (Apple Git-61)