Updated Branches: refs/heads/trunk f1d232fb8 -> 4410fcce1
AMBARI-3489. Unable to reconfigure services with client only components. (Adamos Loizou via 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/4410fcce Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/4410fcce Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/4410fcce Branch: refs/heads/trunk Commit: 4410fcce1883347b9853bf9e3cd321488157d4f8 Parents: f1d232f Author: Siddharth Wagle <[email protected]> Authored: Fri Oct 11 10:48:17 2013 -0700 Committer: Siddharth Wagle <[email protected]> Committed: Fri Oct 11 10:48:26 2013 -0700 ---------------------------------------------------------------------- .../AmbariManagementControllerImpl.java | 17 +++++- .../AmbariManagementControllerTest.java | 60 ++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/4410fcce/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 1c0f56c..a1855b0 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -1820,10 +1820,25 @@ public class AmbariManagementControllerImpl implements } private void addClientSchForReinstall(Cluster cluster, + Map<State, List<Service>> changedServices, Map<String, Map<State, List<ServiceComponentHost>>> changedScHosts) throws AmbariException { Set<String> services = new HashSet<String>(); + + if (changedServices != null) { + for (Entry<State, List<Service>> entry : changedServices.entrySet()) { + if (State.STARTED != entry.getKey()) { + continue; + } + for (Service s : entry.getValue()) { + if (State.INSTALLED == s.getDesiredState()) { + services.add(s.getName()); + } + } + } + } + // Flatten changed Schs that are going to be Started List<ServiceComponentHost> serviceComponentHosts = new ArrayList<ServiceComponentHost>(); @@ -2004,7 +2019,7 @@ public class AmbariManagementControllerImpl implements if (reconfigureClients) { // Re-install client only hosts to reattach changed configs on service // restart - addClientSchForReinstall(cluster, changedScHosts); + addClientSchForReinstall(cluster, changedServices, changedScHosts); } if (!changedScHosts.isEmpty() http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/4410fcce/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java index 96adc3c..dee74ea 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java @@ -5285,6 +5285,66 @@ public class AmbariManagementControllerTest { } @Test + public void testReInstallClientComponentFromServiceChange() throws AmbariException { + String clusterName = "foo1"; + createCluster(clusterName); + clusters.getCluster(clusterName) + .setDesiredStackVersion(new StackId("HDP-2.0.6")); + String serviceName = "HDFS"; + createService(clusterName, serviceName, null); + String componentName = "HDFS_CLIENT"; + + createServiceComponent(clusterName, serviceName, componentName, + State.INIT); + + String host1 = "h1"; + clusters.addHost(host1); + clusters.getHost("h1").setOsType("centos6"); + clusters.getHost("h1").setState(HostState.HEALTHY); + clusters.getHost("h1").persist(); + String host2 = "h2"; + clusters.addHost(host2); + clusters.getHost("h2").setOsType("centos6"); + clusters.getHost("h2").setState(HostState.HEALTHY); + clusters.getHost("h2").persist(); + + clusters.mapHostToCluster(host1, clusterName); + clusters.mapHostToCluster(host2, clusterName); + + createServiceComponentHost(clusterName, serviceName, componentName, + host1, null); + createServiceComponentHost(clusterName, serviceName, componentName, + host2, null); + + // Install + installService(clusterName, serviceName, false, false); + + // Start Service + ServiceRequest sr = new ServiceRequest( + clusterName, serviceName, null, State.STARTED.name()); + Set<ServiceRequest> setReqs = new HashSet<ServiceRequest>(); + setReqs.add(sr); + RequestStatusResponse resp = controller.updateServices( + setReqs, Collections.<String, String>emptyMap(), false, true); + + Assert.assertNotNull(resp); + Assert.assertTrue(resp.getRequestId() > 0); + + List<Stage> stages = actionDB.getAllStages(resp.getRequestId()); + Map<String, Role> hostsToRoles = new HashMap<String, Role>(); + for (Stage stage : stages) { + for (HostRoleCommand hrc : stage.getOrderedHostRoleCommands()) { + hostsToRoles.put(hrc.getHostName(), hrc.getRole()); + } + } + + Map<String, Role> expectedHostsToRoles = new HashMap<String, Role>(); + expectedHostsToRoles.put(host1, Role.HDFS_CLIENT); + expectedHostsToRoles.put(host2, Role.HDFS_CLIENT); + Assert.assertEquals(expectedHostsToRoles, hostsToRoles); + } + + @Test public void testHivePasswordAbsentInConfigs() throws AmbariException { String clusterName = "c1"; String serviceName = "HIVE";
