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 2014/12/11 20:20:11 UTC
ambari git commit: AMBARI-8664. Hive service become "red" even if one
of hive metastores is down. In hive metastore ha mode.(vbrodetskyi)
Repository: ambari
Updated Branches:
refs/heads/trunk 4d7c2e4f2 -> d613ef522
AMBARI-8664. Hive service become "red" even if one of hive metastores is down. In hive metastore ha mode.(vbrodetskyi)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d613ef52
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d613ef52
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d613ef52
Branch: refs/heads/trunk
Commit: d613ef5226db85289393537c58924aeb4f8d5ef3
Parents: 4d7c2e4
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Thu Dec 11 21:19:38 2014 +0200
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Thu Dec 11 21:19:38 2014 +0200
----------------------------------------------------------------------
.../internal/ServiceResourceProvider.java | 81 ++++++++++++++++++++
1 file changed, 81 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/d613ef52/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 8a05331..ac2a3bb 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
@@ -109,6 +109,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
serviceStateMap.put("HDFS", new HDFSServiceState());
serviceStateMap.put("HBASE", new HBaseServiceState());
serviceStateMap.put("FLUME", new FlumeServiceState());
+ serviceStateMap.put("HIVE", new HiveServiceState());
}
private static final ServiceState DEFAULT_SERVICE_STATE = new DefaultServiceState();
@@ -1054,6 +1055,86 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
}
/**
+ * Calculator of HIVE service state.
+ */
+ protected static class HiveServiceState 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 activeHiveMetastoreComponentCount = 0;
+ State nonStartedState = null;
+ boolean embeddedMysqlComponentExists = false;
+ boolean hiveServerComponentStarted = false;
+ boolean webHcatComponentStarted = false;
+ boolean mysqlComponentStarted = false;
+
+ for (ServiceComponentHostResponse hostComponentResponse : hostComponentResponses ) {
+ try {
+ ComponentInfo componentInfo = ambariMetaInfo.getComponent(stackId.getStackName(),
+ stackId.getStackVersion(), hostComponentResponse.getServiceName(),
+ hostComponentResponse.getComponentName());
+
+ if (componentInfo.isMaster()) {
+ State state = getHostComponentState(hostComponentResponse);
+
+ String componentName = hostComponentResponse.getComponentName();
+ if (componentName.equals("MYSQL_SERVER")) {
+ embeddedMysqlComponentExists = true;
+ }
+
+ switch (state) {
+ case STARTED:
+ case DISABLED:
+ if (componentName.equals("HIVE_METASTORE")) {
+ ++activeHiveMetastoreComponentCount;
+ } else if (componentName.equals("HIVE_SERVER")) {
+ hiveServerComponentStarted = true;
+ } else if (componentName.equals("MYSQL_SERVER")) {
+ mysqlComponentStarted = true;
+ } else if (componentName.equals("WEBHCAT_SERVER")) {
+ webHcatComponentStarted = true;
+ }
+ break;
+ default:
+ nonStartedState = state;
+ }
+ }
+ } catch (ObjectNotFoundException e) {
+ // component doesn't exist, nothing to do
+ }
+ }
+
+ if (nonStartedState == null ||
+ (hiveServerComponentStarted && webHcatComponentStarted && activeHiveMetastoreComponentCount > 0 &&
+ (embeddedMysqlComponentExists ? mysqlComponentStarted : true))) {
+ 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 HDFS service state.
*/
protected static class HDFSServiceState implements ServiceState {