You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2012/04/18 01:01:31 UTC

svn commit: r1327316 - in /hbase/trunk/src: main/java/org/apache/hadoop/hbase/regionserver/ main/java/org/apache/hadoop/hbase/regionserver/metrics/ test/java/org/apache/hadoop/hbase/regionserver/

Author: stack
Date: Tue Apr 17 23:01:30 2012
New Revision: 1327316

URL: http://svn.apache.org/viewvc?rev=1327316&view=rev
Log:
HBASE-5788 Move Dynamic Metrics storage off of HRegion

Added:
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionMetricsStorage.java
Modified:
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/SchemaMetrics.java
    hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=1327316&r1=1327315&r2=1327316&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java Tue Apr 17 23:01:30 2012
@@ -109,6 +109,7 @@ import org.apache.hadoop.hbase.ipc.HBase
 import org.apache.hadoop.hbase.monitoring.MonitoredTask;
 import org.apache.hadoop.hbase.monitoring.TaskMonitor;
 import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;
+import org.apache.hadoop.hbase.regionserver.metrics.RegionMetricsStorage;
 import org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics;
 import org.apache.hadoop.hbase.regionserver.wal.HLog;
 import org.apache.hadoop.hbase.regionserver.wal.HLogKey;
@@ -336,86 +337,6 @@ public class HRegion implements HeapSize
   private HTableDescriptor htableDescriptor = null;
   private RegionSplitPolicy splitPolicy;
 
-  // for simple numeric metrics (# of blocks read from block cache)
-  public static final ConcurrentMap<String, AtomicLong> numericMetrics = new ConcurrentHashMap<String, AtomicLong>();
-
-  public static final String METRIC_GETSIZE = "getsize";
-  public static final String METRIC_NEXTSIZE = "nextsize";
-
-  // for simple numeric metrics (current block cache size)
-  // These ones are not reset to zero when queried, unlike the previous.
-  public static final ConcurrentMap<String, AtomicLong> numericPersistentMetrics = new ConcurrentHashMap<String, AtomicLong>();
-
-  /**
-   * Used for metrics where we want track a metrics (such as latency) over a
-   * number of operations.
-   */
-  public static final ConcurrentMap<String, Pair<AtomicLong, AtomicInteger>>
-      timeVaryingMetrics = new ConcurrentHashMap<String,
-          Pair<AtomicLong, AtomicInteger>>();
-
-  public static void incrNumericMetric(String key, long amount) {
-    AtomicLong oldVal = numericMetrics.get(key);
-    if (oldVal == null) {
-      oldVal = numericMetrics.putIfAbsent(key, new AtomicLong(amount));
-      if (oldVal == null)
-        return;
-    }
-    oldVal.addAndGet(amount);
-  }
-
-  public static void setNumericMetric(String key, long amount) {
-    numericMetrics.put(key, new AtomicLong(amount));
-  }
-
-  public static void incrTimeVaryingMetric(String key, long amount) {
-    Pair<AtomicLong, AtomicInteger> oldVal = timeVaryingMetrics.get(key);
-    if (oldVal == null) {
-      oldVal = timeVaryingMetrics.putIfAbsent(key,
-          new Pair<AtomicLong, AtomicInteger>(new AtomicLong(amount),
-              new AtomicInteger(1)));
-      if (oldVal == null)
-        return;
-    }
-    oldVal.getFirst().addAndGet(amount); // total time
-    oldVal.getSecond().incrementAndGet(); // increment ops by 1
-  }
-
-  public static void incrNumericPersistentMetric(String key, long amount) {
-    AtomicLong oldVal = numericPersistentMetrics.get(key);
-    if (oldVal == null) {
-      oldVal = numericPersistentMetrics
-          .putIfAbsent(key, new AtomicLong(amount));
-      if (oldVal == null)
-        return;
-    }
-    oldVal.addAndGet(amount);
-  }
-
-  public static long getNumericMetric(String key) {
-    AtomicLong m = numericMetrics.get(key);
-    if (m == null)
-      return 0;
-    return m.get();
-  }
-
-  public static Pair<Long, Integer> getTimeVaryingMetric(String key) {
-    Pair<AtomicLong, AtomicInteger> pair = timeVaryingMetrics.get(key);
-    if (pair == null) {
-      return new Pair<Long, Integer>(0L, 0);
-    }
-
-    return new Pair<Long, Integer>(pair.getFirst().get(),
-        pair.getSecond().get());
-  }
-
-  static long getNumericPersistentMetric(String key) {
-    AtomicLong m = numericPersistentMetrics.get(key);
-    if (m == null)
-      return 0;
-    return m.get();
-  }
-
   /**
    * Should only be used for testing purposes
    */
@@ -1890,7 +1811,7 @@ public class HRegion implements HeapSize
     final String metricPrefix = SchemaMetrics.generateSchemaMetricsPrefix(
         getTableDesc().getNameAsString(), familyMap.keySet());
     if (!metricPrefix.isEmpty()) {
-      HRegion.incrTimeVaryingMetric(metricPrefix + "delete_", after - now);
+      RegionMetricsStorage.incrTimeVaryingMetric(metricPrefix + "delete_", after - now);
     }
 
     if (flush) {
@@ -2281,7 +2202,7 @@ public class HRegion implements HeapSize
       if (metricPrefix == null) {
         metricPrefix = SchemaMetrics.CF_BAD_FAMILY_PREFIX;
       }
-      HRegion.incrTimeVaryingMetric(metricPrefix + "multiput_",
+      RegionMetricsStorage.incrTimeVaryingMetric(metricPrefix + "multiput_",
           endTimeMs - startTimeMs);
 
       if (!success) {
@@ -2540,7 +2461,7 @@ public class HRegion implements HeapSize
     final String metricPrefix = SchemaMetrics.generateSchemaMetricsPrefix(
         this.getTableDesc().getNameAsString(), familyMap.keySet());
     if (!metricPrefix.isEmpty()) {
-      HRegion.incrTimeVaryingMetric(metricPrefix + "put_", after - now);
+      RegionMetricsStorage.incrTimeVaryingMetric(metricPrefix + "put_", after - now);
     }
 
     if (flush) {
@@ -4155,7 +4076,7 @@ public class HRegion implements HeapSize
     RegionScanner scanner = null;
     try {
       scanner = getScanner(scan);
-      scanner.next(results, HRegion.METRIC_GETSIZE);
+      scanner.next(results, SchemaMetrics.METRIC_GETSIZE);
     } finally {
       if (scanner != null)
         scanner.close();
@@ -4171,7 +4092,7 @@ public class HRegion implements HeapSize
     final String metricPrefix = SchemaMetrics.generateSchemaMetricsPrefix(
         this.getTableDesc().getNameAsString(), get.familySet());
     if (!metricPrefix.isEmpty()) {
-      HRegion.incrTimeVaryingMetric(metricPrefix + "get_", after - now);
+      RegionMetricsStorage.incrTimeVaryingMetric(metricPrefix + "get_", after - now);
     }
 
     return results;
@@ -4245,14 +4166,14 @@ public class HRegion implements HeapSize
         processor.postProcess(this, walEdit);
       } catch (IOException e) {
         long endNanoTime = System.nanoTime();
-        HRegion.incrTimeVaryingMetric(metricsName + ".error.nano",
+        RegionMetricsStorage.incrTimeVaryingMetric(metricsName + ".error.nano",
                                       endNanoTime - startNanoTime);
         throw e;
       } finally {
         closeRegionOperation();
       }
       final long endNanoTime = System.nanoTime();
-      HRegion.incrTimeVaryingMetric(metricsName + ".nano",
+      RegionMetricsStorage.incrTimeVaryingMetric(metricsName + ".nano",
                                     endNanoTime - startNanoTime);
       return;
     }
@@ -4362,7 +4283,7 @@ public class HRegion implements HeapSize
 
     } catch (IOException e) {
       long endNanoTime = System.nanoTime();
-      HRegion.incrTimeVaryingMetric(metricsName + ".error.nano",
+      RegionMetricsStorage.incrTimeVaryingMetric(metricsName + ".error.nano",
                                     endNanoTime - startNanoTime);
       throw e;
     } finally {
@@ -4374,19 +4295,19 @@ public class HRegion implements HeapSize
     }
     // Populate all metrics
     long endNanoTime = System.nanoTime();
-    HRegion.incrTimeVaryingMetric(metricsName + ".nano",
+    RegionMetricsStorage.incrTimeVaryingMetric(metricsName + ".nano",
                                   endNanoTime - startNanoTime);
 
-    HRegion.incrTimeVaryingMetric(metricsName + ".acquirelock.nano",
+    RegionMetricsStorage.incrTimeVaryingMetric(metricsName + ".acquirelock.nano",
                                   lockedNanoTime - startNanoTime);
 
-    HRegion.incrTimeVaryingMetric(metricsName + ".process.nano",
+    RegionMetricsStorage.incrTimeVaryingMetric(metricsName + ".process.nano",
                                   processDoneNanoTime - lockedNanoTime);
 
-    HRegion.incrTimeVaryingMetric(metricsName + ".occupylock.nano",
+    RegionMetricsStorage.incrTimeVaryingMetric(metricsName + ".occupylock.nano",
                                   unlockedNanoTime - lockedNanoTime);
 
-    HRegion.incrTimeVaryingMetric(metricsName + ".sync.nano",
+    RegionMetricsStorage.incrTimeVaryingMetric(metricsName + ".sync.nano",
                                   endNanoTime - unlockedNanoTime);
   }
 
@@ -4783,7 +4704,7 @@ public class HRegion implements HeapSize
     long after = EnvironmentEdgeManager.currentTimeMillis();
     String metricPrefix = SchemaMetrics.generateSchemaMetricsPrefix(
         getTableDesc().getName(), family);
-    HRegion.incrTimeVaryingMetric(metricPrefix + "increment_", after - before);
+    RegionMetricsStorage.incrTimeVaryingMetric(metricPrefix + "increment_", after - before);
 
     if (flush) {
       // Request a cache flush.  Do it outside update lock.

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1327316&r1=1327315&r2=1327316&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Tue Apr 17 23:01:30 2012
@@ -125,6 +125,7 @@ import org.apache.hadoop.hbase.regionser
 import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;
 import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;
 import org.apache.hadoop.hbase.regionserver.handler.OpenRootHandler;
+import org.apache.hadoop.hbase.regionserver.metrics.RegionMetricsStorage;
 import org.apache.hadoop.hbase.regionserver.metrics.RegionServerDynamicMetrics;
 import org.apache.hadoop.hbase.regionserver.metrics.RegionServerMetrics;
 import org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics;
@@ -1256,7 +1257,7 @@ public class HRegionServer extends Regio
     }
 
     for (Entry<String, MutableDouble> e : tempVals.entrySet()) {
-      HRegion.setNumericMetric(e.getKey(), e.getValue().longValue());
+      RegionMetricsStorage.setNumericMetric(e.getKey(), e.getValue().longValue());
     }
 
     this.metrics.stores.set(stores);
@@ -2245,7 +2246,7 @@ public class HRegionServer extends Regio
           && currentScanResultSize < maxScannerResultSize; i++) {
         requestCount.incrementAndGet();
         // Collect values to be returned here
-        boolean moreRows = s.next(values, HRegion.METRIC_NEXTSIZE);
+        boolean moreRows = s.next(values, SchemaMetrics.METRIC_NEXTSIZE);
         if (!values.isEmpty()) {
           for (KeyValue kv : values) {
             currentScanResultSize += kv.heapSize();

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java?rev=1327316&r1=1327315&r2=1327316&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServer.java Tue Apr 17 23:01:30 2012
@@ -82,6 +82,7 @@ import org.apache.hadoop.hbase.protobuf.
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
 import org.apache.hadoop.hbase.regionserver.HRegionServer.QosPriority;
 import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;
+import org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.FSUtils;
 import org.apache.hadoop.hbase.util.Pair;
@@ -681,7 +682,7 @@ public abstract class RegionServer imple
               for (int i = 0; i < rows
                   && currentScanResultSize < maxScannerResultSize; i++) {
                 // Collect values to be returned here
-                boolean moreRows = scanner.next(values, HRegion.METRIC_NEXTSIZE);
+                boolean moreRows = scanner.next(values, SchemaMetrics.METRIC_NEXTSIZE);
                 if (!values.isEmpty()) {
                   for (KeyValue kv : values) {
                     currentScanResultSize += kv.heapSize();

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java?rev=1327316&r1=1327315&r2=1327316&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java Tue Apr 17 23:01:30 2012
@@ -33,6 +33,7 @@ import org.apache.hadoop.hbase.HConstant
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.filter.Filter;
+import org.apache.hadoop.hbase.regionserver.metrics.RegionMetricsStorage;
 import org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
@@ -373,7 +374,7 @@ class StoreScanner extends NonLazyKeyVal
           results.add(kv);
 
           if (metric != null) {
-            HRegion.incrNumericMetric(this.metricNamePrefix + metric,
+            RegionMetricsStorage.incrNumericMetric(this.metricNamePrefix + metric,
                 kv.getLength());
           }
 

Added: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionMetricsStorage.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionMetricsStorage.java?rev=1327316&view=auto
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionMetricsStorage.java (added)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionMetricsStorage.java Tue Apr 17 23:01:30 2012
@@ -0,0 +1,130 @@
+/*
+ * Copyright The Apache Software Foundation
+ *
+ * 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.metrics;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.util.Pair;
+
+/**
+ * This class if for maintaining the maps used to power metrics for hfiles,
+ * regions, and regionservers. It has methods to mutate and get state of metrics
+ * numbers. These numbers are exposed to Hadoop metrics through
+ * RegionServerDynamicMetrics.
+ */
+@InterfaceAudience.Private
+public class RegionMetricsStorage {
+
+  // for simple numeric metrics (# of blocks read from block cache)
+  private static final ConcurrentMap<String, AtomicLong> numericMetrics =
+      new ConcurrentHashMap<String, AtomicLong>();
+
+  // for simple numeric metrics (current block cache size)
+  // These ones are not reset to zero when queried, unlike the previous.
+  private static final ConcurrentMap<String, AtomicLong> numericPersistentMetrics =
+      new ConcurrentHashMap<String, AtomicLong>();
+
+  /**
+   * Used for metrics where we want track a metrics (such as latency) over a
+   * number of operations.
+   */
+  private static final ConcurrentMap<String, Pair<AtomicLong, AtomicInteger>> timeVaryingMetrics =
+      new ConcurrentHashMap<String, Pair<AtomicLong, AtomicInteger>>();
+
+  public static Map<String, AtomicLong> getNumericMetrics() {
+    return numericMetrics;
+  }
+
+  public static Map<String, AtomicLong> getNumericPersistentMetrics() {
+    return numericPersistentMetrics;
+  }
+
+  public static Map<String, Pair<AtomicLong, AtomicInteger>> getTimeVaryingMetrics() {
+    return timeVaryingMetrics;
+  }
+
+  public static void incrNumericMetric(String key, long amount) {
+    AtomicLong oldVal = numericMetrics.get(key);
+    if (oldVal == null) {
+      oldVal = numericMetrics.putIfAbsent(key, new AtomicLong(amount));
+      if (oldVal == null)
+        return;
+    }
+    oldVal.addAndGet(amount);
+  }
+
+  public static void incrTimeVaryingMetric(String key, long amount) {
+    Pair<AtomicLong, AtomicInteger> oldVal = timeVaryingMetrics.get(key);
+    if (oldVal == null) {
+      oldVal =
+          timeVaryingMetrics.putIfAbsent(key, 
+              new Pair<AtomicLong, AtomicInteger>(
+                  new AtomicLong(amount), 
+                  new AtomicInteger(1)));
+      if (oldVal == null)
+        return;
+    }
+    oldVal.getFirst().addAndGet(amount); // total time
+    oldVal.getSecond().incrementAndGet(); // increment ops by 1
+  }
+
+  public static void incrNumericPersistentMetric(String key, long amount) {
+    AtomicLong oldVal = numericPersistentMetrics.get(key);
+    if (oldVal == null) {
+      oldVal = numericPersistentMetrics.putIfAbsent(key, new AtomicLong(amount));
+      if (oldVal == null)
+        return;
+    }
+    oldVal.addAndGet(amount);
+  }
+
+  public static void setNumericMetric(String key, long amount) {
+    numericMetrics.put(key, new AtomicLong(amount));
+  }
+
+  public static long getNumericMetric(String key) {
+    AtomicLong m = numericMetrics.get(key);
+    if (m == null)
+      return 0;
+    return m.get();
+  }
+
+  public static Pair<Long, Integer> getTimeVaryingMetric(String key) {
+    Pair<AtomicLong, AtomicInteger> pair = timeVaryingMetrics.get(key);
+    if (pair == null) {
+      return new Pair<Long, Integer>(0L, 0);
+    }
+
+    return new Pair<Long, Integer>(pair.getFirst().get(), pair.getSecond().get());
+  }
+
+  public static long getNumericPersistentMetric(String key) {
+    AtomicLong m = numericPersistentMetrics.get(key);
+    if (m == null)
+      return 0;
+    return m.get();
+  }
+
+}

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java?rev=1327316&r1=1327315&r2=1327316&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java Tue Apr 17 23:01:30 2012
@@ -133,17 +133,17 @@ public class RegionServerDynamicMetrics 
    */
   public void doUpdates(MetricsContext context) {
     /* get dynamically created numeric metrics, and push the metrics */
-    for (Entry<String, AtomicLong> entry : HRegion.numericMetrics.entrySet()) {
+    for (Entry<String, AtomicLong> entry : RegionMetricsStorage.getNumericMetrics().entrySet()) {
       this.setNumericMetric(entry.getKey(), entry.getValue().getAndSet(0));
     }
     /* get dynamically created numeric metrics, and push the metrics.
      * These ones aren't to be reset; they are cumulative. */
-    for (Entry<String, AtomicLong> entry : HRegion.numericPersistentMetrics.entrySet()) {
+    for (Entry<String, AtomicLong> entry : RegionMetricsStorage.getNumericPersistentMetrics().entrySet()) {
       this.setNumericMetric(entry.getKey(), entry.getValue().get());
     }
     /* get dynamically created time varying metrics, and push the metrics */
     for (Entry<String, Pair<AtomicLong, AtomicInteger>> entry :
-          HRegion.timeVaryingMetrics.entrySet()) {
+      RegionMetricsStorage.getTimeVaryingMetrics().entrySet()) {
       Pair<AtomicLong, AtomicInteger> value = entry.getValue();
       this.incrTimeVaryingMetric(entry.getKey(),
           value.getFirst().getAndSet(0),

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/SchemaMetrics.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/SchemaMetrics.java?rev=1327316&r1=1327315&r2=1327316&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/SchemaMetrics.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/SchemaMetrics.java Tue Apr 17 23:01:30 2012
@@ -29,6 +29,9 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -39,12 +42,11 @@ import org.apache.hadoop.classification.
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;
-import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Pair;
 
 /**
- * A collection of metric names in a given column family or a (table, column
+ * A names in a given column family or a (table, column
  * family) combination. The following "dimensions" are supported:
  * <ul>
  * <li>Table name (optional; enabled based on configuration)</li>
@@ -303,6 +305,11 @@ public class SchemaMetrics {
     }
   }
 
+  
+
+    public static final String METRIC_GETSIZE = "getsize";
+    public static final String METRIC_NEXTSIZE = "nextsize";
+
   /**
    * Returns a {@link SchemaMetrics} object for the given table and column
    * family, instantiating it if necessary.
@@ -366,7 +373,7 @@ public class SchemaMetrics {
     if (blockCategory == null) {
       blockCategory = BlockCategory.UNKNOWN;  // So that we see this in stats.
     }
-    HRegion.incrNumericMetric(getBlockMetricName(blockCategory,
+    RegionMetricsStorage.incrNumericMetric(getBlockMetricName(blockCategory,
         isCompaction, metricType), 1);
 
     if (blockCategory != BlockCategory.ALL_CATEGORIES) {
@@ -377,7 +384,7 @@ public class SchemaMetrics {
 
   private void addToReadTime(BlockCategory blockCategory,
       boolean isCompaction, long timeMs) {
-    HRegion.incrTimeVaryingMetric(getBlockMetricName(blockCategory,
+    RegionMetricsStorage.incrTimeVaryingMetric(getBlockMetricName(blockCategory,
         isCompaction, BlockMetricType.READ_TIME), timeMs);
 
     // Also update the read time aggregated across all block categories
@@ -433,7 +440,7 @@ public class SchemaMetrics {
    */
   public void updatePersistentStoreMetric(StoreMetricType storeMetricType,
       long value) {
-    HRegion.incrNumericPersistentMetric(
+    RegionMetricsStorage.incrNumericPersistentMetric(
         storeMetricNames[storeMetricType.ordinal()], value);
   }
 
@@ -478,7 +485,7 @@ public class SchemaMetrics {
     if (category == null) {
       category = BlockCategory.ALL_CATEGORIES;
     }
-    HRegion.incrNumericPersistentMetric(getBlockMetricName(category, false,
+    RegionMetricsStorage.incrNumericPersistentMetric(getBlockMetricName(category, false,
         BlockMetricType.CACHE_SIZE), cacheSizeDelta);
 
     if (category != BlockCategory.ALL_CATEGORIES) {
@@ -502,7 +509,7 @@ public class SchemaMetrics {
    * positives/negatives as specified by the argument.
    */
   public void updateBloomMetrics(boolean isInBloom) {
-    HRegion.incrNumericMetric(getBloomMetricName(isInBloom), 1);
+    RegionMetricsStorage.incrNumericMetric(getBloomMetricName(isInBloom), 1);
     if (this != ALL_SCHEMA_METRICS) {
       ALL_SCHEMA_METRICS.updateBloomMetrics(isInBloom);
     }
@@ -731,11 +738,11 @@ public class SchemaMetrics {
         long metricValue;
         if (isTimeVaryingKey(metricName)) {
           Pair<Long, Integer> totalAndCount =
-              HRegion.getTimeVaryingMetric(stripTimeVaryingSuffix(metricName));
+              RegionMetricsStorage.getTimeVaryingMetric(stripTimeVaryingSuffix(metricName));
           metricValue = metricName.endsWith(TOTAL_SUFFIX) ?
               totalAndCount.getFirst() : totalAndCount.getSecond();
         } else {
-          metricValue = HRegion.getNumericMetric(metricName);
+          metricValue = RegionMetricsStorage.getNumericMetric(metricName);
         }
 
         metricsSnapshot.put(metricName, metricValue);

Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java?rev=1327316&r1=1327315&r2=1327316&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java Tue Apr 17 23:01:30 2012
@@ -34,6 +34,7 @@ import org.apache.hadoop.hbase.client.HB
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.regionserver.metrics.RegionMetricsStorage;
 import org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics;
 import org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics.
     StoreMetricType;
@@ -90,7 +91,7 @@ public class TestRegionServerMetrics {
     Long startValue = startingMetrics.get(storeMetricName);
     assertEquals("Invalid value for store metric " + storeMetricName
         + " (type " + storeMetricType + ")", expected,
-        HRegion.getNumericMetric(storeMetricName)
+        RegionMetricsStorage.getNumericMetric(storeMetricName)
             - (startValue != null ? startValue : 0));
   }
 
@@ -130,7 +131,7 @@ public class TestRegionServerMetrics {
     final String storeMetricName = ALL_METRICS
         .getStoreMetricNameMax(StoreMetricType.STORE_FILE_COUNT);
     assertEquals("Invalid value for store metric " + storeMetricName,
-        NUM_FLUSHES, HRegion.getNumericMetric(storeMetricName));
+        NUM_FLUSHES, RegionMetricsStorage.getNumericMetric(storeMetricName));
   }
 
 
@@ -144,14 +145,14 @@ public class TestRegionServerMetrics {
 
     for (int i =0; i < cfs.length; ++i) {
       String prefix = SchemaMetrics.generateSchemaMetricsPrefix(table, cfs[i]);
-      String getMetric = prefix + HRegion.METRIC_GETSIZE;
-      String nextMetric = prefix + HRegion.METRIC_NEXTSIZE;
+      String getMetric = prefix + SchemaMetrics.METRIC_GETSIZE;
+      String nextMetric = prefix + SchemaMetrics.METRIC_NEXTSIZE;
 
       // verify getsize and nextsize matches
-      int getSize = HRegion.numericMetrics.containsKey(getMetric) ?
-          HRegion.numericMetrics.get(getMetric).intValue() : 0;
-      int nextSize = HRegion.numericMetrics.containsKey(nextMetric) ?
-          HRegion.numericMetrics.get(nextMetric).intValue() : 0;
+      int getSize = RegionMetricsStorage.getNumericMetrics().containsKey(getMetric) ?
+          RegionMetricsStorage.getNumericMetrics().get(getMetric).intValue() : 0;
+      int nextSize = RegionMetricsStorage.getNumericMetrics().containsKey(nextMetric) ?
+          RegionMetricsStorage.getNumericMetrics().get(nextMetric).intValue() : 0;
 
       assertEquals(metrics[i], getSize);
       assertEquals(metrics[cfs.length + i], nextSize);