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 {