Author: suresh
Date: Thu Feb 28 22:07:07 2013
New Revision: 1451385

URL: http://svn.apache.org/r1451385
Log:
HDFS-4518. Finer grained metrics for HDFS capacity. Contributed by Arpit 
Agarwal.

Modified:
    
hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
    
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
    
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/test/MetricsAsserts.java

Modified: 
hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=1451385&r1=1451384&r2=1451385&view=diff
==============================================================================
--- 
hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
 (original)
+++ 
hadoop/common/branches/branch-1/src/hdfs/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
 Thu Feb 28 22:07:07 2013
@@ -6383,6 +6383,10 @@ public class FSNamesystem implements FSC
                 roundBytesToGBytes(getCapacityUsed()))
       .addGauge("CapacityRemainingGB", "",
                 roundBytesToGBytes(getCapacityRemaining()))
+      .addGauge("CapacityTotal", "", getCapacityTotal())
+      .addGauge("CapacityUsed", "", getCapacityUsed())
+      .addGauge("CapacityRemaining", "", getCapacityRemaining())
+      .addGauge("CapacityUsedNonDFS", "", getNonDfsUsedSpace())
       .addGauge("TotalLoad", "", getTotalLoad())
       .addGauge("CorruptBlocks", "", getCorruptReplicaBlocks())
       .addGauge("ExcessBlocks", "", getExcessBlocks())

Modified: 
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java?rev=1451385&r1=1451384&r2=1451385&view=diff
==============================================================================
--- 
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
 (original)
+++ 
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/hdfs/server/namenode/metrics/TestNameNodeMetrics.java
 Thu Feb 28 22:07:07 2013
@@ -101,6 +101,23 @@ public class TestNameNodeMetrics extends
     stm.close();
   }
 
+  /**
+   * Test that capacity metrics are exported and pass
+   * basic sanity tests.
+   */
+  public void testCapacityMetrics() throws Exception {
+    MetricsRecordBuilder rb = getMetrics(fsnMetrics);
+    long capacityTotal = getLongGauge("CapacityTotal", rb);
+    assert(capacityTotal != 0);
+    long capacityUsed = getLongGauge("CapacityUsed", rb);
+    long capacityRemaining =
+        getLongGauge("CapacityRemaining", rb);
+    long capacityUsedNonDFS =
+        getLongGauge("CapacityUsedNonDFS", rb);
+    assert(capacityUsed + capacityRemaining + capacityUsedNonDFS ==
+        capacityTotal);
+  }  
+
   /** Test metrics associated with addition of a file */
   public void testFileAdd() throws Exception {
     // Add files with 32 blocks

Modified: 
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/test/MetricsAsserts.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/test/org/apache/hadoop/test/MetricsAsserts.java?rev=1451385&r1=1451384&r2=1451385&view=diff
==============================================================================
--- 
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/test/MetricsAsserts.java
 (original)
+++ 
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/test/MetricsAsserts.java
 Thu Feb 28 22:07:07 2013
@@ -21,6 +21,9 @@ package org.apache.hadoop.test;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import static org.mockito.Mockito.*;
+
+import org.junit.Assert;
+import org.mockito.ArgumentCaptor;
 import org.mockito.stubbing.Answer;
 import org.mockito.invocation.InvocationOnMock;
 import static org.mockito.AdditionalMatchers.*;
@@ -174,6 +177,29 @@ public class MetricsAsserts {
   }
 
   /**
+   * Check that this metric was captured exactly once.
+   */
+  private static void checkCaptured(ArgumentCaptor<?> captor, String name) {
+    Assert.assertEquals("Expected exactly one metric for name " + name,
+        1, captor.getAllValues().size());
+  }
+
+  /**
+   * Lookup the value of a long metric by name. Throws exception if the
+   * metric could not be found.
+   *
+   * @param name of the metric.
+   * @param rb  the record builder mock used to getMetrics
+   * @return the long value of the metric if found.
+   */
+  public static long getLongGauge(String name, MetricsRecordBuilder rb) {
+    ArgumentCaptor<Long> captor = ArgumentCaptor.forClass(Long.class);
+    verify(rb, atLeast(0)).addGauge(eq(name), anyString(), captor.capture());
+    checkCaptured(captor, name);
+    return captor.getValue();
+  }
+
+  /**
    * Assert that a double gauge metric is greater than a value
    * @param name  of the metric
    * @param greater value of the metric should be greater than this


Reply via email to