You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jd...@apache.org on 2010/01/17 01:31:13 UTC
svn commit: r900039 - in /hadoop/hbase/trunk: CHANGES.txt
src/java/org/apache/hadoop/hbase/metrics/MetricsMBeanBase.java
src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java
Author: jdcryans
Date: Sun Jan 17 00:31:13 2010
New Revision: 900039
URL: http://svn.apache.org/viewvc?rev=900039&view=rev
Log:
HBASE-2138 unknown metrics type (Stack via JD)
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/metrics/MetricsMBeanBase.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=900039&r1=900038&r2=900039&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Sun Jan 17 00:31:13 2010
@@ -170,6 +170,7 @@
HBASE-2126 Fix build break - ec2 (Kay Kay via JD)
HBASE-2134 Ivy nit regarding checking with latest snapshots (Kay Kay via
Andrew Purtell)
+ HBASE-2138 unknown metrics type (Stack via JD)
IMPROVEMENTS
HBASE-1760 Cleanup TODOs in HTable
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/metrics/MetricsMBeanBase.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/metrics/MetricsMBeanBase.java?rev=900039&r1=900038&r2=900039&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/metrics/MetricsMBeanBase.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/metrics/MetricsMBeanBase.java Sun Jan 17 00:31:13 2010
@@ -20,7 +20,6 @@
package org.apache.hadoop.hbase.metrics;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -59,12 +58,27 @@
protected MBeanInfo extendedInfo;
protected MetricsMBeanBase( MetricsRegistry mr, String description ) {
- super(mr, description);
+ super(copyMinusHBaseMetrics(mr), description);
this.registry = mr;
this.description = description;
this.init();
}
+ /*
+ * @param mr MetricsRegistry.
+ * @return A copy of the passed MetricsRegistry minus the hbase metrics
+ */
+ private static MetricsRegistry copyMinusHBaseMetrics(final MetricsRegistry mr) {
+ MetricsRegistry copy = new MetricsRegistry();
+ for (MetricsBase metric : mr.getMetricsList()) {
+ if (metric instanceof org.apache.hadoop.hbase.metrics.MetricsRate) {
+ continue;
+ }
+ copy.add(metric.getName(), metric);
+ }
+ return copy;
+ }
+
protected void init() {
List<MBeanAttributeInfo> attributes = new ArrayList<MBeanAttributeInfo>();
MBeanInfo parentInfo = super.getMBeanInfo();
@@ -81,13 +95,12 @@
continue;
// add on custom HBase metric types
- if (metric instanceof MetricsRate) {
+ if (metric instanceof org.apache.hadoop.hbase.metrics.MetricsRate) {
attributes.add( new MBeanAttributeInfo(metric.getName(),
"java.lang.Float", metric.getDescription(), true, false, false) );
extendedAttributes.put(metric.getName(), metric);
- } else {
- LOG.error("unknown metrics instance: "+metric.getClass().getName());
- }
+ }
+ // else, its probably a hadoop metric already registered. Skip it.
}
this.extendedInfo = new MBeanInfo( this.getClass().getName(),
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java?rev=900039&r1=900038&r2=900039&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/metrics/RegionServerMetrics.java Sun Jan 17 00:31:13 2010
@@ -169,13 +169,26 @@
this.blockCacheFree.pushMetric(this.metricsRecord);
this.blockCacheCount.pushMetric(this.metricsRecord);
this.blockCacheHitRatio.pushMetric(this.metricsRecord);
-
- // mix in HFile metrics
- this.fsReadLatency.inc((int)HFile.getReadOps(), HFile.getReadTime());
- this.fsWriteLatency.inc((int)HFile.getWriteOps(), HFile.getWriteTime());
+
+ // Mix in HFile and HLog metrics
+ // Be careful. Here is code for MTVR from up in hadoop:
+ // public synchronized void inc(final int numOps, final long time) {
+ // currentData.numOperations += numOps;
+ // currentData.time += time;
+ // long timePerOps = time/numOps;
+ // minMax.update(timePerOps);
+ // }
+ // Means you can't pass a numOps of zero or get a ArithmeticException / by zero.
+ int ops = (int)HFile.getReadOps();
+ if (ops != 0) this.fsReadLatency.inc(ops, HFile.getReadTime());
+ ops = (int)HFile.getWriteOps();
+ if (ops != 0) this.fsWriteLatency.inc(ops, HFile.getWriteTime());
// mix in HLog metrics
- this.fsWriteLatency.inc((int)HLog.getWriteOps(), HLog.getWriteTime());
- this.fsSyncLatency.inc((int)HLog.getSyncOps(), HLog.getSyncTime());
+ ops = (int)HLog.getWriteOps();
+ if (ops != 0) this.fsWriteLatency.inc(ops, HLog.getWriteTime());
+ ops = (int)HLog.getSyncOps();
+ if (ops != 0) this.fsSyncLatency.inc(ops, HLog.getSyncTime());
+
// push the result
this.fsReadLatency.pushMetric(this.metricsRecord);
this.fsWriteLatency.pushMetric(this.metricsRecord);
@@ -244,4 +257,4 @@
Long.valueOf(this.blockCacheHitRatio.get()));
return sb.toString();
}
-}
\ No newline at end of file
+}