You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by aj...@apache.org on 2016/04/30 08:52:25 UTC

ambari git commit: AMBARI-15457. Topology host info is not cleared when a host is removed (ajit)

Repository: ambari
Updated Branches:
  refs/heads/trunk 47b9e1a83 -> 8c278eab0


AMBARI-15457. Topology host info is not cleared when a host is removed (ajit)


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

Branch: refs/heads/trunk
Commit: 8c278eab0e2dd1ea08dc8d2ccf6887f6ace40852
Parents: 47b9e1a
Author: Ajit Kumar <aj...@apache.org>
Authored: Fri Apr 29 23:41:38 2016 -0700
Committer: Ajit Kumar <aj...@apache.org>
Committed: Fri Apr 29 23:44:56 2016 -0700

----------------------------------------------------------------------
 .../internal/HostResourceProvider.java          |   7 +-
 .../internal/HostResourceProviderTest.java      | 107 +++++++------------
 2 files changed, 44 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8c278eab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
index 56ef28b..8471825 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
@@ -887,6 +887,7 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
       } catch (Exception ex) {
         deleteStatusMetaData.addException(hostname, ex);
       }
+      removeHostFromClusterTopology(clusters, hostRequest);
       for (LogicalRequest logicalRequest: topologyManager.getRequests(Collections.<Long>emptyList())) {
         logicalRequest.removeHostRequestByHostName(hostname);
       }
@@ -918,7 +919,7 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
 
         if (!list.isEmpty()) {
 
-          List<String> componentsToRemove = new ArrayList<String>();
+          List<String> componentsToRemove = new ArrayList<>();
           for (ServiceComponentHost sch : list) {
             Service s = cluster.getService(sch.getServiceName());
             ServiceComponent sc = s.getServiceComponent(sch.getServiceComponentName());
@@ -951,8 +952,8 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
    * @throws AmbariException
    */
   private void removeHostFromClusterTopology(Clusters clusters, HostRequest hostRequest) throws AmbariException{
-    if(hostRequest.getClusterName() == null) {
-      for( Cluster c : clusters.getClusters().values()) {
+    if (hostRequest.getClusterName() == null) {
+      for (Cluster c : clusters.getClusters().values()) {
         removeHostFromClusterTopology(c.getClusterId(), hostRequest.getHostname());
       }
     } else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/8c278eab/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
index 3a2fdb2..853545e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
@@ -54,6 +54,7 @@ import org.apache.ambari.server.state.HostConfig;
 import org.apache.ambari.server.state.HostHealthStatus;
 import org.apache.ambari.server.state.HostHealthStatus.HealthStatus;
 import org.apache.ambari.server.state.MaintenanceState;
+import org.apache.ambari.server.state.ServiceComponentHost;
 import org.apache.ambari.server.state.stack.OsFamily;
 import org.easymock.EasyMock;
 import org.easymock.EasyMockSupport;
@@ -238,9 +239,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     propertyIds.add(HostResourceProvider.HOST_NAME_PROPERTY_ID);
     propertyIds.add(HostResourceProvider.HOST_MAINTENANCE_STATE_PROPERTY_ID);
 
-    Predicate predicate =
-        new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").
-            toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", null);
     Request request = PropertyHelper.getReadRequest(propertyIds);
 
     // replay
@@ -343,9 +342,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     propertyIds.add(HostResourceProvider.HOST_NAME_PROPERTY_ID);
     propertyIds.add(HostResourceProvider.HOST_HOST_STATUS_PROPERTY_ID);
 
-    Predicate predicate =
-        new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").
-            toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", null);
     Request request = PropertyHelper.getReadRequest(propertyIds);
 
     // replay
@@ -439,9 +436,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     propertyIds.add(HostResourceProvider.HOST_NAME_PROPERTY_ID);
     propertyIds.add(HostResourceProvider.HOST_HOST_STATUS_PROPERTY_ID);
 
-    Predicate predicate =
-        new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").
-            toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", null);
     Request request = PropertyHelper.getReadRequest(propertyIds);
 
     // replay
@@ -541,9 +536,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     propertyIds.add(HostResourceProvider.HOST_NAME_PROPERTY_ID);
     propertyIds.add(HostResourceProvider.HOST_HOST_STATUS_PROPERTY_ID);
 
-    Predicate predicate =
-        new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").
-            toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", null);
     Request request = PropertyHelper.getReadRequest(propertyIds);
 
     // replay
@@ -588,7 +581,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
 
     Host host100 = createMockHost("Host100", "Cluster100", null, "UNKNOWN", "RECOVERABLE", null);
 
-    Set<Cluster> clusterSet = new HashSet<Cluster>();
+    Set<Cluster> clusterSet = new HashSet<>();
     clusterSet.add(cluster);
 
     // set expectations
@@ -620,9 +613,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     propertyIds.add(HostResourceProvider.HOST_NAME_PROPERTY_ID);
     propertyIds.add(HostResourceProvider.HOST_HOST_STATUS_PROPERTY_ID);
 
-    Predicate predicate =
-        new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").
-            toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", null);
     Request request = PropertyHelper.getReadRequest(propertyIds);
 
     // replay
@@ -727,9 +718,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     propertyIds.add(HostResourceProvider.HOST_RECOVERY_REPORT_PROPERTY_ID);
     propertyIds.add(HostResourceProvider.HOST_RECOVERY_SUMMARY_PROPERTY_ID);
 
-    Predicate predicate =
-        new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").
-            toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", null);
     Request request = PropertyHelper.getReadRequest(propertyIds);
 
     // replay
@@ -825,9 +814,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     propertyIds.add(HostResourceProvider.HOST_NAME_PROPERTY_ID);
     propertyIds.add(HostResourceProvider.HOST_HOST_STATUS_PROPERTY_ID);
 
-    Predicate predicate =
-        new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").
-            toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", null);
     Request request = PropertyHelper.getReadRequest(propertyIds);
 
     // replay
@@ -890,7 +877,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
 
     AbstractControllerResourceProvider.init(resourceProviderFactory);
 
-    Set<Cluster> clusterSet = new HashSet<Cluster>();
+    Set<Cluster> clusterSet = new HashSet<>();
     clusterSet.add(cluster);
 
     Host host100 = createMockHost("Host100", "Cluster100", null, "HEALTHY", "RECOVERABLE", null);
@@ -937,9 +924,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     // create the request
     Request request = PropertyHelper.getUpdateRequest(properties, null);
 
-    Predicate predicate = new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).
-        equals("Cluster100").
-        and().property(HostResourceProvider.HOST_NAME_PROPERTY_ID).equals("Host100").toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", "Host100");
 
     ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
         Resource.Type.Host,
@@ -1033,9 +1018,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     // create the request
     Request request = PropertyHelper.getUpdateRequest(properties, null);
 
-    Predicate predicate = new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).
-        equals("Cluster100").
-        and().property(HostResourceProvider.HOST_NAME_PROPERTY_ID).equals("Host100").toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", "Host100");
     provider.updateResources(request, predicate);
 
     // verify
@@ -1061,49 +1044,40 @@ public class HostResourceProviderTest extends EasyMockSupport {
     Injector injector = createInjector();
     AmbariManagementController managementController = injector.getInstance(AmbariManagementController.class);
     Clusters clusters = injector.getInstance(Clusters.class);
+    SecurityContextHolder.getContext().setAuthentication(authentication);
     Cluster cluster = createMock(Cluster.class);
     Host host1 = createNiceMock(Host.class);
+    ResourceProvider provider = getHostProvider(injector);
     HostHealthStatus healthStatus = createNiceMock(HostHealthStatus.class);
+    TopologyManager topologyManager = createNiceMock(TopologyManager.class);
+    HostResourceProvider.setTopologyManager(topologyManager);
 
-    List<Host> hosts = new LinkedList<Host>();
-    hosts.add(host1);
-
-    Set<Cluster> clusterSet = new HashSet<Cluster>();
+    Set<Cluster> clusterSet = new HashSet<>();
 
     // set expectations
     expect(managementController.getClusters()).andReturn(clusters).anyTimes();
-    expect(clusters.getHosts()).andReturn(hosts).anyTimes();
+    expect(clusters.getHosts()).andReturn(Arrays.asList(host1)).anyTimes();
     expect(clusters.getHost("Host100")).andReturn(host1).anyTimes();
     expect(clusters.getCluster("Cluster100")).andReturn(cluster).anyTimes();
     expect(clusters.getClustersForHost("Host100")).andReturn(clusterSet).anyTimes();
+    expect(cluster.getServiceComponentHosts("Host100")).andReturn(Collections.EMPTY_LIST);
+    expect(cluster.getClusterId()).andReturn(100L).anyTimes();
     clusters.deleteHost("Host100");
-    expectLastCall().anyTimes();
+    cluster.recalculateAllClusterVersionStates();
     expect(host1.getHostName()).andReturn("Host100").anyTimes();
     expect(healthStatus.getHealthStatus()).andReturn(HostHealthStatus.HealthStatus.HEALTHY).anyTimes();
     expect(healthStatus.getHealthReport()).andReturn("HEALTHY").anyTimes();
+    expect(topologyManager.getRequests(Collections.EMPTY_LIST)).andReturn(Collections.EMPTY_LIST).anyTimes();
 
     // replay
     replayAll();
 
-    SecurityContextHolder.getContext().setAuthentication(authentication);
-
-    TopologyManager topologyManager = EasyMock.createNiceMock(TopologyManager.class);
-    expect(topologyManager.getRequests(Collections.EMPTY_LIST)).andReturn(Collections.EMPTY_LIST).anyTimes();
-
-    replay(topologyManager);
-
-    ResourceProvider provider = getHostProvider(injector);
-    HostResourceProvider.setTopologyManager(topologyManager);
-
     AbstractResourceProviderTest.TestObserver observer = new AbstractResourceProviderTest.TestObserver();
-
     ((ObservableResourceProvider) provider).addObserver(observer);
 
-    Predicate predicate = new PredicateBuilder().property(HostResourceProvider.HOST_NAME_PROPERTY_ID).equals("Host100").
-        toPredicate();
+    Predicate predicate = buildPredicate("Cluster100", "Host100");
     provider.deleteResources(new RequestImpl(null, null, null, null), predicate);
 
-
     ResourceProviderEvent lastEvent = observer.getLastEvent();
     Assert.assertNotNull(lastEvent);
     Assert.assertEquals(Resource.Type.Host, lastEvent.getResourceType());
@@ -1157,7 +1131,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
     // requests
     HostRequest request1 = new HostRequest("host1", "cluster1", Collections.<String, String>emptyMap());
 
-    Set<HostRequest> setRequests = new HashSet<HostRequest>();
+    Set<HostRequest> setRequests = new HashSet<>();
     setRequests.add(request1);
 
     // expectations
@@ -1190,7 +1164,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
   /**
    * Ensure that HostNotFoundException is propagated in case where there is a single request.
    */
-  @Test
+  @Test(expected = HostNotFoundException.class)
   public void testGetHosts___HostNotFoundException() throws Exception {
     // member state mocks
     Injector injector = createInjector();
@@ -1212,21 +1186,15 @@ public class HostResourceProviderTest extends EasyMockSupport {
     replayAll();
 
     SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
+    getHosts(managementController, setRequests);
 
-    // assert that exception is thrown in case where there is a single request
-    try {
-      getHosts(managementController, setRequests);
-      fail("expected HostNotFoundException");
-    } catch (HostNotFoundException e) {
-      // expected
-    }
     verifyAll();
   }
 
   /**
    * Ensure that HostNotFoundException is propagated in case where there is a single request.
    */
-  @Test
+  @Test(expected = HostNotFoundException.class)
   public void testGetHosts___HostNotFoundException_HostNotAssociatedWithCluster() throws Exception {
     // member state mocks
     Injector injector = createInjector();
@@ -1252,15 +1220,8 @@ public class HostResourceProviderTest extends EasyMockSupport {
     replayAll();
 
     SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
+    getHosts(managementController, setRequests);
 
-    //test
-    // assert that exception is thrown in case where there is a single request
-    try {
-      getHosts(managementController, setRequests);
-      fail("expected HostNotFoundException");
-    } catch (HostNotFoundException e) {
-      // expected
-    }
     verifyAll();
   }
 
@@ -1432,4 +1393,16 @@ public class HostResourceProviderTest extends EasyMockSupport {
     expectLastCall().anyTimes();
     return host;
   }
+
+  private Predicate buildPredicate(String clusterName, String hostName) {
+    PredicateBuilder builder = new PredicateBuilder();
+    if (clusterName != null && hostName != null) {
+      return builder.property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals(clusterName)
+      .and().property(HostResourceProvider.HOST_NAME_PROPERTY_ID).equals(hostName).toPredicate();
+    }
+
+    return clusterName != null ?
+            builder.property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals(clusterName).toPredicate() :
+            builder.property(HostResourceProvider.HOST_NAME_PROPERTY_ID).equals(hostName).toPredicate();
+  }
 }