Repository: ambari Updated Branches: refs/heads/trunk 218829f93 -> ad593b4ed
AMBARI-21587 Don't set restart indicators for NN/RM during DN/NM deletion (dsen) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ad593b4e Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ad593b4e Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ad593b4e Branch: refs/heads/trunk Commit: ad593b4edba46f75e8b8c0afd8856abc7005aedc Parents: 218829f Author: Dmytro Sen <d...@apache.org> Authored: Thu Jul 27 20:15:02 2017 +0300 Committer: Dmytro Sen <d...@apache.org> Committed: Thu Jul 27 20:15:15 2017 +0300 ---------------------------------------------------------------------- .../AmbariManagementControllerImpl.java | 38 ++--------- .../AmbariManagementControllerTest.java | 69 ++++++++++++++++++++ 2 files changed, 73 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/ad593b4e/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 4c20f62..3016027 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 @@ -160,7 +160,6 @@ import org.apache.ambari.server.state.ConfigHelper; import org.apache.ambari.server.state.DesiredConfig; import org.apache.ambari.server.state.ExtensionInfo; import org.apache.ambari.server.state.Host; -import org.apache.ambari.server.state.HostComponentAdminState; import org.apache.ambari.server.state.HostState; import org.apache.ambari.server.state.MaintenanceState; import org.apache.ambari.server.state.OperatingSystemInfo; @@ -3623,8 +3622,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle for (Entry<ServiceComponent, Set<ServiceComponentHost>> entry : safeToRemoveSCHs.entrySet()) { for (ServiceComponentHost componentHost : entry.getValue()) { try { - deleteHostComponent(entry.getKey(), componentHost); - deleteStatusMetaData.addDeletedKey(componentHost.getHostName() + "/" + componentHost.getServiceComponentName()); + //actually delete the component + entry.getKey().deleteServiceComponentHosts(componentHost.getHostName()); + //create cluster-master-service map to update all include/exclude files in one action String componentName = componentHost.getServiceComponentName(); if (masterToSlaveMappingForDecom.containsValue(componentName)) { @@ -3649,6 +3649,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle clusterMasterSlaveHostsMap.put(componentHost.getClusterName(), masterSlaveHostsMap); } } + deleteStatusMetaData.addDeletedKey(componentHost.getHostName() + "/" + componentHost.getServiceComponentName()); } catch (Exception ex) { deleteStatusMetaData.addException(componentHost.getHostName() + "/" + componentHost.getServiceComponentName(), ex); } @@ -3680,37 +3681,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle return deleteStatusMetaData; } - private void deleteHostComponent(ServiceComponent serviceComponent, ServiceComponentHost componentHost) throws AmbariException { - String serviceName = serviceComponent.getServiceName(); - String master_component_name = null; - String slave_component_name = componentHost.getServiceComponentName(); - HostComponentAdminState desiredAdminState = componentHost.getComponentAdminState(); - State slaveState = componentHost.getState(); - //Delete hostcomponents - serviceComponent.deleteServiceComponentHosts(componentHost.getHostName()); - // If deleted hostcomponents support decomission and were decommited and stopped or in unknown state - if (masterToSlaveMappingForDecom.containsValue(slave_component_name) - && desiredAdminState.equals(HostComponentAdminState.DECOMMISSIONED) - && (slaveState.equals(State.INSTALLED) || slaveState.equals(State.UNKNOWN))) { - for (Entry<String, String> entrySet : masterToSlaveMappingForDecom.entrySet()) { - if (entrySet.getValue().equals(slave_component_name)) { - master_component_name = entrySet.getKey(); - } - } - - //Mark master component as needed to restart for remove host info from components UI - Cluster cluster = clusters.getCluster(serviceComponent.getClusterName()); - Service service = cluster.getService(serviceName); - ServiceComponent sc = service.getServiceComponent(master_component_name); - - if (sc != null && sc.isMasterComponent()) { - for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) { - sch.setRestartRequired(true); - } - } - } - } - @Override public void deleteUsers(Set<UserRequest> requests) throws AmbariException { http://git-wip-us.apache.org/repos/asf/ambari/blob/ad593b4e/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 efb150f..cf78130 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 @@ -9328,6 +9328,75 @@ public class AmbariManagementControllerTest { } @Test + public void testRestartIndicatorsAndSlaveFilesUpdateAtComponentsDelete() throws Exception { + String cluster1 = getUniqueName(); + createCluster(cluster1); + Cluster cluster = clusters.getCluster(cluster1); + StackId stackId = new StackId("HDP-2.0.7"); + cluster.setDesiredStackVersion(stackId); + cluster.setCurrentStackVersion(stackId); + + String hdfsService = "HDFS"; + String zookeeperService = "ZOOKEEPER"; + createService(cluster1, hdfsService, null); + createService(cluster1, zookeeperService, null); + + String namenode = "NAMENODE"; + String datanode = "DATANODE"; + String zookeeperServer = "ZOOKEEPER_SERVER"; + String zookeeperClient = "ZOOKEEPER_CLIENT"; + + createServiceComponent(cluster1, hdfsService, namenode, + State.INIT); + createServiceComponent(cluster1, hdfsService, datanode, + State.INIT); + createServiceComponent(cluster1, zookeeperService, zookeeperServer, + State.INIT); + createServiceComponent(cluster1, zookeeperService, zookeeperClient, + State.INIT); + + String host1 = getUniqueName(); + String host2 = getUniqueName(); + + addHostToCluster(host1, cluster1); + createServiceComponentHost(cluster1, hdfsService, namenode, host1, null); + createServiceComponentHost(cluster1, hdfsService, datanode, host1, null); + createServiceComponentHost(cluster1, zookeeperService, zookeeperServer, host1, + null); + createServiceComponentHost(cluster1, zookeeperService, zookeeperClient, host1, + null); + + ServiceComponentHost nameNodeSch = null; + for (ServiceComponentHost sch : cluster.getServiceComponentHosts(host1)) { + if (sch.getServiceComponentName().equals(namenode)) { + nameNodeSch = sch; + } + } + + assertFalse(nameNodeSch.isRestartRequired()); + + addHostToCluster(host2, cluster1); + + createServiceComponentHost(cluster1, hdfsService, datanode, host2, null); + assertFalse(nameNodeSch.isRestartRequired()); //No restart required if adding host + + deleteServiceComponentHost(cluster1, hdfsService, datanode, host2, null); + deleteHost(host2); + + assertFalse(nameNodeSch.isRestartRequired()); //NameNode doesn't need to be restarted! + + List<Long> requestIDs = actionDB.getRequestsByStatus(null, 1, false); + Request request = actionDB.getRequest(requestIDs.get(0)); + assertEquals("Update Include and Exclude Files for [HDFS]", request.getRequestContext()); + assertEquals("{\"multi_services_decom_request\":\"true\",\"update_files_only\":\"false\"}", request.getInputs()); + assertEquals(1, request.getResourceFilters().size()); + RequestResourceFilter resourceFilter = request.getResourceFilters().get(0); + assertEquals(resourceFilter.getServiceName(), hdfsService); + assertEquals(resourceFilter.getComponentName(), namenode); + assertEquals(resourceFilter.getHostNames(), new ArrayList<String>()); + } + + @Test public void testMaintenanceState() throws Exception { String cluster1 = getUniqueName(); createCluster(cluster1);