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 2016/03/07 10:38:08 UTC
hbase git commit: HBASE-15376 ScanNext metric is size-based while
every other per-operation metric is time based
Repository: hbase
Updated Branches:
refs/heads/master 4483b3cbe -> f30afa05d
HBASE-15376 ScanNext metric is size-based while every other per-operation metric is time based
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/f30afa05
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/f30afa05
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/f30afa05
Branch: refs/heads/master
Commit: f30afa05d9274af2301ff7ffdbd8d6e42599ef57
Parents: 4483b3c
Author: chenheng <ch...@apache.org>
Authored: Mon Mar 7 17:36:40 2016 +0800
Committer: chenheng <ch...@apache.org>
Committed: Mon Mar 7 17:36:40 2016 +0800
----------------------------------------------------------------------
.../regionserver/MetricsRegionServerSource.java | 11 +++-
.../hbase/regionserver/MetricsRegionSource.java | 8 ++-
.../MetricsRegionServerSourceImpl.java | 15 +++--
.../regionserver/MetricsRegionSourceImpl.java | 28 ++++++---
.../hbase/regionserver/MetricsRegion.java | 8 ++-
.../hbase/regionserver/MetricsRegionServer.java | 8 ++-
.../hbase/regionserver/RSRpcServices.java | 8 ++-
.../regionserver/TestRegionServerMetrics.java | 66 +++++++++++++++++---
8 files changed, 123 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/f30afa05/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
index 9b59af7..18a77f4 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
@@ -92,7 +92,12 @@ public interface MetricsRegionServerSource extends BaseSource {
*
* @param scanSize size of the scan
*/
- void updateScannerNext(long scanSize);
+ void updateScanSize(long scanSize);
+
+ /**
+ * Update the scan time.
+ * */
+ void updateScanTime(long t);
/**
* Increment the number of slow Puts that have happened.
@@ -258,7 +263,9 @@ public interface MetricsRegionServerSource extends BaseSource {
String MUTATE_KEY = "mutate";
String APPEND_KEY = "append";
String REPLAY_KEY = "replay";
- String SCAN_NEXT_KEY = "scanNext";
+ String SCAN_SIZE_KEY = "scanSize";
+ String SCAN_TIME_KEY = "scanTime";
+
String SLOW_MUTATE_KEY = "slowPutCount";
String SLOW_GET_KEY = "slowGetCount";
String SLOW_DELETE_KEY = "slowDeleteCount";
http://git-wip-us.apache.org/repos/asf/hbase/blob/f30afa05/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java
index 874be31..11fc068 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java
@@ -65,7 +65,13 @@ public interface MetricsRegionSource extends Comparable<MetricsRegionSource> {
* Update the count and sizes of resultScanner.next()
* @param scanSize Size in bytes of the resulting key values for a next()
*/
- void updateScan(long scanSize);
+ void updateScanSize(long scanSize);
+
+ /**
+ * Update time used of resultScanner.next().
+ * */
+ void updateScanTime(long mills);
+
/**
* Update related counts of increments.
*/
http://git-wip-us.apache.org/repos/asf/hbase/blob/f30afa05/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
index 4a2d8cc..f869397 100644
--- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
+++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
@@ -43,7 +43,8 @@ public class MetricsRegionServerSourceImpl
private final MetricHistogram incrementHisto;
private final MetricHistogram appendHisto;
private final MetricHistogram replayHisto;
- private final MetricHistogram scanNextHisto;
+ private final MetricHistogram scanSizeHisto;
+ private final MetricHistogram scanTimeHisto;
private final MutableFastCounter slowPut;
private final MutableFastCounter slowDelete;
@@ -84,7 +85,8 @@ public class MetricsRegionServerSourceImpl
slowAppend = getMetricsRegistry().newCounter(SLOW_APPEND_KEY, SLOW_APPEND_DESC, 0L);
replayHisto = getMetricsRegistry().newTimeHistogram(REPLAY_KEY);
- scanNextHisto = getMetricsRegistry().newTimeHistogram(SCAN_NEXT_KEY);
+ scanSizeHisto = getMetricsRegistry().newSizeHistogram(SCAN_SIZE_KEY);
+ scanTimeHisto = getMetricsRegistry().newTimeHistogram(SCAN_TIME_KEY);
splitTimeHisto = getMetricsRegistry().newTimeHistogram(SPLIT_KEY);
flushTimeHisto = getMetricsRegistry().newTimeHistogram(FLUSH_KEY);
@@ -124,8 +126,13 @@ public class MetricsRegionServerSourceImpl
}
@Override
- public void updateScannerNext(long scanSize) {
- scanNextHisto.add(scanSize);
+ public void updateScanSize(long scanSize) {
+ scanSizeHisto.add(scanSize);
+ }
+
+ @Override
+ public void updateScanTime(long t) {
+ scanTimeHisto.add(t);
}
@Override
http://git-wip-us.apache.org/repos/asf/hbase/blob/f30afa05/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
index c6b7d12..39d665b 100644
--- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
+++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
@@ -51,14 +51,16 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource {
private final String regionGetKey;
private final String regionIncrementKey;
private final String regionAppendKey;
- private final String regionScanNextKey;
+ private final String regionScanSizeKey;
+ private final String regionScanTimeKey;
private final MutableFastCounter regionPut;
private final MutableFastCounter regionDelete;
private final MutableFastCounter regionIncrement;
private final MutableFastCounter regionAppend;
private final MetricHistogram regionGet;
- private final MetricHistogram regionScanNext;
+ private final MetricHistogram regionScanSize;
+ private final MetricHistogram regionScanTime;
private final int hashCode;
public MetricsRegionSourceImpl(MetricsRegionWrapper regionWrapper,
@@ -94,8 +96,11 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource {
regionGetKey = regionNamePrefix + MetricsRegionServerSource.GET_KEY;
regionGet = registry.newTimeHistogram(regionGetKey);
- regionScanNextKey = regionNamePrefix + MetricsRegionServerSource.SCAN_NEXT_KEY;
- regionScanNext = registry.newTimeHistogram(regionScanNextKey);
+ regionScanSizeKey = regionNamePrefix + MetricsRegionServerSource.SCAN_SIZE_KEY;
+ regionScanSize = registry.newSizeHistogram(regionScanSizeKey);
+
+ regionScanTimeKey = regionNamePrefix + MetricsRegionServerSource.SCAN_TIME_KEY;
+ regionScanTime = registry.newTimeHistogram(regionScanTimeKey);
hashCode = regionWrapper.getRegionHashCode();
}
@@ -125,9 +130,11 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource {
registry.removeMetric(regionIncrementKey);
registry.removeMetric(regionAppendKey);
registry.removeMetric(regionGetKey);
- registry.removeMetric(regionScanNextKey);
+ registry.removeMetric(regionScanSizeKey);
+ registry.removeMetric(regionScanTimeKey);
registry.removeHistogramMetrics(regionGetKey);
- registry.removeHistogramMetrics(regionScanNextKey);
+ registry.removeHistogramMetrics(regionScanSizeKey);
+ registry.removeHistogramMetrics(regionScanTimeKey);
regionWrapper = null;
}
@@ -149,8 +156,13 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource {
}
@Override
- public void updateScan(long scanSize) {
- regionScanNext.add(scanSize);
+ public void updateScanSize(long scanSize) {
+ regionScanSize.add(scanSize);
+ }
+
+ @Override
+ public void updateScanTime(long mills) {
+ regionScanTime.add(mills);
}
@Override
http://git-wip-us.apache.org/repos/asf/hbase/blob/f30afa05/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java
index 48395a3..56839ff 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java
@@ -53,8 +53,12 @@ public class MetricsRegion {
source.updateGet(getSize);
}
- public void updateScanNext(final long scanSize) {
- source.updateScan(scanSize);
+ public void updateScanSize(final long scanSize) {
+ source.updateScanSize(scanSize);
+ }
+
+ public void updateScanTime(final long t) {
+ source.updateScanTime(t);
}
public void updateAppend() {
http://git-wip-us.apache.org/repos/asf/hbase/blob/f30afa05/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
index 91f494a..7ff9bed 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
@@ -97,8 +97,12 @@ public class MetricsRegionServer {
serverSource.updateReplay(t);
}
- public void updateScannerNext(long scanSize){
- serverSource.updateScannerNext(scanSize);
+ public void updateScanSize(long scanSize){
+ serverSource.updateScanSize(scanSize);
+ }
+
+ public void updateScanTime(long t) {
+ serverSource.updateScanTime(t);
}
public void updateSplitTime(long t) {
http://git-wip-us.apache.org/repos/asf/hbase/blob/f30afa05/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
index c77b7e4..035b2d1 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
@@ -2682,6 +2682,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
region.startRegionOperation(Operation.SCAN);
try {
int i = 0;
+ long before = EnvironmentEdgeManager.currentTime();
synchronized(scanner) {
boolean stale = (region.getRegionInfo().getReplicaId() != 0);
boolean clientHandlesPartials =
@@ -2814,10 +2815,13 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
}
}
region.updateReadRequestsCount(i);
+ long end = EnvironmentEdgeManager.currentTime();
long responseCellSize = context != null ? context.getResponseCellSize() : 0;
- region.getMetrics().updateScanNext(responseCellSize);
+ region.getMetrics().updateScanSize(responseCellSize);
+ region.getMetrics().updateScanTime(end - before);
if (regionServer.metricsRegionServer != null) {
- regionServer.metricsRegionServer.updateScannerNext(responseCellSize);
+ regionServer.metricsRegionServer.updateScanSize(responseCellSize);
+ regionServer.metricsRegionServer.updateScanTime(end - before);
}
} finally {
region.closeRegionOperation();
http://git-wip-us.apache.org/repos/asf/hbase/blob/f30afa05/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
index 1ec0bf7..4754058 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
@@ -348,8 +348,8 @@ public class TestRegionServerMetrics {
}
@Test
- public void testScanNext() throws IOException {
- String tableNameString = "testScanNext";
+ public void testScanSize() throws IOException {
+ String tableNameString = "testScanSize";
TableName tableName = TableName.valueOf(tableNameString);
byte[] cf = Bytes.toBytes("d");
byte[] qualifier = Bytes.toBytes("qual");
@@ -387,9 +387,9 @@ public class TestRegionServerMetrics {
"_table_"+tableNameString +
"_region_" + i.getEncodedName()+
"_metric";
- metricsHelper.assertCounter(prefix + "_scanNextNumOps", NUM_SCAN_NEXT, agg);
+ metricsHelper.assertCounter(prefix + "_scanSizeNumOps", NUM_SCAN_NEXT, agg);
}
- metricsHelper.assertCounter("ScanNext_num_ops", numScanNext, serverSource);
+ metricsHelper.assertCounter("ScanSize_num_ops", numScanNext, serverSource);
}
try (Admin admin = TEST_UTIL.getHBaseAdmin()) {
admin.disableTable(tableName);
@@ -398,8 +398,58 @@ public class TestRegionServerMetrics {
}
@Test
- public void testScanNextForSmallScan() throws IOException {
- String tableNameString = "testScanNextSmall";
+ public void testScanTime() throws IOException {
+ String tableNameString = "testScanTime";
+ TableName tableName = TableName.valueOf(tableNameString);
+ byte[] cf = Bytes.toBytes("d");
+ byte[] qualifier = Bytes.toBytes("qual");
+ byte[] val = Bytes.toBytes("One");
+
+ List<Put> puts = new ArrayList<>();
+ for (int insertCount =0; insertCount < 100; insertCount++) {
+ Put p = new Put(Bytes.toBytes("" + insertCount + "row"));
+ p.addColumn(cf, qualifier, val);
+ puts.add(p);
+ }
+ try (Table t = TEST_UTIL.createTable(tableName, cf)) {
+ t.put(puts);
+
+ Scan s = new Scan();
+ s.setBatch(1);
+ s.setCaching(1);
+ ResultScanner resultScanners = t.getScanner(s);
+
+ for (int nextCount = 0; nextCount < NUM_SCAN_NEXT; nextCount++) {
+ Result result = resultScanners.next();
+ assertNotNull(result);
+ assertEquals(1, result.size());
+ }
+ }
+ numScanNext += NUM_SCAN_NEXT;
+ try (RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {
+ for ( HRegionLocation location: locator.getAllRegionLocations()) {
+ HRegionInfo i = location.getRegionInfo();
+ MetricsRegionAggregateSource agg = rs.getRegion(i.getRegionName())
+ .getMetrics()
+ .getSource()
+ .getAggregateSource();
+ String prefix = "namespace_"+NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR+
+ "_table_"+tableNameString +
+ "_region_" + i.getEncodedName()+
+ "_metric";
+ metricsHelper.assertCounter(prefix + "_scanTimeNumOps", NUM_SCAN_NEXT, agg);
+ }
+ metricsHelper.assertCounter("ScanTime_num_ops", numScanNext, serverSource);
+ }
+ try (Admin admin = TEST_UTIL.getHBaseAdmin()) {
+ admin.disableTable(tableName);
+ admin.deleteTable(tableName);
+ }
+ }
+
+ @Test
+ public void testScanSizeForSmallScan() throws IOException {
+ String tableNameString = "testScanSizeSmall";
TableName tableName = TableName.valueOf(tableNameString);
byte[] cf = Bytes.toBytes("d");
byte[] qualifier = Bytes.toBytes("qual");
@@ -437,9 +487,9 @@ public class TestRegionServerMetrics {
"_table_"+tableNameString +
"_region_" + i.getEncodedName()+
"_metric";
- metricsHelper.assertCounter(prefix + "_scanNextNumOps", NUM_SCAN_NEXT, agg);
+ metricsHelper.assertCounter(prefix + "_scanSizeNumOps", NUM_SCAN_NEXT, agg);
}
- metricsHelper.assertCounter("ScanNext_num_ops", numScanNext, serverSource);
+ metricsHelper.assertCounter("ScanSize_num_ops", numScanNext, serverSource);
}
try (Admin admin = TEST_UTIL.getHBaseAdmin()) {
admin.disableTable(tableName);