Jonathan Hurley created AMBARI-18296:
----------------------------------------
Summary: Database Consistency Check Fails With NPE With Missing
Service From Stack
Key: AMBARI-18296
URL: https://issues.apache.org/jira/browse/AMBARI-18296
Project: Ambari
Issue Type: Bug
Components: ambari-server
Affects Versions: 2.4.0
Reporter: Jonathan Hurley
Priority: Critical
Fix For: trunk
The database consistency checker can fail if a service configuration exists for
a service which is no longer on the current stack:
{code}
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)
{code}
It seems like what happens is this query returns a service which is not defined
in the current stack:
{code}
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
{code}
Problem area of code:
{code:title=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);
}
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)