Details
-
Bug
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
2.4.0
-
None
Description
The database consistency checker can fail if a service configuration exists for a service which is no longer on the current stack:
2016-08-31 21:52:28,082 INFO - ******************************* Check database started ******************************* 2016-08-31 21:52:31,647 INFO - Checking for configs not mapped to any cluster 2016-08-31 21:52:31,653 INFO - Checking for configs selected more than once 2016-08-31 21:52:31,655 INFO - Checking for hosts without state 2016-08-31 21:52:31,657 INFO - Checking host component states count equals host component desired states count 2016-08-31 21:52:31,660 INFO - Checking services and their configs 2016-08-31 21:52:33,669 ERROR - Unexpected error, database check failed java.lang.NullPointerException at org.apache.ambari.server.checks.DatabaseConsistencyCheckHelper.checkServiceConfigs(DatabaseConsistencyCheckHelper.java:543) at org.apache.ambari.server.checks.DatabaseConsistencyChecker.main(DatabaseConsistencyChecker.java:115)
It seems like what happens is this query returns a service which is not defined in the current stack:
SELECT c.cluster_name, cs.service_name, cc.type_name, sc.version FROM clusterservices cs JOIN serviceconfig sc ON cs.service_name = sc.service_name AND cs.cluster_id = sc.cluster_id JOIN serviceconfigmapping scm ON sc.service_config_id = scm.service_config_id JOIN clusterconfig cc ON scm.config_id = cc.config_id AND sc.cluster_id = cc.cluster_id JOIN clusters c ON cc.cluster_id = c.cluster_id AND sc.stack_id = c.desired_stack_id WHERE sc.group_id IS NULL AND sc.service_config_id = (SELECT MAX(service_config_id) FROM serviceconfig sc2 WHERE sc2.service_name = sc.service_name AND sc2.cluster_id = sc.cluster_id) GROUP BY c.cluster_name, cs.service_name, cc.type_name, sc.version
Problem area of code:
serviceInfo is null
for (String serviceName : serviceNames) { ServiceInfo serviceInfo = serviceInfoMap.get(serviceName); Set<String> configTypes = serviceInfo.getConfigTypeAttributes().keySet(); for (String configType : configTypes) { stackServiceConfigs.put(serviceName, configType); } }
Attachments
Attachments
Issue Links
- links to