From 961a74cfa32e57428deb06e795cc9f1c730e271b Mon Sep 17 00:00:00 2001 From: Mikhail Antonov Date: Tue, 26 Jan 2016 13:46:34 -0800 Subject: [PATCH] HBASE-15135 Add metrics for storefile age --- .../regionserver/MetricsRegionServerSource.java | 8 +++ .../regionserver/MetricsRegionServerWrapper.java | 20 ++++++++ .../hbase/regionserver/MetricsRegionWrapper.java | 20 ++++++++ .../MetricsRegionServerSourceImpl.java | 8 +++ .../regionserver/MetricsRegionSourceImpl.java | 16 ++++++ .../regionserver/TestMetricsRegionSourceImpl.java | 20 ++++++++ .../apache/hadoop/hbase/regionserver/HStore.java | 60 ++++++++++++++++++++++ .../MetricsRegionServerWrapperImpl.java | 42 +++++++++++++++ .../regionserver/MetricsRegionWrapperImpl.java | 44 ++++++++++++++++ .../apache/hadoop/hbase/regionserver/Store.java | 20 ++++++++ .../hadoop/hbase/regionserver/StoreFileInfo.java | 13 +++++ .../MetricsRegionServerWrapperStub.java | 20 ++++++++ .../regionserver/MetricsRegionWrapperStub.java | 20 ++++++++ .../hbase/regionserver/TestMetricsRegion.java | 12 +++++ .../regionserver/TestMetricsRegionServer.java | 4 ++ .../regionserver/TestRegionServerMetrics.java | 23 +++++++++ 16 files changed, 350 insertions(+) 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 ee0217a..e7162a3 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 @@ -155,6 +155,14 @@ public interface MetricsRegionServerSource extends BaseSource { String MEMSTORE_SIZE = "memStoreSize"; String MEMSTORE_SIZE_DESC = "Size of the memstore"; String STOREFILE_SIZE = "storeFileSize"; + String MAX_STORE_FILE_AGE = "maxStoreFileAge"; + String MIN_STORE_FILE_AGE = "minStoreFileAge"; + String AVG_STORE_FILE_AGE = "avgStoreFileAge"; + String NUM_REFERENCE_FILES = "numReferenceFiles"; + String MAX_STORE_FILE_AGE_DESC = "Max age of store files hosted on this region server"; + String MIN_STORE_FILE_AGE_DESC = "Min age of store files hosted on this region server"; + String AVG_STORE_FILE_AGE_DESC = "Average age of store files hosted on this region server"; + String NUM_REFERENCE_FILES_DESC = "Number of reference file on this region server"; String STOREFILE_SIZE_DESC = "Size of storefiles being served."; String TOTAL_REQUEST_COUNT = "totalRequestCount"; String TOTAL_REQUEST_COUNT_DESC = diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java index 02dec8d..603c057 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java @@ -98,6 +98,26 @@ public interface MetricsRegionServerWrapper { long getStoreFileSize(); /** + * @return Max age of store files hosted on this region server + */ + long getMaxStoreFileAge(); + + /** + * @return Min age of store files hosted on this region server + */ + long getMinStoreFileAge(); + + /** + * @return Average age of store files hosted on this region server + */ + long getAvgStoreFileAge(); + + /** + * @return Number of reference files on this region server + */ + long getNumReferenceFiles(); + + /** * Get the number of requests per second. */ double getRequestsPerSecond(); diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java index 0997f7c..5912abd 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java @@ -70,6 +70,26 @@ public interface MetricsRegionWrapper { long getReadRequestCount(); /** + * @return Max age of store files under this region + */ + long getMaxStoreFileAge(); + + /** + * @return Min age of store files under this region + */ + long getMinStoreFileAge(); + + /** + * @return Average age of store files under this region + */ + long getAvgStoreFileAge(); + + /** + * @return Number of reference files under this region + */ + long getNumReferenceFiles(); + + /** * Get the total number of mutations that have been issued against this region. */ long getWriteRequestCount(); 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 f40811c..b5fa3ce 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 @@ -195,6 +195,14 @@ public class MetricsRegionServerSourceImpl .addGauge(Interns.info(STOREFILE_COUNT, STOREFILE_COUNT_DESC), rsWrap.getNumStoreFiles()) .addGauge(Interns.info(MEMSTORE_SIZE, MEMSTORE_SIZE_DESC), rsWrap.getMemstoreSize()) .addGauge(Interns.info(STOREFILE_SIZE, STOREFILE_SIZE_DESC), rsWrap.getStoreFileSize()) + .addGauge(Interns.info(MAX_STORE_FILE_AGE, MAX_STORE_FILE_AGE_DESC), + rsWrap.getMaxStoreFileAge()) + .addGauge(Interns.info(MIN_STORE_FILE_AGE, MIN_STORE_FILE_AGE_DESC), + rsWrap.getMinStoreFileAge()) + .addGauge(Interns.info(AVG_STORE_FILE_AGE, AVG_STORE_FILE_AGE_DESC), + rsWrap.getAvgStoreFileAge()) + .addGauge(Interns.info(NUM_REFERENCE_FILES, NUM_REFERENCE_FILES_DESC), + rsWrap.getNumReferenceFiles()) .addGauge(Interns.info(RS_START_TIME_NAME, RS_START_TIME_DESC), rsWrap.getStartCode()) .addCounter(Interns.info(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC), 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 1df72d5..eefab08 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 @@ -217,6 +217,22 @@ public class MetricsRegionSourceImpl implements MetricsRegionSource { MetricsRegionServerSource.MEMSTORE_SIZE_DESC), this.regionWrapper.getMemstoreSize()); mrb.addGauge(Interns.info( + regionNamePrefix + MetricsRegionServerSource.MAX_STORE_FILE_AGE, + MetricsRegionServerSource.MAX_STORE_FILE_AGE_DESC), + this.regionWrapper.getMaxStoreFileAge()); + mrb.addGauge(Interns.info( + regionNamePrefix + MetricsRegionServerSource.MIN_STORE_FILE_AGE, + MetricsRegionServerSource.MIN_STORE_FILE_AGE_DESC), + this.regionWrapper.getMinStoreFileAge()); + mrb.addGauge(Interns.info( + regionNamePrefix + MetricsRegionServerSource.AVG_STORE_FILE_AGE, + MetricsRegionServerSource.AVG_STORE_FILE_AGE_DESC), + this.regionWrapper.getAvgStoreFileAge()); + mrb.addGauge(Interns.info( + regionNamePrefix + MetricsRegionServerSource.NUM_REFERENCE_FILES, + MetricsRegionServerSource.NUM_REFERENCE_FILES_DESC), + this.regionWrapper.getNumReferenceFiles()); + mrb.addGauge(Interns.info( regionNamePrefix + MetricsRegionServerSource.STOREFILE_SIZE, MetricsRegionServerSource.STOREFILE_SIZE_DESC), this.regionWrapper.getStoreFileSize()); diff --git a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java index 3088260..124f9a4 100644 --- a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java +++ b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java @@ -107,6 +107,26 @@ public class TestMetricsRegionSourceImpl { } @Override + public long getMaxStoreFileAge() { + return 0; + } + + @Override + public long getMinStoreFileAge() { + return 0; + } + + @Override + public long getAvgStoreFileAge() { + return 0; + } + + @Override + public long getNumReferenceFiles() { + return 0; + } + + @Override public long getWriteRequestCount() { return 0; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java index 9ebdaee..9038582 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java @@ -1883,6 +1883,66 @@ public class HStore implements Store { } @Override + public long getMaxStoreFileAge() { + long earliestTS = Long.MAX_VALUE; + for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) { + StoreFile.Reader r = s.getReader(); + if (r == null) { + LOG.warn("StoreFile " + s + " has a null Reader"); + continue; + } + long createdTS = s.getFileInfo().getCreatedTimestamp(); + earliestTS = (createdTS < earliestTS) ? createdTS : earliestTS; + } + long now = EnvironmentEdgeManager.currentTime(); + return now - earliestTS; + } + + @Override + public long getMinStoreFileAge() { + long latestTS = 0; + for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) { + StoreFile.Reader r = s.getReader(); + if (r == null) { + LOG.warn("StoreFile " + s + " has a null Reader"); + continue; + } + long createdTS = s.getFileInfo().getCreatedTimestamp(); + latestTS = (createdTS > latestTS) ? createdTS : latestTS; + } + long now = EnvironmentEdgeManager.currentTime(); + return now - latestTS; + } + + @Override + public long getAvgStoreFileAge() { + long sum = 0, count = 0; + for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) { + StoreFile.Reader r = s.getReader(); + if (r == null) { + LOG.warn("StoreFile " + s + " has a null Reader"); + continue; + } + sum += s.getFileInfo().getCreatedTimestamp(); + count++; + } + long avgTS = sum / count; + long now = EnvironmentEdgeManager.currentTime(); + return now - avgTS; + } + + @Override + public long getNumReferenceFiles() { + long numRefFiles = 0; + for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) { + if (s.isReference()) { + numRefFiles++; + } + } + return numRefFiles; + } + + @Override public long getStoreSizeUncompressed() { return this.totalUncompressedBytes; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java index f3e8916..874fa5c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java @@ -66,6 +66,10 @@ class MetricsRegionServerWrapperImpl private volatile long numStoreFiles = 0; private volatile long memstoreSize = 0; private volatile long storeFileSize = 0; + private volatile long maxStoreFileAge = 0; + private volatile long minStoreFileAge = 0; + private volatile long avgStoreFileAge = 0; + private volatile long numReferenceFiles = 0; private volatile double requestsPerSecond = 0.0; private volatile long readRequestsCount = 0; private volatile long writeRequestsCount = 0; @@ -389,6 +393,26 @@ class MetricsRegionServerWrapperImpl } @Override + public long getMaxStoreFileAge() { + return maxStoreFileAge; + } + + @Override + public long getMinStoreFileAge() { + return minStoreFileAge; + } + + @Override + public long getAvgStoreFileAge() { + return avgStoreFileAge; + } + + @Override + public long getNumReferenceFiles() { + return numReferenceFiles; + } + + @Override public long getMemstoreSize() { return memstoreSize; } @@ -588,6 +612,8 @@ class MetricsRegionServerWrapperImpl new HDFSBlocksDistribution(); long tempNumStores = 0, tempNumStoreFiles = 0, tempMemstoreSize = 0, tempStoreFileSize = 0; + long tempMaxStoreFileAge = 0, avgAgeNumerator = 0, tempNumReferenceFiles = 0; + long tempMinStoreFileAge = Long.MAX_VALUE; long tempReadRequestsCount = 0, tempWriteRequestsCount = 0; long tempCheckAndMutateChecksFailed = 0; long tempCheckAndMutateChecksPassed = 0; @@ -629,6 +655,18 @@ class MetricsRegionServerWrapperImpl tempNumStoreFiles += store.getStorefilesCount(); tempMemstoreSize += store.getMemStoreSize(); tempStoreFileSize += store.getStorefilesSize(); + + long storeMaxStoreFileAge = store.getMaxStoreFileAge(); + tempMaxStoreFileAge = (storeMaxStoreFileAge > tempMaxStoreFileAge) ? + storeMaxStoreFileAge : tempMaxStoreFileAge; + + long storeMinStoreFileAge = store.getMinStoreFileAge(); + tempMinStoreFileAge = (storeMinStoreFileAge < tempMinStoreFileAge) ? + storeMinStoreFileAge : tempMinStoreFileAge; + + avgAgeNumerator += store.getAvgStoreFileAge() * store.getStorefilesCount(); + tempNumReferenceFiles += store.getNumReferenceFiles(); + tempStorefileIndexSize += store.getStorefilesIndexSize(); tempTotalStaticBloomSize += store.getTotalStaticBloomSize(); tempTotalStaticIndexSize += store.getTotalStaticIndexSize(); @@ -695,6 +733,10 @@ class MetricsRegionServerWrapperImpl numStoreFiles = tempNumStoreFiles; memstoreSize = tempMemstoreSize; storeFileSize = tempStoreFileSize; + maxStoreFileAge = tempMaxStoreFileAge; + minStoreFileAge = tempMinStoreFileAge; + avgStoreFileAge = avgAgeNumerator / tempNumStoreFiles; + numReferenceFiles= tempNumReferenceFiles; readRequestsCount = tempReadRequestsCount; writeRequestsCount = tempWriteRequestsCount; checkAndMutateChecksFailed = tempCheckAndMutateChecksFailed; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java index 08865e6..acce37f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java @@ -43,6 +43,10 @@ public class MetricsRegionWrapperImpl implements MetricsRegionWrapper, Closeable private long numStoreFiles; private long memstoreSize; private long storeFileSize; + private long maxStoreFileAge; + private long minStoreFileAge; + private long avgStoreFileAge; + private long numReferenceFiles; private ScheduledFuture regionMetricsUpdateTask; @@ -132,6 +136,26 @@ public class MetricsRegionWrapperImpl implements MetricsRegionWrapper, Closeable } @Override + public long getMaxStoreFileAge() { + return maxStoreFileAge; + } + + @Override + public long getMinStoreFileAge() { + return minStoreFileAge; + } + + @Override + public long getAvgStoreFileAge() { + return avgStoreFileAge; + } + + @Override + public long getNumReferenceFiles() { + return numReferenceFiles; + } + + @Override public int getRegionHashCode() { return this.region.hashCode(); } @@ -143,18 +167,38 @@ public class MetricsRegionWrapperImpl implements MetricsRegionWrapper, Closeable long tempNumStoreFiles = 0; long tempMemstoreSize = 0; long tempStoreFileSize = 0; + long tempMaxStoreFileAge = 0; + long tempMinStoreFileAge = Long.MAX_VALUE; + long tempNumReferenceFiles = 0; + long avgAgeNumerator = 0; if (region.stores != null) { for (Store store : region.stores.values()) { tempNumStoreFiles += store.getStorefilesCount(); tempMemstoreSize += store.getMemStoreSize(); tempStoreFileSize += store.getStorefilesSize(); + + long storeMaxStoreFileAge = store.getMaxStoreFileAge(); + tempMaxStoreFileAge = (storeMaxStoreFileAge > tempMaxStoreFileAge) ? + storeMaxStoreFileAge : tempMaxStoreFileAge; + + long storeMinStoreFileAge = store.getMinStoreFileAge(); + tempMinStoreFileAge = (storeMinStoreFileAge < tempMinStoreFileAge) ? + storeMinStoreFileAge : tempMinStoreFileAge; + + avgAgeNumerator += store.getAvgStoreFileAge() * store.getStorefilesCount(); + + tempNumReferenceFiles += store.getNumReferenceFiles(); } } numStoreFiles = tempNumStoreFiles; memstoreSize = tempMemstoreSize; storeFileSize = tempStoreFileSize; + maxStoreFileAge = tempMaxStoreFileAge; + minStoreFileAge = tempMinStoreFileAge; + avgStoreFileAge = avgAgeNumerator / tempNumStoreFiles; + numReferenceFiles = tempNumReferenceFiles; } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java index 8bb10f0..7b5d594 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java @@ -346,6 +346,26 @@ public interface Store extends HeapSize, StoreConfigInformation, PropagatingConf int getStorefilesCount(); /** + * @return Max age of store files in this store + */ + long getMaxStoreFileAge(); + + /** + * @return Min age of store files in this store + */ + long getMinStoreFileAge(); + + /** + * @return Average age of store files in this store + */ + long getAvgStoreFileAge(); + + /** + * @return Number of reference files in this store + */ + long getNumReferenceFiles(); + + /** * @return The size of the store files, in bytes, uncompressed. */ long getStoreSizeUncompressed(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileInfo.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileInfo.java index fd7f1c6..0e66498 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileInfo.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileInfo.java @@ -97,6 +97,9 @@ public class StoreFileInfo { private RegionCoprocessorHost coprocessorHost; + // timestamp on when the file was created + private long createdTimestamp; + /** * Create a Store File Info * @param conf the {@link Configuration} to use @@ -112,6 +115,7 @@ public class StoreFileInfo { this.fs = fs; this.conf = conf; this.initialPath = initialPath; + this.createdTimestamp = fs.getFileStatus(initialPath).getModificationTime(); Path p = initialPath; if (HFileLink.isHFileLink(p)) { // HFileLink @@ -163,6 +167,7 @@ public class StoreFileInfo { this.conf = conf; // initialPath can be null only if we get a link. this.initialPath = (fileStatus == null) ? null : fileStatus.getPath(); + this.createdTimestamp = fs.getFileStatus(initialPath).getModificationTime(); // HFileLink this.reference = null; this.link = link; @@ -182,6 +187,7 @@ public class StoreFileInfo { this.fs = fs; this.conf = conf; this.initialPath = fileStatus.getPath(); + this.createdTimestamp = fileStatus.getModificationTime(); this.reference = reference; this.link = null; } @@ -419,6 +425,13 @@ public class StoreFileInfo { return m.matches() && m.groupCount() > 1; } + /** + * @return timestamp when this file was created (as returned by filesystem) + */ + public long getCreatedTimestamp() { + return createdTimestamp; + } + /* * Return path to the file referred to by a Reference. Presumes a directory * hierarchy of ${hbase.rootdir}/data/${namespace}/tablename/regionname/familyname. diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java index 0d93284..60d4319 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java @@ -71,6 +71,26 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe } @Override + public long getMaxStoreFileAge() { + return 2; + } + + @Override + public long getMinStoreFileAge() { + return 2; + } + + @Override + public long getAvgStoreFileAge() { + return 2; + } + + @Override + public long getNumReferenceFiles() { + return 2; + } + + @Override public double getRequestsPerSecond() { return 0; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java index c43ccc3..f90409a 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java @@ -76,6 +76,26 @@ public class MetricsRegionWrapperStub implements MetricsRegionWrapper { } @Override + public long getMaxStoreFileAge() { + return 2; + } + + @Override + public long getMinStoreFileAge() { + return 2; + } + + @Override + public long getAvgStoreFileAge() { + return 2; + } + + @Override + public long getNumReferenceFiles() { + return 2; + } + + @Override public long getWriteRequestCount() { return 106; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java index e739890..182d70e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java @@ -43,6 +43,18 @@ public class TestMetricsRegion { "namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_storeFileCount", 102, agg); HELPER.assertGauge( + "namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_maxStoreFileAge", + 2, agg); + HELPER.assertGauge( + "namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_minStoreFileAge", + 2, agg); + HELPER.assertGauge( + "namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_avgStoreFileAge", + 2, agg); + HELPER.assertGauge( + "namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_numReferenceFiles", + 2, agg); + HELPER.assertGauge( "namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_memstoreSize", 103, agg); HELPER.assertCounter( diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java index f3ce0bd..70a3fcc 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java @@ -60,6 +60,10 @@ public class TestMetricsRegionServer { HELPER.assertGauge("regionServerStartTime", 100, serverSource); HELPER.assertGauge("regionCount", 101, serverSource); HELPER.assertGauge("storeCount", 2, serverSource); + HELPER.assertGauge("maxStoreFileAge", 2, serverSource); + HELPER.assertGauge("minStoreFileAge", 2, serverSource); + HELPER.assertGauge("avgStoreFileAge", 2, serverSource); + HELPER.assertGauge("numReferenceFiles", 2, serverSource); HELPER.assertGauge("hlogFileCount", 10, serverSource); HELPER.assertGauge("hlogFileSize", 1024000, serverSource); HELPER.assertGauge("storeFileCount", 300, serverSource); 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 79df5e8..7575e7b 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 @@ -239,6 +239,29 @@ public class TestRegionServerMetrics { } @Test + public void testStoreFileAge() throws Exception { + TableName tableName = TableName.valueOf("testStoreFileAge"); + byte[] cf = Bytes.toBytes("d"); + byte[] row = Bytes.toBytes("rk"); + byte[] qualifier = Bytes.toBytes("qual"); + byte[] val = Bytes.toBytes("Value"); + + //Force a hfile. + Table t = TEST_UTIL.createTable(tableName, cf); + Put p = new Put(row); + p.addColumn(cf, qualifier, val); + t.put(p); + TEST_UTIL.getHBaseAdmin().flush(tableName); + + metricsRegionServer.getRegionServerWrapper().forceRecompute(); + assertTrue(metricsHelper.getGaugeLong("maxStoreFileAge", serverSource) > 0); + assertTrue(metricsHelper.getGaugeLong("minStoreFileAge", serverSource) > 0); + assertTrue(metricsHelper.getGaugeLong("avgStoreFileAge", serverSource) > 0); + + t.close(); + } + + @Test public void testCheckAndPutCount() throws Exception { String tableNameString = "testCheckAndPutCount"; TableName tableName = TableName.valueOf(tableNameString); -- 1.9.5