You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2014/02/06 18:57:59 UTC

git commit: AMBARI-4543. Changes to Components should ignore PASSIVE HostComponents (ncole)

Updated Branches:
  refs/heads/trunk eec3548f1 -> 369aeb4e5


AMBARI-4543. Changes to Components should ignore PASSIVE HostComponents (ncole)


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

Branch: refs/heads/trunk
Commit: 369aeb4e5b551f91fb034aba6ce1b59490925e04
Parents: eec3548
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu Feb 6 09:24:08 2014 -0800
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu Feb 6 09:24:08 2014 -0800

----------------------------------------------------------------------
 .../AmbariManagementControllerImpl.java         |  5 ++-
 .../internal/ComponentResourceProvider.java     | 21 +++++++++++--
 .../AmbariManagementControllerTest.java         | 33 +++++++++++++++++++-
 .../internal/ComponentResourceProviderTest.java |  5 +++
 4 files changed, 60 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/369aeb4e/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 2e1c3cd..0efc935 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
@@ -1506,7 +1506,10 @@ public class AmbariManagementControllerImpl implements
         PassiveState oldPassive = getEffectivePassiveState(cluster, s, sch);
         
         if (newPassive != oldPassive) {
-          if (newPassive.equals(PassiveState.IMPLIED)) {
+          if (sc.isClientComponent()) {
+            throw new IllegalArgumentException("Invalid arguments, cannot set " +
+              "passive state on a client component");
+          } else if (newPassive.equals(PassiveState.IMPLIED)) {
             throw new IllegalArgumentException("Invalid arguments, can only set " +
               "passive state to one of " + EnumSet.of(PassiveState.ACTIVE, PassiveState.PASSIVE));
           } else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/369aeb4e/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
index 5e9b3b4..feb0469 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
@@ -49,6 +49,7 @@ import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.PassiveState;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
 import org.apache.ambari.server.state.ServiceComponentFactory;
@@ -557,8 +558,9 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
       return null;
     }
 
-    Clusters clusters = getManagementController().getClusters();
-    AmbariMetaInfo ambariMetaInfo = getManagementController().getAmbariMetaInfo();
+    AmbariManagementController controller = getManagementController();
+    Clusters clusters = controller.getClusters();
+    AmbariMetaInfo ambariMetaInfo = controller.getAmbariMetaInfo();
 
     Map<State, List<ServiceComponent>> changedComps =
         new HashMap<State, List<ServiceComponent>>();
@@ -732,6 +734,21 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
           }
           continue;
         }
+
+        // do not update or alter any HC that is not active
+        PassiveState schPassive = controller.getEffectivePassiveState(cluster, s, sch);
+        if (PassiveState.ACTIVE != schPassive) {
+          if (LOG.isDebugEnabled()) {
+            LOG.debug("Ignoring ServiceComponentHost"
+                + ", clusterName=" + request.getClusterName()
+                + ", serviceName=" + s.getName()
+                + ", componentName=" + sc.getName()
+                + ", hostname=" + sch.getHostName()
+                + ", passive=" + schPassive);
+          }
+          continue;
+        }
+
         if (!State.isValidStateTransition(oldSchState, newState)) {
           // FIXME throw correct error
           throw new AmbariException("Invalid transition for"

http://git-wip-us.apache.org/repos/asf/ambari/blob/369aeb4e/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 f483068..5bea305 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
@@ -9026,7 +9026,6 @@ public class AmbariManagementControllerTest {
     Map<String, String> requestProperties = new HashMap<String, String>();
     requestProperties.put("context", "Called from a test");
     
-    
     Cluster cluster = clusters.getCluster(clusterName);
     Service service = cluster.getService(serviceName);
     Map<String, Host> hosts = clusters.getHostsForCluster(clusterName);
@@ -9128,6 +9127,38 @@ public class AmbariManagementControllerTest {
     targetSch.setPassiveState(PassiveState.PASSIVE);
     Assert.assertEquals(PassiveState.PASSIVE, controller.getEffectivePassiveState(cluster, service, targetSch));
 
+    // check the host components active state vs desired state
+    for (ServiceComponent sc : service.getServiceComponents().values()) {
+      for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
+        Assert.assertEquals(State.INIT, sch.getState());
+      }
+    }    
+    
+    // attempt install on DATANODE only
+    ServiceComponentRequest scr = new ServiceComponentRequest(clusterName,
+        serviceName, componentName2, State.INSTALLED.name());
+    RequestStatusResponse rsr = ComponentResourceProviderTest.updateComponents(
+        controller, Collections.singleton(scr), requestProperties, false);
+    
+    if (rsr != null) {
+      // manually change live state to stopped as no running action manager
+      List<HostRoleCommand> commands = actionDB.getRequestTasks(rsr.getRequestId());
+      for (HostRoleCommand cmd : commands) {
+        clusters.getCluster(clusterName).getService(serviceName).getServiceComponent(cmd.getRole().name())
+            .getServiceComponentHost(cmd.getHostName()).setState(State.INSTALLED);
+      }
+    }
+    
+    // verify passive sch was skipped
+    for (ServiceComponent sc : service.getServiceComponents().values()) {
+      if (!sc.getName().equals(componentName2))
+        continue;
+      
+      for (ServiceComponentHost sch : sc.getServiceComponentHosts().values()) {
+        Assert.assertEquals(sch == targetSch ? State.INIT : State.INSTALLED, sch.getState());
+      }
+    }    
+
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/369aeb4e/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
index a8770ac..81c1daf 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
@@ -60,6 +60,7 @@ import org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.ComponentInfo;
+import org.apache.ambari.server.state.PassiveState;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
 import org.apache.ambari.server.state.ServiceComponentFactory;
@@ -238,6 +239,10 @@ public class ComponentResourceProviderTest {
     // set expectations
     expect(managementController.getClusters()).andReturn(clusters).anyTimes();
     expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+    expect(managementController.getEffectivePassiveState(
+        capture(new Capture<Cluster>()), capture(new Capture<Service>()),
+        capture(new Capture<ServiceComponentHost>()))).andReturn(PassiveState.ACTIVE).anyTimes();
+    
     expect(clusters.getCluster("Cluster100")).andReturn(cluster).anyTimes();
     expect(cluster.getDesiredStackVersion()).andReturn(stackId);