You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2014/09/10 17:30:18 UTC
git commit: AMBARI-7237. No start action for stopped service in MM
mode Stack 1.3 (dlysnichenko)
Repository: ambari
Updated Branches:
refs/heads/trunk dc15b7706 -> dcc00b69b
AMBARI-7237. No start action for stopped service in MM mode Stack 1.3 (dlysnichenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/dcc00b69
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/dcc00b69
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/dcc00b69
Branch: refs/heads/trunk
Commit: dcc00b69b3350729123cbf43dd80cf0da314bae6
Parents: dc15b77
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Tue Sep 9 16:50:18 2014 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Wed Sep 10 18:27:21 2014 +0300
----------------------------------------------------------------------
.../internal/ServiceResourceProvider.java | 14 ++-
.../internal/ServiceResourceProviderTest.java | 122 ++++++++++++++++++-
2 files changed, 133 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/dcc00b69/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
index aec91fd..31c6c37 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
@@ -981,11 +981,13 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
State masterState = null;
State clientState = null;
State otherState = null;
+ State maxMMState = null; // The worst state among components in MM
boolean hasDisabled = false;
boolean hasMaster = false;
boolean hasOther = false;
boolean hasClient = false;
+ boolean hasMM = false;
for (ServiceComponentHostResponse hostComponentResponse : hostComponentResponses ) {
ComponentInfo componentInfo = ambariMetaInfo.getComponentCategory(stackId.getStackName(),
@@ -999,10 +1001,17 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
boolean isInMaintenance = ! MaintenanceState.OFF.toString().
equals(hostComponentResponse.getMaintenanceState());
- if (state.equals(State.DISABLED) || isInMaintenance) {
+ if (state.equals(State.DISABLED)) {
hasDisabled = true;
}
+ if (isInMaintenance & !componentInfo.isClient()) {
+ hasMM = true;
+ if ( maxMMState == null || state.ordinal() > maxMMState.ordinal()) {
+ maxMMState = state;
+ }
+ }
+
if (componentInfo.isMaster()) {
if (state.equals(State.STARTED) || ! isInMaintenance) {
// We rely on master's state to determine service state
@@ -1037,7 +1046,8 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
return hasMaster ? masterState == null ? State.STARTED : masterState :
hasOther ? otherState == null ? State.STARTED : otherState :
hasClient ? clientState == null ? State.INSTALLED : clientState :
- hasDisabled ? State.DISABLED : State.UNKNOWN;
+ hasDisabled ? State.DISABLED :
+ hasMM ? maxMMState : State.UNKNOWN;
}
} catch (AmbariException e) {
LOG.error("Can't determine service state.", e);
http://git-wip-us.apache.org/repos/asf/ambari/blob/dcc00b69/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
index 7dbc38b..05f2e01 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
@@ -28,6 +28,7 @@ import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.isNull;
import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
import static org.easymock.EasyMock.verify;
import java.lang.reflect.Field;
@@ -1149,6 +1150,7 @@ public class ServiceResourceProviderTest {
ComponentInfo componentInfo = createNiceMock(ComponentInfo.class);
ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse("C1", "PIG", "PIG", "Host100", "INSTALLED", "", null, null, null);
+ shr1.setMaintenanceState(MaintenanceState.OFF.toString());
Set<ServiceComponentHostResponse> responses = new LinkedHashSet<ServiceComponentHostResponse>();
responses.add(shr1);
@@ -1191,6 +1193,7 @@ public class ServiceResourceProviderTest {
ComponentInfo componentInfo = createNiceMock(ComponentInfo.class);
ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse("C1", "PIG", "PIG", "Host100", "INSTALL_FAILED", "", null, null, null);
+ shr1.setMaintenanceState(MaintenanceState.OFF.toString());
Set<ServiceComponentHostResponse> responses = new LinkedHashSet<ServiceComponentHostResponse>();
responses.add(shr1);
@@ -1316,7 +1319,13 @@ public class ServiceResourceProviderTest {
expect(ambariMetaInfo.getComponentCategory((String) anyObject(), (String) anyObject(),
(String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes();
- expect(componentInfo.isMaster()).andReturn(true).times(2);
+ expect(componentInfo.isClient()).andReturn(false).anyTimes();
+ expect(componentInfo.isMaster()).andReturn(true);
+
+ expect(componentInfo.isClient()).andReturn(false).anyTimes();
+ expect(componentInfo.isMaster()).andReturn(true);
+
+ expect(componentInfo.isClient()).andReturn(false).anyTimes();
expect(componentInfo.isMaster()).andReturn(false);
expect(componentInfo.isClient()).andReturn(false);
@@ -1383,6 +1392,117 @@ public class ServiceResourceProviderTest {
}
+ @Test
+ @SuppressWarnings("unchecked")
+ /**
+ * Tests the case when all service components are in MM (so we base on MM
+ * components state when calculating entire service state)
+ */
+ public void testDefaultServiceState_All_Components_In_MM() throws Exception{
+ AmbariManagementController managementController = createMock(AmbariManagementController.class);
+ Clusters clusters = createNiceMock(Clusters.class);
+ Cluster cluster = createNiceMock(Cluster.class);
+ AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
+ StackId stackId = createNiceMock(StackId.class);
+ ComponentInfo componentInfo = createStrictMock(ComponentInfo.class);
+
+ /*
+ * Any component is started, all other are stopped - service is considered STARTED
+ */
+ ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse("C1", "YARN", "RESOURCEMANAGER", "Host100", "INSTALLED", "", null, null, null);
+ shr1.setMaintenanceState(MaintenanceState.ON.toString());
+ ServiceComponentHostResponse shr2 = new ServiceComponentHostResponse("C1", "YARN", "RESOURCEMANAGER", "Host101", "INSTALLED", "", null, null, null);
+ shr2.setMaintenanceState(MaintenanceState.ON.toString());
+ ServiceComponentHostResponse shr3 = new ServiceComponentHostResponse("C1", "YARN", "NODEMANAGER", "Host100", "STARTED", "", null, null, null);
+ shr3.setMaintenanceState(MaintenanceState.ON.toString());
+ ServiceComponentHostResponse shr4 = new ServiceComponentHostResponse("C1", "YARN", "YARN_CLIENT", "Host100", "INSTALLED", "", null, null, null);
+ shr4.setMaintenanceState(MaintenanceState.ON.toString());
+
+
+ Set<ServiceComponentHostResponse> responses = new LinkedHashSet<ServiceComponentHostResponse>();
+ responses.add(shr1);
+ responses.add(shr2);
+ responses.add(shr3);
+ responses.add(shr4);
+
+ // set expectations
+ expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+ expect(managementController.getClusters()).andReturn(clusters).anyTimes();
+ expect(clusters.getCluster("C1")).andReturn(cluster).anyTimes();
+ expect(managementController.getHostComponents((Set<ServiceComponentHostRequest>) anyObject())).andReturn(responses).anyTimes();
+ expect(cluster.getDesiredStackVersion()).andReturn(stackId).anyTimes();
+
+ expect(stackId.getStackName()).andReturn("S1").anyTimes();
+ expect(stackId.getStackVersion()).andReturn("V1").anyTimes();
+
+
+ expect(ambariMetaInfo.getComponentCategory((String) anyObject(), (String) anyObject(),
+ (String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes();
+
+ expect(componentInfo.isClient()).andReturn(false);
+ expect(componentInfo.isMaster()).andReturn(true);
+
+ expect(componentInfo.isClient()).andReturn(false);
+ expect(componentInfo.isMaster()).andReturn(true);
+
+ expect(componentInfo.isClient()).andReturn(false);
+ expect(componentInfo.isMaster()).andReturn(false);
+ expect(componentInfo.isClient()).andReturn(false);
+
+ expect(componentInfo.isClient()).andReturn(true);
+ expect(componentInfo.isMaster()).andReturn(false);
+
+ expect(componentInfo.isClient()).andReturn(true).times(2);
+
+ // replay
+ replay(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo);
+
+ ServiceResourceProvider.ServiceState serviceState = new ServiceResourceProvider.DefaultServiceState();
+
+ State state = serviceState.getState(managementController, "C1", "YARN");
+ Assert.assertEquals(State.STARTED, state);
+
+ /*
+ * All components are stopped, service is considered INSTALLED
+ */
+ reset(componentInfo);
+
+ responses.clear();
+ shr1 = new ServiceComponentHostResponse("C1", "YARN", "RESOURCEMANAGER", "Host100", "INSTALLED", "", null, null, null);
+ shr1.setMaintenanceState(MaintenanceState.ON.toString());
+ shr2 = new ServiceComponentHostResponse("C1", "YARN", "RESOURCEMANAGER", "Host101", "INSTALLED", "", null, null, null);
+ shr2.setMaintenanceState(MaintenanceState.ON.toString());
+ shr3 = new ServiceComponentHostResponse("C1", "YARN", "NODEMANAGER", "Host100", "INSTALLED", "", null, null, null);
+ shr3.setMaintenanceState(MaintenanceState.ON.toString());
+ shr4 = new ServiceComponentHostResponse("C1", "YARN", "YARN_CLIENT", "Host100", "INSTALLED", "", null, null, null);
+ shr4.setMaintenanceState(MaintenanceState.ON.toString());
+ responses.add(shr1);
+ responses.add(shr2);
+ responses.add(shr3);
+ responses.add(shr4);
+
+ expect(componentInfo.isClient()).andReturn(false);
+ expect(componentInfo.isMaster()).andReturn(true);
+
+ expect(componentInfo.isClient()).andReturn(false);
+ expect(componentInfo.isMaster()).andReturn(true);
+
+ expect(componentInfo.isClient()).andReturn(false);
+ expect(componentInfo.isMaster()).andReturn(false);
+ expect(componentInfo.isClient()).andReturn(false);
+
+ expect(componentInfo.isClient()).andReturn(true);
+ expect(componentInfo.isMaster()).andReturn(false);
+
+ expect(componentInfo.isClient()).andReturn(true).times(2);
+
+ replay(componentInfo);
+
+ state = serviceState.getState(managementController, "C1", "YARN");
+ Assert.assertEquals(State.INSTALLED, state);
+ }
+
+
/**
* This factory method creates default MaintenanceStateHelper mock.
* It's useful in most cases (when we don't care about Maintenance State)