You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by vb...@apache.org on 2015/01/22 16:23:03 UTC
ambari git commit: AMBARI-9266. When multiple Oozie servers installed
and one of them stopped, service icon is red.(vbrodetskyi)
Repository: ambari
Updated Branches:
refs/heads/trunk 603775cfe -> e14f3530f
AMBARI-9266. When multiple Oozie servers installed and one of them stopped, service icon is red.(vbrodetskyi)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e14f3530
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e14f3530
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e14f3530
Branch: refs/heads/trunk
Commit: e14f3530fb7fbf86af475221ae1141e6032a43a8
Parents: 603775c
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Sat Jan 10 13:07:55 2015 +0200
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Sat Jan 10 13:07:55 2015 +0200
----------------------------------------------------------------------
.../internal/ServiceResourceProvider.java | 97 ++++++++++++++++----
.../internal/ServiceResourceProviderTest.java | 96 +++++++++++++++++++
2 files changed, 177 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/e14f3530/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 ac2a3bb..e11accb 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
@@ -17,19 +17,9 @@
*/
package org.apache.ambari.server.controller.internal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
+import com.google.inject.assistedinject.Assisted;
+import com.google.inject.assistedinject.AssistedInject;
+import com.google.inject.persist.Transactional;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ClusterNotFoundException;
import org.apache.ambari.server.DuplicateResourceException;
@@ -70,9 +60,18 @@ import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.State;
import org.apache.commons.lang.StringUtils;
-import com.google.inject.assistedinject.Assisted;
-import com.google.inject.assistedinject.AssistedInject;
-import com.google.inject.persist.Transactional;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Resource provider for service resources.
@@ -110,6 +109,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
serviceStateMap.put("HBASE", new HBaseServiceState());
serviceStateMap.put("FLUME", new FlumeServiceState());
serviceStateMap.put("HIVE", new HiveServiceState());
+ serviceStateMap.put("OOZIE", new OozieServiceState());
}
private static final ServiceState DEFAULT_SERVICE_STATE = new DefaultServiceState();
@@ -1055,6 +1055,71 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
}
/**
+ * Calculator of Oozie service state.
+ */
+ protected static class OozieServiceState implements ServiceState {
+
+ @Override
+ public State getState(AmbariManagementController controller,String clusterName, String serviceName) {
+ AmbariMetaInfo ambariMetaInfo = controller.getAmbariMetaInfo();
+ Clusters clusters = controller.getClusters();
+
+ if (clusterName != null && clusterName.length() > 0) {
+ try {
+ Cluster cluster = clusters.getCluster(clusterName);
+ if (cluster != null) {
+ StackId stackId = cluster.getDesiredStackVersion();
+
+ ServiceComponentHostRequest request = new ServiceComponentHostRequest(clusterName,
+ serviceName, null, null, null);
+
+ Set<ServiceComponentHostResponse> hostComponentResponses =
+ controller.getHostComponents(Collections.singleton(request));
+
+ int oozieServerActiveCount = 0;
+ State nonStartedState = null;
+
+ for (ServiceComponentHostResponse hostComponentResponse : hostComponentResponses ) {
+ try {
+ ComponentInfo componentInfo = ambariMetaInfo.getComponent(stackId.getStackName(),
+ stackId.getStackVersion(), hostComponentResponse.getServiceName(),
+ hostComponentResponse.getComponentName());
+
+ if (componentInfo.isMaster()) {
+ State state = getHostComponentState(hostComponentResponse);
+
+ switch (state) {
+ case STARTED:
+ case DISABLED:
+ String componentName = hostComponentResponse.getComponentName();
+ if (componentName.equals("OOZIE_SERVER")) {
+ ++oozieServerActiveCount;
+ }
+ break;
+ default:
+ nonStartedState = state;
+ }
+ }
+ } catch (ObjectNotFoundException e) {
+ // component doesn't exist, nothing to do
+ }
+ }
+
+ // should have state INSTALLED when there is no active OOZIE_SERVER
+ if (oozieServerActiveCount > 0) {
+ return State.STARTED;
+ }
+ return nonStartedState == null ? State.INSTALLED : nonStartedState;
+ }
+ } catch (AmbariException e) {
+ LOG.error("Can't determine service state.", e);
+ }
+ }
+ return State.UNKNOWN;
+ }
+ }
+
+ /**
* Calculator of HIVE service state.
*/
protected static class HiveServiceState implements ServiceState {
http://git-wip-us.apache.org/repos/asf/ambari/blob/e14f3530/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 0c145fb..210c6a4 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
@@ -1127,6 +1127,102 @@ public class ServiceResourceProviderTest {
}
@Test
+ public void testOozieServiceState_STARTED() 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 = createNiceMock(ComponentInfo.class);
+
+ ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse("C1", "OOZIE", "OOZIE_SERVER", "Host100", "STARTED", "", null, null, null);
+ ServiceComponentHostResponse shr2 = new ServiceComponentHostResponse("C1", "OOZIE", "OOZIE_SERVER", "Host101", "INSTALLED", "", null, null, null);
+ ServiceComponentHostResponse shr3 = new ServiceComponentHostResponse("C1", "OOZIE", "OOZIE_CLIENT", "Host100", "STARTED", "", null, null, null);
+
+ Set<ServiceComponentHostResponse> responses = new LinkedHashSet<ServiceComponentHostResponse>();
+ responses.add(shr1);
+ responses.add(shr2);
+ responses.add(shr3);
+
+ // 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);
+
+ expect(stackId.getStackName()).andReturn("S1").anyTimes();
+ expect(stackId.getStackVersion()).andReturn("V1").anyTimes();
+
+
+ expect(ambariMetaInfo.getComponent((String) anyObject(), (String) anyObject(),
+ (String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes();
+
+ expect(componentInfo.isMaster()).andReturn(true);
+ expect(componentInfo.isMaster()).andReturn(true);
+ expect(componentInfo.isMaster()).andReturn(false);
+
+ // replay
+ replay(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo);
+
+ ServiceResourceProvider.ServiceState serviceState = new ServiceResourceProvider.OozieServiceState();
+
+ State state = serviceState.getState(managementController, "C1", "OOZIE");
+ Assert.assertEquals(State.STARTED, state);
+
+ // verify
+ verify(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo);
+ }
+
+ @Test
+ public void testOozieServiceState_INSTALLED() 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 = createNiceMock(ComponentInfo.class);
+
+ ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse("C1", "OOZIE", "OOZIE_SERVER", "Host100", "INSTALLED", "", null, null, null);
+ ServiceComponentHostResponse shr2 = new ServiceComponentHostResponse("C1", "OOZIE", "OOZIE_SERVER", "Host101", "INSTALLED", "", null, null, null);
+ ServiceComponentHostResponse shr3 = new ServiceComponentHostResponse("C1", "OOZIE", "OOZIE_CLIENT", "Host100", "STARTED", "", null, null, null);
+
+ Set<ServiceComponentHostResponse> responses = new LinkedHashSet<ServiceComponentHostResponse>();
+ responses.add(shr1);
+ responses.add(shr2);
+ responses.add(shr3);
+
+ // 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);
+
+ expect(stackId.getStackName()).andReturn("S1").anyTimes();
+ expect(stackId.getStackVersion()).andReturn("V1").anyTimes();
+
+
+ expect(ambariMetaInfo.getComponent((String) anyObject(), (String) anyObject(),
+ (String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes();
+
+ expect(componentInfo.isMaster()).andReturn(true);
+ expect(componentInfo.isMaster()).andReturn(true);
+ expect(componentInfo.isMaster()).andReturn(false);
+
+ // replay
+ replay(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo);
+
+ ServiceResourceProvider.ServiceState serviceState = new ServiceResourceProvider.OozieServiceState();
+
+ State state = serviceState.getState(managementController, "C1", "OOZIE");
+ Assert.assertEquals(State.INSTALLED, state);
+
+ // verify
+ verify(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo);
+ }
+
+ @Test
public void testHBaseServiceState_STARTED() throws Exception{
AmbariManagementController managementController = createMock(AmbariManagementController.class);
Clusters clusters = createNiceMock(Clusters.class);