You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2018/09/04 20:14:15 UTC

[2/2] hbase git commit: Revert "HBASE-15728 Add Per-Table metrics back"

Revert "HBASE-15728 Add Per-Table metrics back"

This reverts commit fb74f215b453ba3ecebe1254a9b56602b1537110.


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

Branch: refs/heads/branch-1
Commit: cf198a65e8d704d28538c4c165a941b9e5bac678
Parents: dfb1af4
Author: Andrew Purtell <ap...@apache.org>
Authored: Tue Sep 4 13:12:20 2018 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Tue Sep 4 13:12:20 2018 -0700

----------------------------------------------------------------------
 .../regionserver/MetricsRegionServerSource.java |   3 -
 .../regionserver/MetricsRegionWrapper.java      |   2 -
 .../MetricsTableAggregateSource.java            |   8 +-
 .../hbase/regionserver/MetricsTableSource.java  |  88 +-----
 .../MetricsTableWrapperAggregate.java           |  59 +---
 .../MetricsRegionServerSourceImpl.java          |   3 +-
 .../MetricsTableAggregateSourceImpl.java        |  43 +--
 .../regionserver/MetricsTableSourceImpl.java    | 285 ++-----------------
 .../regionserver/MetricsTableWrapperStub.java   | 107 -------
 .../TestMetricsRegionSourceImpl.java            |   5 -
 .../TestMetricsTableSourceImpl.java             |  54 +++-
 .../hadoop/hbase/regionserver/HRegion.java      |   4 +-
 .../hbase/regionserver/HRegionServer.java       |   2 +-
 .../hadoop/hbase/regionserver/HStore.java       |   9 +-
 .../hbase/regionserver/MetricsRegionServer.java |  31 +-
 .../regionserver/MetricsRegionWrapperImpl.java  |   5 -
 .../hadoop/hbase/regionserver/MetricsTable.java |  54 +---
 .../MetricsTableWrapperAggregateImpl.java       | 224 ++++++---------
 .../regionserver/MetricsRegionWrapperStub.java  |   5 -
 .../regionserver/MetricsTableWrapperStub.java   |  62 ++++
 .../regionserver/TestMetricsRegionServer.java   |  12 +-
 .../regionserver/TestMetricsTableAggregate.java | 117 ++------
 22 files changed, 280 insertions(+), 902 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/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 5feb241..affd267 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
@@ -248,9 +248,6 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo
   String TOTAL_ROW_ACTION_REQUEST_COUNT_DESC =
       "Total number of region requests this RegionServer has answered, count by row-level action";
   String READ_REQUEST_COUNT = "readRequestCount";
-  String FILTERED_READ_REQUEST_COUNT = "filteredReadRequestCount";
-  String FILTERED_READ_REQUEST_COUNT_DESC =
-      "Number of read requests this region server has answered.";
   String READ_REQUEST_COUNT_DESC =
       "Number of read requests this region server has answered.";
   String WRITE_REQUEST_COUNT = "writeRequestCount";

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java
----------------------------------------------------------------------
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 850f82c..9a725cd 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
@@ -94,8 +94,6 @@ public interface MetricsRegionWrapper {
    */
   long getWriteRequestCount();
 
-  long getTotalRequestCount();
-
   long getNumFilesCompacted();
 
   long getNumBytesCompacted();

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSource.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSource.java
index 988d945..6ee0c3d 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSource.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSource.java
@@ -50,16 +50,18 @@ public interface MetricsTableAggregateSource extends BaseSource {
   String NUMBER_OF_TABLES_DESC = "Number of tables in the metrics system";
 
   /**
-   * Returns MetricsTableSource registered for the table. Creates one if not defined.
+   * Register a MetricsTableSource as being open.
+   *
    * @param table The table name
+   * @param source the source for the table being opened.
    */
-  MetricsTableSource getOrCreateTableSource(String table, MetricsTableWrapperAggregate wrapper);
+  void register(String table, MetricsTableSource source);
 
   /**
    * Remove a table's source. This is called when regions of a table are closed.
    *
    * @param table The table name
    */
-  void deleteTableSource(String table);
+  void deregister(String table);
 
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSource.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSource.java
index 0446ee5..7d1f5d0 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSource.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSource.java
@@ -18,14 +18,22 @@
 
 package org.apache.hadoop.hbase.regionserver;
 
-import java.io.Closeable;
-
 /**
  * This interface will be implemented to allow region server to push table metrics into
  * MetricsRegionAggregateSource that will in turn push data to the Hadoop metrics system.
  */
-public interface MetricsTableSource extends Comparable<MetricsTableSource>, Closeable {
-
+public interface MetricsTableSource extends Comparable<MetricsTableSource> {
+
+  String READ_REQUEST_COUNT = "readRequestCount";
+  String READ_REQUEST_COUNT_DESC = "Number fo read requests";
+  String WRITE_REQUEST_COUNT = "writeRequestCount";
+  String WRITE_REQUEST_COUNT_DESC = "Number fo write requests";
+  String TOTAL_REQUEST_COUNT = "totalRequestCount";
+  String TOTAL_REQUEST_COUNT_DESC = "Number fo total requests";
+  String MEMSTORE_SIZE = "memstoreSize";
+  String MEMSTORE_SIZE_DESC = "The size of memory stores";
+  String STORE_FILE_SIZE = "storeFileSize";
+  String STORE_FILE_SIZE_DESC = "The size of store files size";
   String TABLE_SIZE = "tableSize";
   String TABLE_SIZE_DESC = "Total size of the table in the region server";
 
@@ -34,83 +42,11 @@ public interface MetricsTableSource extends Comparable<MetricsTableSource>, Clos
   /**
    * Close the table's metrics as all the region are closing.
    */
-  @Override
   void close();
 
-  void registerMetrics();
-
   /**
    * Get the aggregate source to which this reports.
    */
   MetricsTableAggregateSource getAggregateSource();
 
-  /**
-   * Update the split transaction time histogram
-   * @param t time it took, in milliseconds
-   */
-  void updateSplitTime(long t);
-
-  /**
-   * Increment number of a requested splits
-   */
-  void incrSplitRequest();
-
-  /**
-   * Increment number of successful splits
-   */
-  void incrSplitSuccess();
-
-  /**
-   * Update the flush time histogram
-   * @param t time it took, in milliseconds
-   */
-  void updateFlushTime(long t);
-
-  /**
-   * Update the flush memstore size histogram
-   * @param bytes the number of bytes in the memstore
-   */
-  void updateFlushMemstoreSize(long bytes);
-
-  /**
-   * Update the flush output file size histogram
-   * @param bytes the number of bytes in the output file
-   */
-  void updateFlushOutputSize(long bytes);
-
-  /**
-   * Update the compaction time histogram, both major and minor
-   * @param isMajor whether compaction is a major compaction
-   * @param t time it took, in milliseconds
-   */
-  void updateCompactionTime(boolean isMajor, long t);
-
-  /**
-   * Update the compaction input number of files histogram
-   * @param isMajor whether compaction is a major compaction
-   * @param c number of files
-   */
-  void updateCompactionInputFileCount(boolean isMajor, long c);
-
-  /**
-   * Update the compaction total input file size histogram
-   * @param isMajor whether compaction is a major compaction
-   * @param bytes the number of bytes of the compaction input file
-   */
-  void updateCompactionInputSize(boolean isMajor, long bytes);
-
-  /**
-   * Update the compaction output number of files histogram
-   * @param isMajor whether compaction is a major compaction
-   * @param c number of files
-   */
-  void updateCompactionOutputFileCount(boolean isMajor, long c);
-
-  /**
-   * Update the compaction total output file size
-   * @param isMajor whether compaction is a major compaction
-   * @param bytes the number of bytes of the compaction input file
-   */
-  void updateCompactionOutputSize(boolean isMajor, long bytes);
-
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
index 4e8988b..85ea4f6 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
@@ -28,17 +28,12 @@ public interface MetricsTableWrapperAggregate {
   /**
    * Get the number of read requests that have been issued against this table
    */
-  long getReadRequestCount(String table);
-
-  /**
-   * Get the total number of filtered read requests that have been issued against this table
-   */
-  long getFilteredReadRequestCount(String table);
+  long getReadRequestsCount(String table);
 
   /**
    * Get the number of write requests that have been issued against this table
    */
-  long getWriteRequestCount(String table);
+  long getWriteRequestsCount(String table);
 
   /**
    * Get the total number of requests that have been issued against this table
@@ -46,57 +41,17 @@ public interface MetricsTableWrapperAggregate {
   long getTotalRequestsCount(String table);
 
   /**
-   * Get the memory store size for this table
+   * Get the memory store size against this table
    */
-  long getMemstoreSize(String table);
+  long getMemstoresSize(String table);
 
   /**
-   * Get the store file size for this table
+   * Get the store file size against this table
    */
-  long getStoreFileSize(String table);
+  long getStoreFilesSize(String table);
 
   /**
-   * Get the table region size for this table
+   * Get the table region size against this table
    */
   long getTableSize(String table);
-
-  /**
-   * Get the average region size for this table
-   */
-  long getAvgRegionSize(String table);
-
-  /**
-   * Get the number of regions hosted on for this table
-   */
-  long getNumRegions(String table);
-
-  /**
-   * Get the number of stores hosted on for this table
-   */
-  long getNumStores(String table);
-
-  /**
-   * Get the number of store files hosted for this table
-   */
-  long getNumStoreFiles(String table);
-
-  /**
-   * @return Max age of store files for this table
-   */
-  long getMaxStoreFileAge(String table);
-
-  /**
-   * @return Min age of store files for this table
-   */
-  long getMinStoreFileAge(String table);
-
-  /**
-   *  @return Average age of store files for this table
-   */
-  long getAvgStoreFileAge(String table);
-
-  /**
-   *  @return Number of reference files for this table
-   */
-  long getNumReferenceFiles(String table);
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/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 d595e85..8833026 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
@@ -54,10 +54,9 @@ public class MetricsRegionServerSourceImpl
   private final MutableFastCounter slowGet;
   private final MutableFastCounter slowIncrement;
   private final MutableFastCounter slowAppend;
-
-  // split related metrics
   private final MutableFastCounter splitRequest;
   private final MutableFastCounter splitSuccess;
+
   private final MetricHistogram splitTimeHisto;
 
   // flush related metrics

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSourceImpl.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSourceImpl.java
index 43186b8..b46a21f 100644
--- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSourceImpl.java
+++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSourceImpl.java
@@ -22,7 +22,6 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.metrics.BaseSourceImpl;
 import org.apache.hadoop.hbase.metrics.Interns;
@@ -47,46 +46,22 @@ implements MetricsTableAggregateSource {
     super(metricsName, metricsDescription, metricsContext, metricsJmxContext);
   }
 
-  private void register(MetricsTableSource source) {
-    synchronized (this) {
-      source.registerMetrics();
-    }
+  @Override
+  public void register(String table, MetricsTableSource source) {
+    tableSources.put(table, source);
   }
 
   @Override
-  public void deleteTableSource(String table) {
+  public void deregister(String table) {
     try {
-      synchronized (this) {
-        MetricsTableSource source = tableSources.remove(table);
-        if (source != null) {
-          source.close();
-        }
-      }
+      tableSources.remove(table);
     } catch (Exception e) {
       // Ignored. If this errors out it means that someone is double
-      // closing the user source and the user metrics is already nulled out.
-      LOG.info("Error trying to remove " + table + " from " + getClass().getSimpleName(), e);
-    }
-  }
-
-  @Override
-  public MetricsTableSource getOrCreateTableSource(String table,
-      MetricsTableWrapperAggregate wrapper) {
-    MetricsTableSource source = tableSources.get(table);
-    if (source != null) {
-      return source;
-    }
-    source = CompatibilitySingletonFactory.getInstance(MetricsRegionServerSourceFactory.class)
-      .createTable(table, wrapper);
-    MetricsTableSource prev = tableSources.putIfAbsent(table, source);
-
-    if (prev != null) {
-      return prev;
-    } else {
-      // register the new metrics now
-      register(source);
+      // closing the region source and the region is already nulled out.
+      LOG.info(
+        "Error trying to remove " + table + " from " + this.getClass().getSimpleName(),
+        e);
     }
-    return source;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
index e97e887..5d1dd79 100644
--- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
+++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
@@ -25,54 +25,8 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.metrics.Interns;
-import org.apache.hadoop.metrics2.MetricHistogram;
 import org.apache.hadoop.metrics2.MetricsRecordBuilder;
 import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;
-import org.apache.hadoop.metrics2.lib.MutableFastCounter;
-
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTED_INPUT_BYTES;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTED_INPUT_BYTES_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTED_OUTPUT_BYTES;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTED_OUTPUT_BYTES_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_INPUT_FILE_COUNT;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_INPUT_FILE_COUNT_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_INPUT_SIZE;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_INPUT_SIZE_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_OUTPUT_FILE_COUNT;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_OUTPUT_FILE_COUNT_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_OUTPUT_SIZE;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_OUTPUT_SIZE_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_TIME;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_TIME_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSHED_MEMSTORE_BYTES;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSHED_MEMSTORE_BYTES_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSHED_OUTPUT_BYTES;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSHED_OUTPUT_BYTES_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSH_MEMSTORE_SIZE;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSH_MEMSTORE_SIZE_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSH_OUTPUT_SIZE;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSH_OUTPUT_SIZE_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSH_TIME;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSH_TIME_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTED_INPUT_BYTES;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTED_INPUT_BYTES_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTED_OUTPUT_BYTES;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTED_OUTPUT_BYTES_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_INPUT_FILE_COUNT;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_INPUT_FILE_COUNT_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_INPUT_SIZE;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_INPUT_SIZE_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_OUTPUT_FILE_COUNT;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_OUTPUT_FILE_COUNT_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_OUTPUT_SIZE;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_OUTPUT_SIZE_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_TIME;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAJOR_COMPACTION_TIME_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SPLIT_KEY;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SPLIT_REQUEST_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SPLIT_REQUEST_KEY;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SPLIT_SUCCESS_DESC;
-import static org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SPLIT_SUCCESS_KEY;
 
 @InterfaceAudience.Private
 public class MetricsTableSourceImpl implements MetricsTableSource {
@@ -92,41 +46,12 @@ public class MetricsTableSourceImpl implements MetricsTableSource {
   private final TableName tableName;
   private final int hashCode;
 
-  // split related metrics
-  private MutableFastCounter splitRequest;
-  private MutableFastCounter splitSuccess;
-  private MetricHistogram splitTimeHisto;
-
-  // flush related metrics
-  private MetricHistogram flushTimeHisto;
-  private MetricHistogram flushMemstoreSizeHisto;
-  private MetricHistogram flushOutputSizeHisto;
-  private MutableFastCounter flushedMemstoreBytes;
-  private MutableFastCounter flushedOutputBytes;
-
-  // compaction related metrics
-  private MetricHistogram compactionTimeHisto;
-  private MetricHistogram compactionInputFileCountHisto;
-  private MetricHistogram compactionInputSizeHisto;
-  private MetricHistogram compactionOutputFileCountHisto;
-  private MetricHistogram compactionOutputSizeHisto;
-  private MutableFastCounter compactedInputBytes;
-  private MutableFastCounter compactedOutputBytes;
-
-  private MetricHistogram majorCompactionTimeHisto;
-  private MetricHistogram majorCompactionInputFileCountHisto;
-  private MetricHistogram majorCompactionInputSizeHisto;
-  private MetricHistogram majorCompactionOutputFileCountHisto;
-  private MetricHistogram majorCompactionOutputSizeHisto;
-  private MutableFastCounter majorCompactedInputBytes;
-  private MutableFastCounter majorCompactedOutputBytes;
-
   public MetricsTableSourceImpl(String tblName,
       MetricsTableAggregateSourceImpl aggregate, MetricsTableWrapperAggregate tblWrapperAgg) {
     LOG.debug("Creating new MetricsTableSourceImpl for table ");
     this.tableName = TableName.valueOf(tblName);
     this.agg = aggregate;
-
+    agg.register(tblName, this);
     this.tableWrapperAgg = tblWrapperAgg;
     this.registry = agg.getMetricsRegistry();
     this.tableNamePrefix = "Namespace_" + this.tableName.getNamespaceAsString() +
@@ -135,79 +60,6 @@ public class MetricsTableSourceImpl implements MetricsTableSource {
   }
 
   @Override
-  public synchronized void registerMetrics() {
-    flushTimeHisto = registry.newTimeHistogram(tableNamePrefix + FLUSH_TIME, FLUSH_TIME_DESC);
-    flushMemstoreSizeHisto =
-        registry.newSizeHistogram(tableNamePrefix + FLUSH_MEMSTORE_SIZE, FLUSH_MEMSTORE_SIZE_DESC);
-    flushOutputSizeHisto =
-        registry.newSizeHistogram(tableNamePrefix + FLUSH_OUTPUT_SIZE, FLUSH_OUTPUT_SIZE_DESC);
-    flushedOutputBytes =
-        registry.newCounter(tableNamePrefix + FLUSHED_OUTPUT_BYTES, FLUSHED_OUTPUT_BYTES_DESC, 0L);
-    flushedMemstoreBytes = registry.newCounter(tableNamePrefix + FLUSHED_MEMSTORE_BYTES,
-      FLUSHED_MEMSTORE_BYTES_DESC, 0L);
-
-    compactionTimeHisto =
-        registry.newTimeHistogram(tableNamePrefix + COMPACTION_TIME, COMPACTION_TIME_DESC);
-    compactionInputFileCountHisto = registry.newHistogram(
-      tableNamePrefix + COMPACTION_INPUT_FILE_COUNT, COMPACTION_INPUT_FILE_COUNT_DESC);
-    compactionInputSizeHisto = registry.newSizeHistogram(tableNamePrefix + COMPACTION_INPUT_SIZE,
-      COMPACTION_INPUT_SIZE_DESC);
-    compactionOutputFileCountHisto = registry.newHistogram(
-      tableNamePrefix + COMPACTION_OUTPUT_FILE_COUNT, COMPACTION_OUTPUT_FILE_COUNT_DESC);
-    compactionOutputSizeHisto = registry.newSizeHistogram(tableNamePrefix + COMPACTION_OUTPUT_SIZE,
-      COMPACTION_OUTPUT_SIZE_DESC);
-    compactedInputBytes = registry.newCounter(tableNamePrefix + COMPACTED_INPUT_BYTES,
-      COMPACTED_INPUT_BYTES_DESC, 0L);
-    compactedOutputBytes = registry.newCounter(tableNamePrefix + COMPACTED_OUTPUT_BYTES,
-      COMPACTED_OUTPUT_BYTES_DESC, 0L);
-
-    majorCompactionTimeHisto = registry.newTimeHistogram(tableNamePrefix + MAJOR_COMPACTION_TIME,
-      MAJOR_COMPACTION_TIME_DESC);
-    majorCompactionInputFileCountHisto = registry.newHistogram(
-      tableNamePrefix + MAJOR_COMPACTION_INPUT_FILE_COUNT, MAJOR_COMPACTION_INPUT_FILE_COUNT_DESC);
-    majorCompactionInputSizeHisto = registry.newSizeHistogram(
-      tableNamePrefix + MAJOR_COMPACTION_INPUT_SIZE, MAJOR_COMPACTION_INPUT_SIZE_DESC);
-    majorCompactionOutputFileCountHisto =
-        registry.newHistogram(tableNamePrefix + MAJOR_COMPACTION_OUTPUT_FILE_COUNT,
-          MAJOR_COMPACTION_OUTPUT_FILE_COUNT_DESC);
-    majorCompactionOutputSizeHisto = registry.newSizeHistogram(
-      tableNamePrefix + MAJOR_COMPACTION_OUTPUT_SIZE, MAJOR_COMPACTION_OUTPUT_SIZE_DESC);
-    majorCompactedInputBytes = registry.newCounter(tableNamePrefix + MAJOR_COMPACTED_INPUT_BYTES,
-      MAJOR_COMPACTED_INPUT_BYTES_DESC, 0L);
-    majorCompactedOutputBytes = registry.newCounter(tableNamePrefix + MAJOR_COMPACTED_OUTPUT_BYTES,
-      MAJOR_COMPACTED_OUTPUT_BYTES_DESC, 0L);
-
-    splitTimeHisto = registry.newTimeHistogram(tableNamePrefix + SPLIT_KEY);
-    splitRequest = registry.newCounter(tableNamePrefix + SPLIT_REQUEST_KEY, SPLIT_REQUEST_DESC, 0L);
-    splitSuccess = registry.newCounter(tableNamePrefix + SPLIT_SUCCESS_KEY, SPLIT_SUCCESS_DESC, 0L);
-  }
-
-  private void deregisterMetrics() {
-    registry.removeHistogramMetrics(tableNamePrefix + FLUSH_TIME);
-    registry.removeHistogramMetrics(tableNamePrefix + FLUSH_MEMSTORE_SIZE);
-    registry.removeHistogramMetrics(tableNamePrefix + FLUSH_OUTPUT_SIZE);
-    registry.removeMetric(tableNamePrefix + FLUSHED_OUTPUT_BYTES);
-    registry.removeMetric(tableNamePrefix + FLUSHED_MEMSTORE_BYTES);
-    registry.removeHistogramMetrics(tableNamePrefix + COMPACTION_TIME);
-    registry.removeHistogramMetrics(tableNamePrefix + COMPACTION_INPUT_FILE_COUNT);
-    registry.removeHistogramMetrics(tableNamePrefix + COMPACTION_INPUT_SIZE);
-    registry.removeHistogramMetrics(tableNamePrefix + COMPACTION_OUTPUT_FILE_COUNT);
-    registry.removeHistogramMetrics(tableNamePrefix + COMPACTION_OUTPUT_SIZE);
-    registry.removeMetric(tableNamePrefix + COMPACTED_INPUT_BYTES);
-    registry.removeMetric(tableNamePrefix + COMPACTED_OUTPUT_BYTES);
-    registry.removeHistogramMetrics(tableNamePrefix + MAJOR_COMPACTION_TIME);
-    registry.removeHistogramMetrics(tableNamePrefix + MAJOR_COMPACTION_INPUT_FILE_COUNT);
-    registry.removeHistogramMetrics(tableNamePrefix + MAJOR_COMPACTION_INPUT_SIZE);
-    registry.removeHistogramMetrics(tableNamePrefix + MAJOR_COMPACTION_OUTPUT_FILE_COUNT);
-    registry.removeHistogramMetrics(tableNamePrefix + MAJOR_COMPACTION_OUTPUT_SIZE);
-    registry.removeMetric(tableNamePrefix + MAJOR_COMPACTED_INPUT_BYTES);
-    registry.removeMetric(tableNamePrefix + MAJOR_COMPACTED_OUTPUT_BYTES);
-    registry.removeHistogramMetrics(tableNamePrefix + SPLIT_KEY);
-    registry.removeMetric(tableNamePrefix + SPLIT_REQUEST_KEY);
-    registry.removeMetric(tableNamePrefix + SPLIT_SUCCESS_KEY);
-  }
-
-  @Override
   public void close() {
     boolean wasClosed = closed.getAndSet(true);
 
@@ -218,7 +70,7 @@ public class MetricsTableSourceImpl implements MetricsTableSource {
 
     // Before removing the metrics remove this table from the aggregate table bean.
     // This should mean that it's unlikely that snapshot and close happen at the same time.
-    agg.deleteTableSource(tableName.getNameAsString());
+    agg.deregister(tableName.getNameAsString());
 
     // While it's un-likely that snapshot and close happen at the same time it's still possible.
     // So grab the lock to ensure that all calls to snapshot are done before we remove the metrics
@@ -226,7 +78,6 @@ public class MetricsTableSourceImpl implements MetricsTableSource {
       if (LOG.isTraceEnabled()) {
         LOG.trace("Removing table Metrics for table ");
       }
-      deregisterMetrics();
       tableWrapperAgg = null;
     }
   }
@@ -271,52 +122,24 @@ public class MetricsTableSourceImpl implements MetricsTableSource {
       }
 
       if (this.tableWrapperAgg != null) {
-        mrb.addCounter(Interns.info(tableNamePrefix + MetricsRegionServerSource.READ_REQUEST_COUNT,
-          MetricsRegionServerSource.READ_REQUEST_COUNT_DESC),
-          tableWrapperAgg.getReadRequestCount(tableName.getNameAsString()));
-        mrb.addCounter(
-          Interns.info(tableNamePrefix + MetricsRegionServerSource.FILTERED_READ_REQUEST_COUNT,
-          MetricsRegionServerSource.FILTERED_READ_REQUEST_COUNT_DESC),
-          tableWrapperAgg.getFilteredReadRequestCount(tableName.getNameAsString()));
-        mrb.addCounter(Interns.info(tableNamePrefix + MetricsRegionServerSource.WRITE_REQUEST_COUNT,
-          MetricsRegionServerSource.WRITE_REQUEST_COUNT_DESC),
-          tableWrapperAgg.getWriteRequestCount(tableName.getNameAsString()));
-        mrb.addCounter(Interns.info(tableNamePrefix + MetricsRegionServerSource.TOTAL_REQUEST_COUNT,
-          MetricsRegionServerSource.TOTAL_REQUEST_COUNT_DESC),
+        mrb.addCounter(Interns.info(tableNamePrefix + MetricsTableSource.READ_REQUEST_COUNT,
+          MetricsTableSource.READ_REQUEST_COUNT_DESC),
+          tableWrapperAgg.getReadRequestsCount(tableName.getNameAsString()));
+        mrb.addCounter(Interns.info(tableNamePrefix + MetricsTableSource.WRITE_REQUEST_COUNT,
+          MetricsTableSource.WRITE_REQUEST_COUNT_DESC),
+          tableWrapperAgg.getWriteRequestsCount(tableName.getNameAsString()));
+        mrb.addCounter(Interns.info(tableNamePrefix + MetricsTableSource.TOTAL_REQUEST_COUNT,
+          MetricsTableSource.TOTAL_REQUEST_COUNT_DESC),
           tableWrapperAgg.getTotalRequestsCount(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.MEMSTORE_SIZE,
-          MetricsRegionServerSource.MEMSTORE_SIZE_DESC),
-          tableWrapperAgg.getMemstoreSize(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.STOREFILE_COUNT,
-          MetricsRegionServerSource.STOREFILE_COUNT_DESC),
-          tableWrapperAgg.getNumStoreFiles(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.STOREFILE_SIZE,
-          MetricsRegionServerSource.STOREFILE_SIZE_DESC),
-          tableWrapperAgg.getStoreFileSize(tableName.getNameAsString()));
+        mrb.addGauge(Interns.info(tableNamePrefix + MetricsTableSource.MEMSTORE_SIZE,
+          MetricsTableSource.MEMSTORE_SIZE_DESC),
+          tableWrapperAgg.getMemstoresSize(tableName.getNameAsString()));
+        mrb.addGauge(Interns.info(tableNamePrefix + MetricsTableSource.STORE_FILE_SIZE,
+          MetricsTableSource.STORE_FILE_SIZE_DESC),
+          tableWrapperAgg.getStoreFilesSize(tableName.getNameAsString()));
         mrb.addGauge(Interns.info(tableNamePrefix + MetricsTableSource.TABLE_SIZE,
           MetricsTableSource.TABLE_SIZE_DESC),
           tableWrapperAgg.getTableSize(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.AVERAGE_REGION_SIZE,
-          MetricsRegionServerSource.AVERAGE_REGION_SIZE_DESC),
-          tableWrapperAgg.getAvgRegionSize(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.REGION_COUNT,
-          MetricsRegionServerSource.REGION_COUNT_DESC),
-          tableWrapperAgg.getNumRegions(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.STORE_COUNT,
-          MetricsRegionServerSource.STORE_COUNT_DESC),
-          tableWrapperAgg.getNumStores(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.MAX_STORE_FILE_AGE,
-          MetricsRegionServerSource.MAX_STORE_FILE_AGE_DESC),
-          tableWrapperAgg.getMaxStoreFileAge(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.MIN_STORE_FILE_AGE,
-          MetricsRegionServerSource.MIN_STORE_FILE_AGE_DESC),
-          tableWrapperAgg.getMinStoreFileAge(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.AVG_STORE_FILE_AGE,
-          MetricsRegionServerSource.AVG_STORE_FILE_AGE_DESC),
-          tableWrapperAgg.getAvgStoreFileAge(tableName.getNameAsString()));
-        mrb.addGauge(Interns.info(tableNamePrefix + MetricsRegionServerSource.NUM_REFERENCE_FILES,
-          MetricsRegionServerSource.NUM_REFERENCE_FILES_DESC),
-          tableWrapperAgg.getNumReferenceFiles(tableName.getNameAsString()));
       }
     }
   }
@@ -345,80 +168,4 @@ public class MetricsTableSourceImpl implements MetricsTableSource {
   public String getTableNamePrefix() {
     return tableNamePrefix;
   }
-
-  @Override
-  public void incrSplitRequest() {
-    splitRequest.incr();
-  }
-
-  @Override
-  public void incrSplitSuccess() {
-    splitSuccess.incr();
-  }
-
-  @Override
-  public void updateSplitTime(long t) {
-    splitTimeHisto.add(t);
-  }
-
-  @Override
-  public void updateFlushTime(long t) {
-    flushTimeHisto.add(t);
-  }
-
-  @Override
-  public void updateFlushMemstoreSize(long bytes) {
-    flushMemstoreSizeHisto.add(bytes);
-    flushedMemstoreBytes.incr(bytes);
-  }
-
-  @Override
-  public void updateFlushOutputSize(long bytes) {
-    flushOutputSizeHisto.add(bytes);
-    flushedOutputBytes.incr(bytes);
-  }
-
-  @Override
-  public void updateCompactionTime(boolean isMajor, long t) {
-    compactionTimeHisto.add(t);
-    if (isMajor) {
-      majorCompactionTimeHisto.add(t);
-    }
-  }
-
-  @Override
-  public void updateCompactionInputFileCount(boolean isMajor, long c) {
-    compactionInputFileCountHisto.add(c);
-    if (isMajor) {
-      majorCompactionInputFileCountHisto.add(c);
-    }
-  }
-
-  @Override
-  public void updateCompactionInputSize(boolean isMajor, long bytes) {
-    compactionInputSizeHisto.add(bytes);
-    compactedInputBytes.incr(bytes);
-    if (isMajor) {
-      majorCompactionInputSizeHisto.add(bytes);
-      majorCompactedInputBytes.incr(bytes);
-    }
-  }
-
-  @Override
-  public void updateCompactionOutputFileCount(boolean isMajor, long c) {
-    compactionOutputFileCountHisto.add(c);
-    if (isMajor) {
-      majorCompactionOutputFileCountHisto.add(c);
-    }
-  }
-
-  @Override
-  public void updateCompactionOutputSize(boolean isMajor, long bytes) {
-    compactionOutputSizeHisto.add(bytes);
-    compactedOutputBytes.incr(bytes);
-    if (isMajor) {
-      majorCompactionOutputSizeHisto.add(bytes);
-      majorCompactedOutputBytes.incr(bytes);
-    }
-  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
deleted file mode 100644
index 83eb3eb..0000000
--- a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.regionserver;
-
-public class MetricsTableWrapperStub implements MetricsTableWrapperAggregate {
-
-  private String tableName;
-
-  public MetricsTableWrapperStub(String tableName) {
-    this.tableName = tableName;
-  }
-
-  @Override
-  public long getReadRequestCount(String table) {
-    return 10;
-  }
-
-  @Override
-  public long getWriteRequestCount(String table) {
-    return 20;
-  }
-
-  @Override
-  public long getTotalRequestsCount(String table) {
-    return 30;
-  }
-
-  @Override
-  public long getFilteredReadRequestCount(String table) {
-    return 40;
-  }
-
-  @Override
-  public long getMemstoreSize(String table) {
-    return 1000;
-  }
-
-  @Override
-  public long getStoreFileSize(String table) {
-    return 2000;
-  }
-
-  @Override
-  public long getTableSize(String table) {
-    return 3000;
-  }
-
-  public String getTableName() {
-    return tableName;
-  }
-
-  @Override
-  public long getNumRegions(String table) {
-    return 11;
-  }
-
-  @Override
-  public long getNumStores(String table) {
-    return 22;
-  }
-
-  @Override
-  public long getNumStoreFiles(String table) {
-    return 33;
-  }
-
-  @Override
-  public long getMaxStoreFileAge(String table) {
-    return 44;
-  }
-
-  @Override
-  public long getMinStoreFileAge(String table) {
-    return 55;
-  }
-
-  @Override
-  public long getAvgStoreFileAge(String table) {
-    return 66;
-  }
-
-  @Override
-  public long getNumReferenceFiles(String table) {
-    return 77;
-  }
-
-  @Override
-  public long getAvgRegionSize(String table) {
-    return 88;
-  }
-}

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java
----------------------------------------------------------------------
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 17f769b..b39c467 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
@@ -191,10 +191,5 @@ public class TestMetricsRegionSourceImpl {
     public long getMaxFlushQueueSize() {
       return 0;
     }
-
-    @Override
-    public long getTotalRequestCount() {
-      return 0;
-    }
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableSourceImpl.java
----------------------------------------------------------------------
diff --git a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableSourceImpl.java b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableSourceImpl.java
index 7a70da1..3a9e73d 100644
--- a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableSourceImpl.java
+++ b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableSourceImpl.java
@@ -40,12 +40,9 @@ public class TestMetricsTableSourceImpl {
     MetricsRegionServerSourceFactory metricsFact =
         CompatibilitySingletonFactory.getInstance(MetricsRegionServerSourceFactory.class);
 
-    MetricsTableSource one = metricsFact.createTable(
-      "ONETABLE", new MetricsTableWrapperStub("ONETABLE"));
-    MetricsTableSource oneClone = metricsFact.createTable(
-      "ONETABLE", new MetricsTableWrapperStub("ONETABLE"));
-    MetricsTableSource two = metricsFact.createTable(
-      "TWOTABLE", new MetricsTableWrapperStub("TWOTABLE"));
+    MetricsTableSource one = metricsFact.createTable("ONETABLE", new TableWrapperStub("ONETABLE"));
+    MetricsTableSource oneClone = metricsFact.createTable("ONETABLE", new TableWrapperStub("ONETABLE"));
+    MetricsTableSource two = metricsFact.createTable("TWOTABLE", new TableWrapperStub("TWOTABLE"));
 
     assertEquals(0, one.compareTo(oneClone));
     assertEquals(one.hashCode(), oneClone.hashCode());
@@ -68,7 +65,50 @@ public class TestMetricsTableSourceImpl {
   public void testGetTableMetrics() throws Exception{
     MetricsTableSource oneTbl =
         CompatibilitySingletonFactory.getInstance(MetricsRegionServerSourceFactory.class)
-        .createTable("ONETABLE", new MetricsTableWrapperStub("ONETABLE"));
+        .createTable("ONETABLE", new TableWrapperStub("ONETABLE"));
     assertEquals("ONETABLE", oneTbl.getTableName());
   }
+
+  static class TableWrapperStub implements MetricsTableWrapperAggregate {
+
+    private String tableName;
+
+    public TableWrapperStub(String tableName) {
+      this.tableName = tableName;
+    }
+
+    @Override
+    public long getReadRequestsCount(String table) {
+      return 10;
+    }
+
+    @Override
+    public long getWriteRequestsCount(String table) {
+      return 20;
+    }
+
+    @Override
+    public long getTotalRequestsCount(String table) {
+      return 30;
+    }
+
+    @Override
+    public long getMemstoresSize(String table) {
+      return 1000;
+    }
+
+    @Override
+    public long getStoreFilesSize(String table) {
+      return 2000;
+    }
+
+    @Override
+    public long getTableSize(String table) {
+      return 3000;
+    }
+
+    public String getTableName() {
+      return tableName;
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
----------------------------------------------------------------------
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 25f151d..d333619 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
@@ -2703,9 +2703,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
     status.setStatus(msg);
 
     if (rsServices != null && rsServices.getMetrics() != null) {
-      rsServices.getMetrics().updateFlush(
-        getTableDesc().getTableName().getNameAsString(),
-        time - startTime,
+      rsServices.getMetrics().updateFlush(time - startTime,
         totalFlushableSizeOfFlushableStores, flushedOutputFileSize);
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
index 0b4ea6b..6c32643 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
@@ -1450,7 +1450,7 @@ public class HRegionServer extends HasThread implements
       this.walFactory = setupWALAndReplication();
       // Init in here rather than in constructor after thread name has been set
       this.metricsRegionServer = new MetricsRegionServer(
-          new MetricsRegionServerWrapperImpl(this), conf, metricsTable);
+          new MetricsRegionServerWrapperImpl(this), conf);
       this.metricsTable = new MetricsTable(new MetricsTableWrapperAggregateImpl(this));
       // Now that we have a metrics source, start the pause monitor
       this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
----------------------------------------------------------------------
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 e6792e7..6ce41e3 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
@@ -1380,10 +1380,9 @@ public class HStore implements Store {
       long now = EnvironmentEdgeManager.currentTime();
       if (region.getRegionServerServices() != null
           && region.getRegionServerServices().getMetrics() != null) {
-        region.getRegionServerServices().getMetrics().updateCompaction(
-          region.getTableDesc().getTableName().getNameAsString(),
-          cr.isMajor(), now - compactionStartTime, cr.getFiles().size(),
-          newFiles.size(), cr.getSize(), outputBytes);
+        region.getRegionServerServices().getMetrics().updateCompaction(cr.isMajor(),
+          now - compactionStartTime, cr.getFiles().size(), newFiles.size(), cr.getSize(),
+          outputBytes);
       }
 
       logCompactionEndMessage(cr, sfs, now, compactionStartTime);
@@ -2253,7 +2252,7 @@ public class HStore implements Store {
       latestTS = (createdTS > latestTS) ? createdTS : latestTS;
     }
     long now = EnvironmentEdgeManager.currentTime();
-    return latestTS == 0 ? 0 : now - latestTS;
+    return now - latestTS;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/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 9466886..f6035c1 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
@@ -46,18 +46,15 @@ public class MetricsRegionServer {
   private MetricsRegionServerSource serverSource;
   private MetricsRegionServerWrapper regionServerWrapper;
   private RegionServerTableMetrics tableMetrics;
-  private final MetricsTable metricsTable;
 
   private MetricRegistry metricRegistry;
   private Timer bulkLoadTimer;
 
-  public MetricsRegionServer(MetricsRegionServerWrapper regionServerWrapper, Configuration conf,
-      MetricsTable metricsTable) {
+  public MetricsRegionServer(MetricsRegionServerWrapper regionServerWrapper, Configuration conf) {
     this(regionServerWrapper,
         CompatibilitySingletonFactory.getInstance(MetricsRegionServerSourceFactory.class)
             .createServer(regionServerWrapper),
-        createTableMetrics(conf),
-        metricsTable);
+        createTableMetrics(conf));
 
     // Create hbase-metrics module based metrics. The registry should already be registered by the
     // MetricsRegionServerSource
@@ -69,12 +66,10 @@ public class MetricsRegionServer {
 
   MetricsRegionServer(MetricsRegionServerWrapper regionServerWrapper,
                       MetricsRegionServerSource serverSource,
-                      RegionServerTableMetrics tableMetrics,
-                      MetricsTable metricsTable) {
+                      RegionServerTableMetrics tableMetrics) {
     this.regionServerWrapper = regionServerWrapper;
     this.serverSource = serverSource;
     this.tableMetrics = tableMetrics;
-    this.metricsTable = metricsTable;
   }
 
   /**
@@ -198,33 +193,19 @@ public class MetricsRegionServer {
     serverSource.incrSplitSuccess();
   }
 
-  public void updateFlush(String table, long t, long memstoreSize, long fileSize) {
+  public void updateFlush(long t, long memstoreSize, long fileSize) {
     serverSource.updateFlushTime(t);
     serverSource.updateFlushMemstoreSize(memstoreSize);
     serverSource.updateFlushOutputSize(fileSize);
-
-    if (table != null) {
-      metricsTable.updateFlushTime(table, memstoreSize);
-      metricsTable.updateFlushMemstoreSize(table, memstoreSize);
-      metricsTable.updateFlushOutputSize(table, fileSize);
-    }
   }
 
-  public void updateCompaction(String table, boolean isMajor, long t, int inputFileCount,
-      int outputFileCount, long inputBytes, long outputBytes) {
+  public void updateCompaction(boolean isMajor, long t, int inputFileCount, int outputFileCount,
+      long inputBytes, long outputBytes) {
     serverSource.updateCompactionTime(isMajor, t);
     serverSource.updateCompactionInputFileCount(isMajor, inputFileCount);
     serverSource.updateCompactionOutputFileCount(isMajor, outputFileCount);
     serverSource.updateCompactionInputSize(isMajor, inputBytes);
     serverSource.updateCompactionOutputSize(isMajor, outputBytes);
-
-    if (table != null) {
-      metricsTable.updateCompactionTime(table, isMajor, t);
-      metricsTable.updateCompactionInputFileCount(table, isMajor, inputFileCount);
-      metricsTable.updateCompactionOutputFileCount(table, isMajor, outputFileCount);
-      metricsTable.updateCompactionInputSize(table, isMajor, inputBytes);
-      metricsTable.updateCompactionOutputSize(table, isMajor, outputBytes);
-    }
   }
 
   public void updateBulkLoad(long millis) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java
----------------------------------------------------------------------
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 f9923a6..60085f6 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
@@ -155,11 +155,6 @@ public class MetricsRegionWrapperImpl implements MetricsRegionWrapper, Closeable
   }
 
   @Override
-  public long getTotalRequestCount() {
-    return getReadRequestCount() + getWriteRequestCount();
-  }
-
-  @Override
   public long getNumCompactionsFailed() {
     return this.region.compactionsFailed.get();
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTable.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTable.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTable.java
index 2e906c9..e08fda5 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTable.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTable.java
@@ -24,67 +24,19 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience;
 @InterfaceAudience.Private
 public class MetricsTable {
   private final MetricsTableAggregateSource tableSourceAgg;
-  private MetricsTableWrapperAggregate wrapper;
+  private MetricsTableWrapperAggregate tableWrapperAgg;
 
   public MetricsTable(final MetricsTableWrapperAggregate wrapper) {
     tableSourceAgg = CompatibilitySingletonFactory.getInstance(MetricsRegionServerSourceFactory.class)
                                              .getTableAggregate();
-    this.wrapper = wrapper;
+    this.tableWrapperAgg = wrapper;
   }
 
   public MetricsTableWrapperAggregate getTableWrapperAgg() {
-    return wrapper;
+    return tableWrapperAgg;
   }
 
   public MetricsTableAggregateSource getTableSourceAgg() {
     return tableSourceAgg;
   }
-
-  public void incrSplitRequest(String table) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper).incrSplitRequest();
-  }
-
-  public void incrSplitSuccess(String table) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper).incrSplitSuccess();
-  }
-
-  public void updateSplitTime(String table, long t) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper).updateSplitTime(t);
-  }
-
-  public void updateFlushTime(String table, long t) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper).updateFlushTime(t);
-  }
-
-  public void updateFlushMemstoreSize(String table, long bytes) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper).updateFlushMemstoreSize(bytes);
-  }
-
-  public void updateFlushOutputSize(String table, long bytes) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper).updateFlushOutputSize(bytes);
-  }
-
-  public void updateCompactionTime(String table, boolean isMajor, long t) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper).updateCompactionTime(isMajor, t);
-  }
-
-  public void updateCompactionInputFileCount(String table, boolean isMajor, long c) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper)
-      .updateCompactionInputFileCount(isMajor, c);
-  }
-
-  public void updateCompactionInputSize(String table, boolean isMajor, long bytes) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper)
-      .updateCompactionInputSize(isMajor, bytes);
-  }
-
-  public void updateCompactionOutputFileCount(String table, boolean isMajor, long c) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper)
-      .updateCompactionOutputFileCount(isMajor, c);
-  }
-
-  public void updateCompactionOutputSize(String table, boolean isMajor, long bytes) {
-    tableSourceAgg.getOrCreateTableSource(table, wrapper)
-      .updateCompactionOutputSize(isMajor, bytes);
-  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
index a2a3824..c5f0f7b 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
@@ -43,8 +43,7 @@ public class MetricsTableWrapperAggregateImpl implements MetricsTableWrapperAggr
   private Runnable runnable;
   private long period;
   private ScheduledFuture<?> tableMetricsUpdateTask;
-  private ConcurrentHashMap<TableName, MetricsTableValues> metricsTableMap
-    = new ConcurrentHashMap<>();
+  private ConcurrentHashMap<TableName, MetricsTableValues> metricsTableMap = new ConcurrentHashMap<>();
 
   public MetricsTableWrapperAggregateImpl(final HRegionServer regionServer) {
     this.regionServer = regionServer;
@@ -52,8 +51,8 @@ public class MetricsTableWrapperAggregateImpl implements MetricsTableWrapperAggr
       HConstants.DEFAULT_REGIONSERVER_METRICS_PERIOD) + 1000;
     this.executor = CompatibilitySingletonFactory.getInstance(MetricsExecutor.class).getExecutor();
     this.runnable = new TableMetricsWrapperRunnable();
-    this.tableMetricsUpdateTask = this.executor.scheduleWithFixedDelay(this.runnable, period,
-      this.period, TimeUnit.MILLISECONDS);
+    this.tableMetricsUpdateTask = this.executor.scheduleWithFixedDelay(this.runnable, period, this.period,
+      TimeUnit.MILLISECONDS);
   }
 
   public class TableMetricsWrapperRunnable implements Runnable {
@@ -63,43 +62,33 @@ public class MetricsTableWrapperAggregateImpl implements MetricsTableWrapperAggr
       Map<TableName, MetricsTableValues> localMetricsTableMap = new HashMap<>();
 
       for (Region r : regionServer.getOnlineRegionsLocalContext()) {
-        TableName tbl = r.getTableDesc().getTableName();
-        MetricsTableValues mt = localMetricsTableMap.get(tbl);
-        if (mt == null) {
-          mt = new MetricsTableValues();
-          localMetricsTableMap.put(tbl, mt);
+        TableName tbl= r.getTableDesc().getTableName();
+        MetricsTableValues metricsTable = localMetricsTableMap.get(tbl);
+        if (metricsTable == null) {
+          metricsTable = new MetricsTableValues();
+          localMetricsTableMap.put(tbl, metricsTable);
         }
-
-        if (r.getStores() != null) {
-          for (Store store : r.getStores()) {
-            mt.storeFileCount += store.getStorefilesCount();
-            mt.memstoreSize += store.getMemStoreSize();
-            mt.storeFileSize += store.getStorefilesSize();
-            mt.referenceFileCount += store.getNumReferenceFiles();
-
-            mt.maxStoreFileAge = Math.max(mt.maxStoreFileAge, store.getMaxStoreFileAge());
-            mt.minStoreFileAge = Math.min(mt.minStoreFileAge, store.getMinStoreFileAge());
-            mt.totalStoreFileAge = store.getAvgStoreFileAge() * store.getStorefilesCount();
-            mt.storeCount += 1;
-          }
+        long tempStorefilesSize = 0;
+        for (Store store : r.getStores()) {
+          tempStorefilesSize += store.getStorefilesSize();
         }
-
-        mt.regionCount += 1;
-
-        mt.readRequestCount += r.getReadRequestsCount();
-        mt.filteredReadRequestCount += getFilteredReadRequestCount(tbl.getNameAsString());
-        mt.writeRequestCount += r.getWriteRequestsCount();
+        metricsTable.setMemstoresSize(metricsTable.getMemstoresSize() + r.getMemstoreSize());
+        metricsTable.setStoreFilesSize(metricsTable.getStoreFilesSize() + tempStorefilesSize);
+        metricsTable.setTableSize(metricsTable.getMemstoresSize() + metricsTable.getStoreFilesSize());
+        metricsTable.setReadRequestsCount(metricsTable.getReadRequestsCount() + r.getReadRequestsCount());
+        metricsTable.setWriteRequestsCount(metricsTable.getWriteRequestsCount() + r.getWriteRequestsCount());
+        metricsTable.setTotalRequestsCount(metricsTable.getReadRequestsCount() + metricsTable.getWriteRequestsCount());
       }
 
-      for (Map.Entry<TableName, MetricsTableValues> entry : localMetricsTableMap.entrySet()) {
+      for(Map.Entry<TableName, MetricsTableValues> entry : localMetricsTableMap.entrySet()) {
         TableName tbl = entry.getKey();
         if (metricsTableMap.get(tbl) == null) {
-          // this will add the Wrapper to the list of TableMetrics
+          MetricsTableSource tableSource = CompatibilitySingletonFactory
+              .getInstance(MetricsRegionServerSourceFactory.class).createTable(tbl.getNameAsString(),
+                MetricsTableWrapperAggregateImpl.this);
           CompatibilitySingletonFactory
-              .getInstance(MetricsRegionServerSourceFactory.class)
-              .getTableAggregate()
-              .getOrCreateTableSource(tbl.getNameAsString(), MetricsTableWrapperAggregateImpl.this);
-
+          .getInstance(MetricsRegionServerSourceFactory.class).getTableAggregate()
+          .register(tbl.getNameAsString(), tableSource);
         }
         metricsTableMap.put(entry.getKey(), entry.getValue());
       }
@@ -108,7 +97,7 @@ public class MetricsTableWrapperAggregateImpl implements MetricsTableWrapperAggr
       MetricsTableAggregateSource agg = CompatibilitySingletonFactory
           .getInstance(MetricsRegionServerSourceFactory.class).getTableAggregate();
       for (TableName table : existingTableNames) {
-        agg.deleteTableSource(table.getNameAsString());
+        agg.deregister(table.getNameAsString());
         if (metricsTableMap.get(table) != null) {
           metricsTableMap.remove(table);
         }
@@ -117,165 +106,120 @@ public class MetricsTableWrapperAggregateImpl implements MetricsTableWrapperAggr
   }
 
   @Override
-  public long getReadRequestCount(String table) {
+  public long getReadRequestsCount(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
     if (metricsTable == null)
       return 0;
     else
-      return metricsTable.readRequestCount;
-  }
-
-  @Override
-  public long getFilteredReadRequestCount(String table) {
-    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
-      return 0;
-    }
-    return metricsTable.filteredReadRequestCount;
+      return metricsTable.getReadRequestsCount();
   }
 
   @Override
-  public long getWriteRequestCount(String table) {
+  public long getWriteRequestsCount(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
+    if (metricsTable == null)
       return 0;
-    }
-    return metricsTable.writeRequestCount;
+    else
+      return metricsTable.getWriteRequestsCount();
   }
 
   @Override
   public long getTotalRequestsCount(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
+    if (metricsTable == null)
       return 0;
-    }
-    return metricsTable.readRequestCount + metricsTable.writeRequestCount;
+    else
+      return metricsTable.getTotalRequestsCount();
   }
 
   @Override
-  public long getMemstoreSize(String table) {
+  public long getMemstoresSize(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
+    if (metricsTable == null)
       return 0;
-    }
-    return metricsTable.memstoreSize;
+    else
+      return metricsTable.getMemstoresSize();
   }
 
   @Override
-  public long getStoreFileSize(String table) {
+  public long getStoreFilesSize(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
+    if (metricsTable == null)
       return 0;
-    }
-    return metricsTable.storeFileSize;
+    else
+      return metricsTable.getStoreFilesSize();
   }
 
   @Override
   public long getTableSize(String table) {
     MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
+    if (metricsTable == null)
       return 0;
-    }
-    return metricsTable.memstoreSize + metricsTable.storeFileSize;
+    else
+      return metricsTable.getTableSize();
   }
 
   @Override
-  public long getNumRegions(String table) {
-    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
-      return 0;
-    }
-    return metricsTable.regionCount;
+  public void close() throws IOException {
+    tableMetricsUpdateTask.cancel(true);
   }
 
-  @Override
-  public long getNumStores(String table) {
-    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
-      return 0;
+  private static class MetricsTableValues {
+
+    private long totalRequestsCount;
+    private long readRequestsCount;
+    private long writeRequestsCount;
+    private long memstoresSize;
+    private long storeFilesSize;
+    private long tableSize;
+
+    public long getTotalRequestsCount() {
+      return totalRequestsCount;
     }
-    return metricsTable.storeCount;
-  }
 
-  @Override
-  public long getNumStoreFiles(String table) {
-    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
-      return 0;
+    public void setTotalRequestsCount(long totalRequestsCount) {
+      this.totalRequestsCount = totalRequestsCount;
     }
-    return metricsTable.storeFileCount;
-  }
 
-  @Override
-  public long getMaxStoreFileAge(String table) {
-    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
-      return 0;
+    public long getReadRequestsCount() {
+      return readRequestsCount;
     }
-    return metricsTable.maxStoreFileAge;
-  }
 
-  @Override
-  public long getMinStoreFileAge(String table) {
-    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
-      return 0;
+    public void setReadRequestsCount(long readRequestsCount) {
+      this.readRequestsCount = readRequestsCount;
     }
 
-    return metricsTable.minStoreFileAge == Long.MAX_VALUE ? 0 : metricsTable.minStoreFileAge;
-  }
+    public long getWriteRequestsCount() {
+      return writeRequestsCount;
+    }
 
-  @Override
-  public long getAvgStoreFileAge(String table) {
-    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
-      return 0;
+    public void setWriteRequestsCount(long writeRequestsCount) {
+      this.writeRequestsCount = writeRequestsCount;
     }
 
-    return metricsTable.storeFileCount == 0
-        ? 0
-        : (metricsTable.totalStoreFileAge / metricsTable.storeFileCount);
-  }
+    public long getMemstoresSize() {
+      return memstoresSize;
+    }
 
-  @Override
-  public long getNumReferenceFiles(String table) {
-    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
-      return 0;
+    public void setMemstoresSize(long memstoresSize) {
+      this.memstoresSize = memstoresSize;
     }
-    return metricsTable.referenceFileCount;
-  }
 
-  @Override
-  public long getAvgRegionSize(String table) {
-    MetricsTableValues metricsTable = metricsTableMap.get(TableName.valueOf(table));
-    if (metricsTable == null) {
-      return 0;
+    public long getStoreFilesSize() {
+      return storeFilesSize;
     }
 
-    return metricsTable.regionCount == 0
-        ? 0
-        : (metricsTable.memstoreSize + metricsTable.storeFileSize) / metricsTable.regionCount;
-  }
+    public void setStoreFilesSize(long storeFilesSize) {
+      this.storeFilesSize = storeFilesSize;
+    }
 
-  @Override
-  public void close() throws IOException {
-    tableMetricsUpdateTask.cancel(true);
-  }
+    public long getTableSize() {
+      return tableSize;
+    }
 
-  private static class MetricsTableValues {
-    long readRequestCount;
-    long filteredReadRequestCount;
-    long writeRequestCount;
-    long memstoreSize;
-    long regionCount;
-    long storeCount;
-    long storeFileCount;
-    long storeFileSize;
-    long maxStoreFileAge;
-    long minStoreFileAge = Long.MAX_VALUE;
-    long totalStoreFileAge;
-    long referenceFileCount;
+    public void setTableSize(long tableSize) {
+      this.tableSize = tableSize;
+    }
   }
 
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java
----------------------------------------------------------------------
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 8714347..4f18144 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
@@ -157,9 +157,4 @@ public class MetricsRegionWrapperStub implements MetricsRegionWrapper {
   public long getMaxFlushQueueSize() {
     return 6;
   }
-
-  @Override
-  public long getTotalRequestCount() {
-    return 0;
-  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
new file mode 100644
index 0000000..6fd8dd7
--- /dev/null
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
@@ -0,0 +1,62 @@
+/*
+ * 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.regionserver;
+
+public class MetricsTableWrapperStub implements MetricsTableWrapperAggregate {
+
+  private String tableName;
+
+  public MetricsTableWrapperStub(String tableName) {
+    this.tableName = tableName;
+  }
+
+  @Override
+  public long getReadRequestsCount(String table) {
+    return 10;
+  }
+
+  @Override
+  public long getWriteRequestsCount(String table) {
+    return 20;
+  }
+
+  @Override
+  public long getTotalRequestsCount(String table) {
+    return 30;
+  }
+
+  @Override
+  public long getMemstoresSize(String table) {
+    return 1000;
+  }
+
+  @Override
+  public long getStoreFilesSize(String table) {
+    return 2000;
+  }
+
+  @Override
+  public long getTableSize(String table) {
+    return 3000;
+  }
+
+  public String getTableName() {
+    return tableName;
+  }
+}

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
----------------------------------------------------------------------
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 7807c43..f954393 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
@@ -49,7 +49,7 @@ public class TestMetricsRegionServer {
   @Before
   public void setUp() {
     wrapper = new MetricsRegionServerWrapperStub();
-    rsm = new MetricsRegionServer(wrapper, new Configuration(false), null);
+    rsm = new MetricsRegionServer(wrapper, new Configuration(false));
     serverSource = rsm.getMetricsSource();
   }
 
@@ -175,14 +175,14 @@ public class TestMetricsRegionServer {
 
   @Test
   public void testFlush() {
-    rsm.updateFlush(null, 1, 2, 3);
+    rsm.updateFlush(1, 2, 3);
     HELPER.assertCounter("flushTime_num_ops", 1, serverSource);
     HELPER.assertCounter("flushMemstoreSize_num_ops", 1, serverSource);
     HELPER.assertCounter("flushOutputSize_num_ops", 1, serverSource);
     HELPER.assertCounter("flushedMemstoreBytes", 2, serverSource);
     HELPER.assertCounter("flushedOutputBytes", 3, serverSource);
 
-    rsm.updateFlush(null, 10, 20, 30);
+    rsm.updateFlush(10, 20, 30);
     HELPER.assertCounter("flushTimeNumOps", 2, serverSource);
     HELPER.assertCounter("flushMemstoreSize_num_ops", 2, serverSource);
     HELPER.assertCounter("flushOutputSize_num_ops", 2, serverSource);
@@ -192,7 +192,7 @@ public class TestMetricsRegionServer {
 
   @Test
   public void testCompaction() {
-    rsm.updateCompaction(null, false, 1, 2, 3, 4, 5);
+    rsm.updateCompaction(false, 1, 2, 3, 4, 5);
     HELPER.assertCounter("compactionTime_num_ops", 1, serverSource);
     HELPER.assertCounter("compactionInputFileCount_num_ops", 1, serverSource);
     HELPER.assertCounter("compactionInputSize_num_ops", 1, serverSource);
@@ -200,7 +200,7 @@ public class TestMetricsRegionServer {
     HELPER.assertCounter("compactedInputBytes", 4, serverSource);
     HELPER.assertCounter("compactedoutputBytes", 5, serverSource);
 
-    rsm.updateCompaction(null, false, 10, 20, 30, 40, 50);
+    rsm.updateCompaction(false, 10, 20, 30, 40, 50);
     HELPER.assertCounter("compactionTime_num_ops", 2, serverSource);
     HELPER.assertCounter("compactionInputFileCount_num_ops", 2, serverSource);
     HELPER.assertCounter("compactionInputSize_num_ops", 2, serverSource);
@@ -209,7 +209,7 @@ public class TestMetricsRegionServer {
     HELPER.assertCounter("compactedoutputBytes", 55, serverSource);
 
     // do major compaction
-    rsm.updateCompaction(null, true, 100, 200, 300, 400, 500);
+    rsm.updateCompaction(true, 100, 200, 300, 400, 500);
 
     HELPER.assertCounter("compactionTime_num_ops", 3, serverSource);
     HELPER.assertCounter("compactionInputFileCount_num_ops", 3, serverSource);

http://git-wip-us.apache.org/repos/asf/hbase/blob/cf198a65/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableAggregate.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableAggregate.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableAggregate.java
index bed4574..c114298 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableAggregate.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableAggregate.java
@@ -18,14 +18,11 @@
 package org.apache.hadoop.hbase.regionserver;
 
 import java.io.IOException;
-
-import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.CompatibilityFactory;
+import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
 import org.apache.hadoop.hbase.test.MetricsAssertHelper;
 import org.apache.hadoop.hbase.testclassification.RegionServerTests;
 import org.apache.hadoop.hbase.testclassification.SmallTests;
-import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
@@ -35,103 +32,21 @@ public class TestMetricsTableAggregate {
   public static MetricsAssertHelper HELPER =
       CompatibilityFactory.getInstance(MetricsAssertHelper.class);
 
-  private String tableName = "testTableMetrics";
-  private String pre = "Namespace_default_table_" + tableName + "_metric_";
-
-  private MetricsTableWrapperStub tableWrapper;
-  private MetricsTable mt;
-  private MetricsRegionServerWrapper rsWrapper;
-  private MetricsRegionServer rsm;
-  private MetricsTableAggregateSource agg;
-
-  @BeforeClass
-  public static void classSetUp() {
-    HELPER.init();
-  }
-
-  @Before
-  public void setUp() {
-    tableWrapper = new MetricsTableWrapperStub(tableName);
-    mt = new MetricsTable(tableWrapper);
-    rsWrapper = new MetricsRegionServerWrapperStub();
-    Configuration conf = new Configuration();
-    rsm = new MetricsRegionServer(rsWrapper, conf, mt);
-    agg = mt.getTableSourceAgg();
-  }
-
-  @Test
-  public void testRequestMetrics() throws IOException {
-    HELPER.assertCounter(pre + "readRequestCount", 10, agg);
-    HELPER.assertCounter(pre + "writeRequestCount", 20, agg);
-    HELPER.assertCounter(pre + "totalRequestCount", 30, agg);
-  }
-
-  @Test
-  public void testRegionAndStoreMetrics() throws IOException {
-    HELPER.assertGauge(pre + "memstoreSize", 1000, agg);
-    HELPER.assertGauge(pre + "storeFileSize", 2000, agg);
-    HELPER.assertGauge(pre + "tableSize", 3000, agg);
-
-    HELPER.assertGauge(pre + "regionCount", 11, agg);
-    HELPER.assertGauge(pre + "storeCount", 22, agg);
-    HELPER.assertGauge(pre + "storeFileCount", 33, agg);
-    HELPER.assertGauge(pre + "maxStoreFileAge", 44, agg);
-    HELPER.assertGauge(pre + "minStoreFileAge", 55, agg);
-    HELPER.assertGauge(pre + "avgStoreFileAge", 66, agg);
-    HELPER.assertGauge(pre + "numReferenceFiles", 77, agg);
-    HELPER.assertGauge(pre + "averageRegionSize", 88, agg);
-  }
-
   @Test
-  public void testFlush() {
-    rsm.updateFlush(tableName, 1, 2, 3);
-    HELPER.assertCounter(pre + "flushTime_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "flushMemstoreSize_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "flushOutputSize_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "flushedMemstoreBytes", 2, agg);
-    HELPER.assertCounter(pre + "flushedOutputBytes", 3, agg);
-
-    rsm.updateFlush(tableName, 10, 20, 30);
-    HELPER.assertCounter(pre + "flushTime_num_ops", 2, agg);
-    HELPER.assertCounter(pre + "flushMemstoreSize_num_ops", 2, agg);
-    HELPER.assertCounter(pre + "flushOutputSize_num_ops", 2, agg);
-    HELPER.assertCounter(pre + "flushedMemstoreBytes", 22, agg);
-    HELPER.assertCounter(pre + "flushedOutputBytes", 33, agg);
-  }
-
-  @Test
-  public void testCompaction() {
-    rsm.updateCompaction(tableName, false, 1, 2, 3, 4, 5);
-    HELPER.assertCounter(pre + "compactionTime_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "compactionInputFileCount_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "compactionInputSize_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "compactionOutputFileCount_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "compactedInputBytes", 4, agg);
-    HELPER.assertCounter(pre + "compactedoutputBytes", 5, agg);
-
-    rsm.updateCompaction(tableName, false, 10, 20, 30, 40, 50);
-    HELPER.assertCounter(pre + "compactionTime_num_ops", 2, agg);
-    HELPER.assertCounter(pre + "compactionInputFileCount_num_ops", 2, agg);
-    HELPER.assertCounter(pre + "compactionInputSize_num_ops", 2, agg);
-    HELPER.assertCounter(pre + "compactionOutputFileCount_num_ops", 2, agg);
-    HELPER.assertCounter(pre + "compactedInputBytes", 44, agg);
-    HELPER.assertCounter(pre + "compactedoutputBytes", 55, agg);
-
-    // do major compaction
-    rsm.updateCompaction(tableName, true, 100, 200, 300, 400, 500);
-
-    HELPER.assertCounter(pre + "compactionTime_num_ops", 3, agg);
-    HELPER.assertCounter(pre + "compactionInputFileCount_num_ops", 3, agg);
-    HELPER.assertCounter(pre + "compactionInputSize_num_ops", 3, agg);
-    HELPER.assertCounter(pre + "compactionOutputFileCount_num_ops", 3, agg);
-    HELPER.assertCounter(pre + "compactedInputBytes", 444, agg);
-    HELPER.assertCounter(pre + "compactedoutputBytes", 555, agg);
-
-    HELPER.assertCounter(pre + "majorCompactionTime_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "majorCompactionInputFileCount_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "majorCompactionInputSize_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "majorCompactionOutputFileCount_num_ops", 1, agg);
-    HELPER.assertCounter(pre + "majorCompactedInputBytes", 400, agg);
-    HELPER.assertCounter(pre + "majorCompactedoutputBytes", 500, agg);
+  public void testTableWrapperAggregateMetrics() throws IOException {
+    String tableName = "testTableMetrics";
+    MetricsTableWrapperStub tableWrapper = new MetricsTableWrapperStub(tableName);
+    CompatibilitySingletonFactory.getInstance(MetricsRegionServerSourceFactory.class)
+    .createTable(tableName, tableWrapper);
+    MetricsTableAggregateSource agg = CompatibilitySingletonFactory
+        .getInstance(MetricsRegionServerSourceFactory.class).getTableAggregate();
+
+    HELPER.assertCounter("Namespace_default_table_testTableMetrics_metric_readRequestCount", 10, agg);
+    HELPER.assertCounter("Namespace_default_table_testTableMetrics_metric_writeRequestCount", 20, agg);
+    HELPER.assertCounter("Namespace_default_table_testTableMetrics_metric_totalRequestCount", 30, agg);
+
+    HELPER.assertGauge("Namespace_default_table_testTableMetrics_metric_memstoreSize", 1000, agg);
+    HELPER.assertGauge("Namespace_default_table_testTableMetrics_metric_storeFileSize", 2000, agg);
+    HELPER.assertGauge("Namespace_default_table_testTableMetrics_metric_tableSize", 3000, agg);
   }
 }
\ No newline at end of file