Parcourir la source

AMBARI-18296. Database Consistency Check Fails With NPE With Missing Service From Stack.(vbrodetskyi)

Vitaly Brodetskyi il y a 9 ans
Parent
commit
5ec8d4b094

+ 9 - 3
ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java

@@ -540,9 +540,15 @@ public class DatabaseConsistencyCheckHelper {
         Map<String, ServiceInfo> serviceInfoMap = ambariMetaInfo.getServices(stackName, stackVersion);
         for (String serviceName : serviceNames) {
           ServiceInfo serviceInfo = serviceInfoMap.get(serviceName);
-          Set<String> configTypes = serviceInfo.getConfigTypeAttributes().keySet();
-          for (String configType : configTypes) {
-            stackServiceConfigs.put(serviceName, configType);
+          if (serviceInfo != null) {
+            Set<String> configTypes = serviceInfo.getConfigTypeAttributes().keySet();
+            for (String configType : configTypes) {
+              stackServiceConfigs.put(serviceName, configType);
+            }
+          } else {
+            LOG.warn("Service {} is not available for stack {} in cluster {}",
+                    serviceName, stackName + "-" + stackVersion, clusterName);
+            warningAvailable = true;
           }
         }
 

+ 3 - 3
ambari-server/src/test/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelperTest.java

@@ -249,9 +249,9 @@ public class DatabaseConsistencyCheckHelperTest {
 
     expect(mockHDFSServiceInfo.getConfigTypeAttributes()).andReturn(configAttributes);
     expect(mockAmbariMetainfo.getServices("HDP", "2.2")).andReturn(services);
-    expect(serviceConfigResultSet.next()).andReturn(true);
-    expect(serviceConfigResultSet.getString("service_name")).andReturn("HDFS");
-    expect(serviceConfigResultSet.getString("type_name")).andReturn("core-site");
+    expect(serviceConfigResultSet.next()).andReturn(true).times(2);
+    expect(serviceConfigResultSet.getString("service_name")).andReturn("HDFS").andReturn("HBASE");
+    expect(serviceConfigResultSet.getString("type_name")).andReturn("core-site").andReturn("hbase-env");
     expect(stackResultSet.next()).andReturn(true);
     expect(stackResultSet.getString("stack_name")).andReturn("HDP");
     expect(stackResultSet.getString("stack_version")).andReturn("2.2");