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);