Updated Branches:
  refs/heads/trunk 2adbf8310 -> 73d493991

AMBARI-3099. Cannot change JMX ports using Ambari configuration API. (swagle)


Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/73d49399
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/73d49399
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/73d49399

Branch: refs/heads/trunk
Commit: 73d4939911c6dc73474a61bd155b7110d60be869
Parents: 2adbf83
Author: Siddharth Wagle <[email protected]>
Authored: Wed Sep 4 15:31:53 2013 -0700
Committer: Siddharth Wagle <[email protected]>
Committed: Wed Sep 4 15:55:35 2013 -0700

----------------------------------------------------------------------
 .../internal/AbstractProviderModule.java        | 49 +++++-----
 .../internal/JMXHostProviderTest.java           | 97 +++++++++++++++++++-
 2 files changed, 123 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/73d49399/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
index 77556f0..90261fc 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
@@ -33,6 +33,7 @@ import 
org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import com.google.inject.Inject;
 import org.apache.ambari.server.controller.utilities.StreamProvider;
+import org.apache.ambari.server.state.DesiredConfig;
 import org.apache.ambari.server.state.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -200,7 +201,7 @@ public abstract class AbstractProviderModule implements 
ProviderModule, Resource
     Service.Type service = componentServiceMap.get(componentName);
     if (service != null) {
       try {
-        String currVersion = getDesiredConfigVersion(clusterName, 
service.name(),
+        String currVersion = getDesiredConfigVersion(clusterName,
           serviceConfigTypes.get(service));
 
         String oldVersion = serviceConfigVersions.get(service);
@@ -447,33 +448,37 @@ public abstract class AbstractProviderModule implements 
ProviderModule, Resource
   }
 
   private String getDesiredConfigVersion(String clusterName,
-      String serviceName, String configType) throws
+                                         String configType) throws
       NoSuchParentResourceException, UnsupportedPropertyException,
       SystemException {
 
     // Get config version tag
-    ResourceProvider serviceResourceProvider = 
getResourceProvider(Resource.Type.Service);
+    ResourceProvider clusterResourceProvider = getResourceProvider(Resource
+      .Type.Cluster);
     Predicate basePredicate = new PredicateBuilder().property
-      
(ServiceResourceProvider.SERVICE_CLUSTER_NAME_PROPERTY_ID).equals(clusterName).and()
-      
.property(ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID).equals(serviceName).toPredicate();
+      (ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID).equals(clusterName)
+      .toPredicate();
 
-    Set<Resource> serviceResource = null;
+    Set<Resource> clusterResource = null;
     try {
-      serviceResource = serviceResourceProvider.getResources(
-        
PropertyHelper.getReadRequest(ServiceResourceProvider.SERVICE_CLUSTER_NAME_PROPERTY_ID,
-          ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID,
-          ServiceResourceProvider.SERVICE_DESIRED_CONFIGS_PROPERTY_ID), 
basePredicate);
+      clusterResource = clusterResourceProvider.getResources(
+        
PropertyHelper.getReadRequest(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID,
+          ClusterResourceProvider.CLUSTER_DESIRED_CONFIGS_PROPERTY_ID), 
basePredicate);
     } catch (NoSuchResourceException e) {
       LOG.error("Resource for the desired config not found. " + e);
     }
 
     String versionTag = "version1";
-    if (serviceResource != null) {
-      for (Resource res : serviceResource) {
-        Map<String, String> configs = (Map<String, String>)
-            
res.getPropertyValue(ServiceResourceProvider.SERVICE_DESIRED_CONFIGS_PROPERTY_ID);
+    if (clusterResource != null) {
+      for (Resource resource : clusterResource) {
+        Map<String, Object> configs =
+        resource.getPropertiesMap().get(ClusterResourceProvider
+          .CLUSTER_DESIRED_CONFIGS_PROPERTY_ID);
         if (configs != null) {
-          versionTag = configs.get(configType);
+          DesiredConfig config = (DesiredConfig) configs.get(configType);
+          if (config != null) {
+            versionTag = config.getVersion();
+          }
         }
       }
     }
@@ -519,13 +524,13 @@ public abstract class AbstractProviderModule implements 
ProviderModule, Resource
   /**
    * Create the JMX property provider for the given type.
    */
-  private PropertyProvider createJMXPropertyProvider( Resource.Type type, 
StreamProvider streamProvider,
-                                                      JMXHostProvider 
jmxHostProvider,
-                                                      String 
clusterNamePropertyId,
-                                                      String 
hostNamePropertyId,
-                                                      String 
componentNamePropertyId,
-                                                      String statePropertyId,
-                                                      Set<String> 
healthyStates) {
+  private PropertyProvider createJMXPropertyProvider(Resource.Type type, 
StreamProvider streamProvider,
+                                                     JMXHostProvider 
jmxHostProvider,
+                                                     String 
clusterNamePropertyId,
+                                                     String hostNamePropertyId,
+                                                     String 
componentNamePropertyId,
+                                                     String statePropertyId,
+                                                     Set<String> 
healthyStates) {
     updateClusterVersion();
 
     Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/73d49399/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
index cf9f504..527ccb5 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/JMXHostProviderTest.java
@@ -19,6 +19,7 @@ package org.apache.ambari.server.controller.internal;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.*;
@@ -26,12 +27,16 @@ import org.apache.ambari.server.controller.spi.*;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.State;
+import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -55,6 +60,11 @@ public class JMXHostProviderTest {
     ambariMetaInfo.init();
   }
 
+  @After
+  public void teardown() {
+    injector.getInstance(PersistService.class).stop();
+  }
+
   private void createService(String clusterName,
                              String serviceName, State desiredState) throws 
AmbariException {
     String dStateStr = null;
@@ -157,9 +167,74 @@ public class JMXHostProviderTest {
     controller.updateServices(sReqs, mapRequestProps, true, false);
   }
 
+  private void createConfigs() throws AmbariException {
+    String clusterName = "c1";
+    ClusterRequest r = new ClusterRequest(null, clusterName, "HDP-0.1", null);
+    controller.createCluster(r);
+    clusters.getCluster(clusterName).setDesiredStackVersion(new 
StackId("HDP-0.1"));
+    String serviceName = "HDFS";
+    createService(clusterName, serviceName, null);
+    String componentName1 = "NAMENODE";
+    String componentName2 = "DATANODE";
+    String componentName3 = "HDFS_CLIENT";
+
+    Map<String, String> mapRequestProps = new HashMap<String, String>();
+    mapRequestProps.put("context", "Called from a test");
+
+    createServiceComponent(clusterName, serviceName, componentName1,
+      State.INIT);
+    createServiceComponent(clusterName, serviceName, componentName2,
+      State.INIT);
+    createServiceComponent(clusterName, serviceName, componentName3,
+      State.INIT);
+
+    String host1 = "h1";
+    clusters.addHost(host1);
+    clusters.getHost("h1").setOsType("centos5");
+    clusters.getHost("h1").persist();
+    String host2 = "h2";
+    clusters.addHost(host2);
+    clusters.getHost("h2").setOsType("centos6");
+    clusters.getHost("h2").persist();
+    clusters.mapHostToCluster(host1, clusterName);
+    clusters.mapHostToCluster(host2, clusterName);
+
+    createServiceComponentHost(clusterName, null, componentName1,
+      host1, null);
+    createServiceComponentHost(clusterName, serviceName, componentName2,
+      host1, null);
+    createServiceComponentHost(clusterName, serviceName, componentName2,
+      host2, null);
+    createServiceComponentHost(clusterName, serviceName, componentName3,
+      host1, null);
+    createServiceComponentHost(clusterName, serviceName, componentName3,
+      host2, null);
+
+    // Create configs
+    Map<String, String> configs = new HashMap<String, String>();
+    configs.put(NAMENODE_PORT, "localhost:70070");
+    configs.put(DATANODE_PORT, "localhost:70075");
+
+    ConfigurationRequest cr1 = new ConfigurationRequest(clusterName,
+      "hdfs-site", "versionN", configs);
+
+    ClusterRequest crReq = new ClusterRequest(null, clusterName, null, null);
+    crReq.setDesiredConfig(cr1);
+    controller.updateClusters(Collections.singleton(crReq), null);
+    Cluster cluster = clusters.getCluster(clusterName);
+    Assert.assertEquals("versionN", cluster.getDesiredConfigByType("hdfs-site")
+      .getVersionTag());
+    Assert.assertEquals("localhost:70070", cluster.getDesiredConfigByType
+      ("hdfs-site").getProperties().get(NAMENODE_PORT));
+  }
+
 
   @Test
-  public void testJMXPortMapInit() throws NoSuchParentResourceException, 
ResourceAlreadyExistsException, UnsupportedPropertyException, SystemException, 
AmbariException, NoSuchResourceException {
+  public void testJMXPortMapInitAtServiceLevel() throws
+    NoSuchParentResourceException,
+    ResourceAlreadyExistsException, UnsupportedPropertyException,
+    SystemException, AmbariException, NoSuchResourceException {
+
     createHDFSServiceConfigs();
 
     JMXHostProviderModule providerModule = new JMXHostProviderModule();
@@ -174,6 +249,26 @@ public class JMXHostProviderTest {
     Assert.assertEquals(null, providerModule.getPort("c1", "HBASE_MASTER"));
   }
 
+  @Test
+  public void testJMXPortMapInitAtClusterLevel() throws
+    NoSuchParentResourceException,
+    ResourceAlreadyExistsException, UnsupportedPropertyException,
+    SystemException, AmbariException, NoSuchResourceException {
+
+    createConfigs();
+
+    JMXHostProviderModule providerModule = new JMXHostProviderModule();
+    providerModule.registerResourceProvider(Resource.Type.Cluster);
+    providerModule.registerResourceProvider(Resource.Type.Configuration);
+    // Non default port addresses
+    Assert.assertEquals("70070", providerModule.getPort("c1", "NAMENODE"));
+    Assert.assertEquals("70075", providerModule.getPort("c1", "DATANODE"));
+    // Default port addresses
+    Assert.assertEquals(null, providerModule.getPort("c1", "JOBTRACKER"));
+    Assert.assertEquals(null, providerModule.getPort("c1", "TASKTRACKER"));
+    Assert.assertEquals(null, providerModule.getPort("c1", "HBASE_MASTER"));
+  }
+
   private static class JMXHostProviderModule extends
     AbstractProviderModule {
 

Reply via email to