Browse Source

HDFS-13686. Add overall metrics for FSNamesystemLock. Contributed by Lukas Majercak.

(cherry picked from commit d31a3ce767d3bb68bdbb4f36d45600eab9f4f8b7)
Inigo Goiri 7 years ago
parent
commit
69abd1fc5c

+ 12 - 5
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystemLock.java

@@ -107,6 +107,8 @@ class FSNamesystemLock {
   private static final String WRITE_LOCK_METRIC_PREFIX = "FSNWriteLock";
   private static final String LOCK_METRIC_SUFFIX = "Nanos";
 
+  private static final String OVERALL_METRIC_NAME = "Overall";
+
   FSNamesystemLock(Configuration conf,
       MutableRatesWithAggregation detailedHoldTimeMetrics) {
     this(conf, detailedHoldTimeMetrics, new Timer());
@@ -299,12 +301,17 @@ class FSNamesystemLock {
    */
   private void addMetric(String operationName, long value, boolean isWrite) {
     if (metricsEnabled) {
-      String metricName =
-          (isWrite ? WRITE_LOCK_METRIC_PREFIX : READ_LOCK_METRIC_PREFIX) +
-          org.apache.commons.lang.StringUtils.capitalize(operationName) +
-          LOCK_METRIC_SUFFIX;
-      detailedHoldTimeMetrics.add(metricName, value);
+      String opMetric = getMetricName(operationName, isWrite);
+      detailedHoldTimeMetrics.add(opMetric, value);
+
+      String overallMetric = getMetricName(OVERALL_METRIC_NAME, isWrite);
+      detailedHoldTimeMetrics.add(overallMetric, value);
     }
   }
 
+  private static String getMetricName(String operationName, boolean isWrite) {
+    return (isWrite ? WRITE_LOCK_METRIC_PREFIX : READ_LOCK_METRIC_PREFIX) +
+        org.apache.commons.lang.StringUtils.capitalize(operationName) +
+        LOCK_METRIC_SUFFIX;
+  }
 }

+ 8 - 2
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestFSNamesystemLock.java

@@ -332,7 +332,7 @@ public class TestFSNamesystemLock {
     FSNamesystemLock fsLock = new FSNamesystemLock(conf, rates, timer);
 
     fsLock.readLock();
-    timer.advanceNanos(1200000);
+    timer.advanceNanos(1300000);
     fsLock.readUnlock("foo");
     fsLock.readLock();
     timer.advanceNanos(2400000);
@@ -352,12 +352,18 @@ public class TestFSNamesystemLock {
     MetricsRecordBuilder rb = MetricsAsserts.mockMetricsRecordBuilder();
     rates.snapshot(rb, true);
 
-    assertGauge("FSNReadLockFooNanosAvgTime", 1800000.0, rb);
+    assertGauge("FSNReadLockFooNanosAvgTime", 1850000.0, rb);
     assertCounter("FSNReadLockFooNanosNumOps", 2L, rb);
     assertGauge("FSNReadLockBarNanosAvgTime", 2000000.0, rb);
     assertCounter("FSNReadLockBarNanosNumOps", 1L, rb);
     assertGauge("FSNWriteLockBazNanosAvgTime", 1000000.0, rb);
     assertCounter("FSNWriteLockBazNanosNumOps", 1L, rb);
+
+    // Overall
+    assertGauge("FSNReadLockOverallNanosAvgTime", 1900000.0, rb);
+    assertCounter("FSNReadLockOverallNanosNumOps", 3L, rb);
+    assertGauge("FSNWriteLockOverallNanosAvgTime", 1000000.0, rb);
+    assertCounter("FSNWriteLockOverallNanosNumOps", 1L, rb);
   }
 
 }