You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ns...@apache.org on 2011/10/11 04:20:28 UTC

svn commit: r1181561 - /hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java

Author: nspiegelberg
Date: Tue Oct 11 02:20:28 2011
New Revision: 1181561

URL: http://svn.apache.org/viewvc?rev=1181561&view=rev
Log:
Fix RegionServerDynamicMetrics to push NumOps metrics for every interval

Summary:
RegionServerDynamicMetrics uses the MBean
RegionServerDynamicStatistics to push out metrics. This MBean did not
have the functionality of dynamically updating the metrics list it uses.

Test Plan:
Verify metrics in dev cluster

Reviewed By: kannan
Reviewers: kannan, nspiegelberg, dhruba, hkuang, dms
Commenters: nspiegelberg, dhruba
CC: lshepard, mattwkelly, brent, pritam, kannan, ,
hbase@lists, nspiegelberg, dhruba
Revert Plan:
Tags:

- begin *PUBLIC* platform impact section -
Bugzilla: #
- end platform impact -

Differential Revision: 255866

Modified:
    hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java

Modified: hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java?rev=1181561&r1=1181560&r2=1181561&view=diff
==============================================================================
--- hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java (original)
+++ hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerDynamicMetrics.java Tue Oct 11 02:20:28 2011
@@ -20,10 +20,13 @@
 
 package org.apache.hadoop.hbase.regionserver.metrics;
 
+import java.lang.reflect.Method;
 import java.util.Map.Entry;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.hadoop.metrics.MetricsContext;
@@ -51,6 +54,9 @@ public class RegionServerDynamicMetrics 
   private MetricsRecord metricsRecord;
   private MetricsContext context;
   private final RegionServerDynamicStatistics rsDynamicStatistics;
+  private Method updateMbeanInfoIfMetricsListChanged = null;
+  private static final Log LOG =
+    LogFactory.getLog(RegionServerDynamicStatistics.class);
 
   /**
    * The metrics variables are public:
@@ -65,6 +71,15 @@ public class RegionServerDynamicMetrics 
                             this.context,
                             "RegionServerDynamicStatistics");
     this.rsDynamicStatistics = new RegionServerDynamicStatistics(this.registry);
+    try {
+      updateMbeanInfoIfMetricsListChanged =
+        this.rsDynamicStatistics.getClass().getSuperclass()
+        .getDeclaredMethod("updateMbeanInfoIfMetricsListChanged",
+            new Class[]{});
+      updateMbeanInfoIfMetricsListChanged.setAccessible(true);
+    } catch (Exception e) {
+      LOG.error(e);
+    }
   }
 
   public static RegionServerDynamicMetrics newInstance() {
@@ -78,6 +93,14 @@ public class RegionServerDynamicMetrics 
     MetricsLongValue m = (MetricsLongValue)registry.get(name);
     if (m == null) {
       m = new MetricsLongValue(name, this.registry);
+      try {
+        if (updateMbeanInfoIfMetricsListChanged != null) {
+          updateMbeanInfoIfMetricsListChanged.invoke(this.rsDynamicStatistics,
+              new Object[]{});
+        }
+      } catch (Exception e) {
+        LOG.error(e);
+      }
     }
     m.set(amt);
   }
@@ -89,6 +112,14 @@ public class RegionServerDynamicMetrics 
     MetricsTimeVaryingRate m = (MetricsTimeVaryingRate)registry.get(name);
     if (m == null) {
       m = new MetricsTimeVaryingRate(name, this.registry);
+      try {
+        if (updateMbeanInfoIfMetricsListChanged != null) {
+          updateMbeanInfoIfMetricsListChanged.invoke(this.rsDynamicStatistics,
+              new Object[]{});
+        }
+      } catch (Exception e) {
+        LOG.error(e);
+      }
     }
     if (numOps > 0) {
       m.inc(numOps, amt);