Browse Source

AMBARI-3140. Expose NN HA status thorugh Ambari API. (swagle)

Siddharth Wagle 11 years ago
parent
commit
b19122629d

+ 4 - 2
ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java

@@ -58,7 +58,7 @@ public class JMXPropertyProvider extends AbstractPropertyProvider {
 
 
   private static final String NAME_KEY = "name";
   private static final String NAME_KEY = "name";
   private static final String PORT_KEY = "tag.port";
   private static final String PORT_KEY = "tag.port";
-
+  private static final String DOT_REPLACEMENT_CHAR = "#";
   private static final long DEFAULT_POPULATE_TIMEOUT_MILLIS = 10000L;
   private static final long DEFAULT_POPULATE_TIMEOUT_MILLIS = 10000L;
 
 
   public static final String TIMED_OUT_MSG = "Timed out waiting for JMX metrics.";
   public static final String TIMED_OUT_MSG = "Timed out waiting for JMX metrics.";
@@ -384,7 +384,9 @@ public class JMXPropertyProvider extends AbstractPropertyProvider {
   private void setResourceValue(Resource resource, Map<String, Map<String, Object>> categories, String propertyId,
   private void setResourceValue(Resource resource, Map<String, Map<String, Object>> categories, String propertyId,
                                 String category, String property, List<String> keyList) {
                                 String category, String property, List<String> keyList) {
     Map<String, Object> properties = categories.get(category);
     Map<String, Object> properties = categories.get(category);
-    
+    if (property.contains(DOT_REPLACEMENT_CHAR)) {
+      property = property.replaceAll(DOT_REPLACEMENT_CHAR, ".");
+    }
     if (properties != null && properties.containsKey(property)) {
     if (properties != null && properties.containsKey(property)) {
       Object value = properties.get(property);
       Object value = properties.get(property);
       if (keyList.size() > 0 && value instanceof Map) {
       if (keyList.size() > 0 && value instanceof Map) {

+ 5 - 0
ambari-server/src/main/resources/jmx_properties_2.json

@@ -1335,6 +1335,11 @@
         "pointInTime" : true,
         "pointInTime" : true,
         "temporal" : false
         "temporal" : false
       },
       },
+      "metrics/dfs/FSNamesystem/HAState":{
+        "metric" : "Hadoop:service=NameNode,name=FSNamesystem.tag#HAState",
+        "pointInTime" : true,
+        "temporal" : false
+      },
       "metrics/dfs/namenode/AddBlockOps":{
       "metrics/dfs/namenode/AddBlockOps":{
         "metric" : "Hadoop:service=NameNode,name=NameNodeActivity.AddBlockOps",
         "metric" : "Hadoop:service=NameNode,name=NameNodeActivity.AddBlockOps",
         "pointInTime" : true,
         "pointInTime" : true,

+ 18 - 2
ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java

@@ -85,7 +85,6 @@ public class JMXPropertyProviderTest {
     Assert.assertEquals(842207944704L, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/FSNamesystem", "CapacityRemaining")));
     Assert.assertEquals(842207944704L, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/FSNamesystem", "CapacityRemaining")));
     Assert.assertEquals(45509562366L, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/FSNamesystem", "CapacityNonDFSUsed")));
     Assert.assertEquals(45509562366L, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/dfs/FSNamesystem", "CapacityNonDFSUsed")));
 
 
-
     // datanode
     // datanode
     resource = new ResourceImpl(Resource.Type.HostComponent);
     resource = new ResourceImpl(Resource.Type.HostComponent);
 
 
@@ -355,7 +354,7 @@ public class JMXPropertyProviderTest {
         PropertyHelper.getPropertyId("HostRoles", "state"),
         PropertyHelper.getPropertyId("HostRoles", "state"),
         Collections.singleton("STARTED"));
         Collections.singleton("STARTED"));
 
 
-    // namenode
+    // resourcemanager
     Resource resource = new ResourceImpl(Resource.Type.HostComponent);
     Resource resource = new ResourceImpl(Resource.Type.HostComponent);
 
 
     resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal");
     resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal");
@@ -381,6 +380,23 @@ public class JMXPropertyProviderTest {
     Assert.assertEquals(0,  resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumLostNMs")));
     Assert.assertEquals(0,  resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumLostNMs")));
     Assert.assertEquals(0,  resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumUnhealthyNMs")));
     Assert.assertEquals(0,  resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumUnhealthyNMs")));
     Assert.assertEquals(0,  resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumRebootedNMs")));
     Assert.assertEquals(0,  resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/yarn/ClusterMetrics", "NumRebootedNMs")));
+
+    //namenode
+    resource = new ResourceImpl(Resource.Type.HostComponent);
+
+    resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal");
+    resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "NAMENODE");
+    resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+
+    // request with an empty set should get all supported properties
+    request = PropertyHelper.getReadRequest(Collections.<String>emptySet());
+
+    Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size());
+
+    Assert.assertEquals(propertyProvider.getSpec("domu-12-31-39-0e-34-e1" +
+      ".compute-1.internal", "50070"), streamProvider.getLastSpec());
+    Assert.assertEquals("active", resource.getPropertyValue(PropertyHelper
+      .getPropertyId("metrics/dfs/FSNamesystem", "HAState")));
   }
   }
   
   
   @Test
   @Test

+ 36 - 0
ambari-server/src/test/resources/hdfs_namenode_jmx.json

@@ -16,6 +16,42 @@
       "used" : 23634400
       "used" : 23634400
     },
     },
     "ObjectPendingFinalizationCount" : 0
     "ObjectPendingFinalizationCount" : 0
+  }, {
+      "name" : "Hadoop:service=NameNode,name=FSNamesystem",
+      "modelerType" : "FSNamesystem",
+      "tag.Context" : "dfs",
+      "tag.HAState" : "active",
+      "tag.Hostname" : "ambari-nn-ha-2.iad1",
+      "MissingBlocks" : 0,
+      "ExpiredHeartbeats" : 0,
+      "TransactionsSinceLastCheckpoint" : -11936,
+      "TransactionsSinceLastLogRoll" : 0,
+      "LastWrittenTransactionId" : 180,
+      "LastCheckpointTime" : 1378512092338,
+      "CapacityTotal" : 42275766271,
+      "CapacityTotalGB" : 39.0,
+      "CapacityUsed" : 65536,
+      "CapacityUsedGB" : 0.0,
+      "CapacityRemaining" : 39943532544,
+      "CapacityRemainingGB" : 37.0,
+      "CapacityUsedNonDFS" : 2332168191,
+      "TotalLoad" : 2,
+      "SnapshottableDirectories" : 0,
+      "Snapshots" : 0,
+      "BlocksTotal" : 4,
+      "FilesTotal" : 24,
+      "PendingReplicationBlocks" : 0,
+      "UnderReplicatedBlocks" : 0,
+      "CorruptBlocks" : 0,
+      "ScheduledReplicationBlocks" : 0,
+      "PendingDeletionBlocks" : 0,
+      "ExcessBlocks" : 0,
+      "PostponedMisreplicatedBlocks" : 0,
+      "PendingDataNodeMessageCount" : 0,
+      "MillisSinceLastLoadedEdits" : 24777,
+      "BlockCapacity" : 2097152,
+      "StaleDataNodes" : 0,
+      "TotalFiles" : 24
   }, {
   }, {
     "name" : "Hadoop:service=NameNode,name=FSNamesystemMetrics",
     "name" : "Hadoop:service=NameNode,name=FSNamesystemMetrics",
     "modelerType" : "FSNamesystemMetrics",
     "modelerType" : "FSNamesystemMetrics",