This is an automated email from the ASF dual-hosted git repository.
asnaik pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push:
new f6aec32 AMBARI-25327 : Prevent NPE for bindNotificationDispatchers
and getServiceConfigVersionRequest (#3037)
f6aec32 is described below
commit f6aec3286da30d42c7faef2e84e88b968bcdf040
Author: Viraj Jasani <[email protected]>
AuthorDate: Wed Oct 16 13:05:11 2019 +0530
AMBARI-25327 : Prevent NPE for bindNotificationDispatchers and
getServiceConfigVersionRequest (#3037)
* AMBARI-25327 : Prevent NPE for bindNotificationDispatchers and
getServiceConfigVersionRequest
* minor change
* logging null classname instance
---
.../ambari/server/controller/ControllerModule.java | 41 ++++++++++++----------
.../internal/ClusterResourceProvider.java | 24 +++++++++----
2 files changed, 40 insertions(+), 25 deletions(-)
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
index 114d671..f587c47 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
@@ -666,25 +666,30 @@ public class ControllerModule extends AbstractModule {
// the dispatch factory
for (BeanDefinition beanDefinition : beanDefinitions) {
String className = beanDefinition.getBeanClassName();
- Class<?> clazz = ClassUtils.resolveClassName(className,
- ClassUtils.getDefaultClassLoader());
-
- try {
- NotificationDispatcher dispatcher;
- if (clazz.equals(AmbariSNMPDispatcher.class)) {
- dispatcher = (NotificationDispatcher)
clazz.getConstructor(Integer.class).newInstance(configuration.getAmbariSNMPUdpBindPort());
- } else if (clazz.equals(SNMPDispatcher.class)) {
- dispatcher = (NotificationDispatcher)
clazz.getConstructor(Integer.class).newInstance(configuration.getSNMPUdpBindPort());
- } else {
- dispatcher = (NotificationDispatcher) clazz.newInstance();
+ if (className != null) {
+ Class<?> clazz = ClassUtils.resolveClassName(className,
+ ClassUtils.getDefaultClassLoader());
+ try {
+ NotificationDispatcher dispatcher;
+ if (clazz.equals(AmbariSNMPDispatcher.class)) {
+ dispatcher = (NotificationDispatcher)
clazz.getConstructor(Integer.class)
+ .newInstance(configuration.getAmbariSNMPUdpBindPort());
+ } else if (clazz.equals(SNMPDispatcher.class)) {
+ dispatcher = (NotificationDispatcher)
clazz.getConstructor(Integer.class)
+ .newInstance(configuration.getSNMPUdpBindPort());
+ } else {
+ dispatcher = (NotificationDispatcher) clazz.newInstance();
+ }
+ dispatchFactory.register(dispatcher.getType(), dispatcher);
+ bind((Class<NotificationDispatcher>) clazz).toInstance(dispatcher);
+ LOG.info("Binding and registering notification dispatcher {}",
clazz);
+ } catch (Exception exception) {
+ LOG.error("Unable to bind and register notification dispatcher {}",
+ clazz, exception);
}
- dispatchFactory.register(dispatcher.getType(), dispatcher);
- bind((Class<NotificationDispatcher>) clazz).toInstance(dispatcher);
-
- LOG.info("Binding and registering notification dispatcher {}", clazz);
- } catch (Exception exception) {
- LOG.error("Unable to bind and register notification dispatcher {}",
- clazz, exception);
+ } else {
+ LOG.error("Binding and registering notification dispatcher is not
possible for" +
+ " beanDefinition: {} in the absence of className", beanDefinition);
}
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
index 18ed30a..1c62f9c 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
@@ -466,16 +466,26 @@ public class ClusterResourceProvider extends
AbstractControllerResourceProvider
String absCategory = PropertyHelper.getPropertyCategory(entry.getKey());
String propName = PropertyHelper.getPropertyName(entry.getKey());
- if (absCategory.startsWith(parentCategory +
"/desired_service_config_version")) {
+ if (absCategory != null &&
+ absCategory.startsWith(parentCategory +
"/desired_service_config_version")) {
serviceConfigVersionRequest =
(serviceConfigVersionRequest ==null ) ? new
ServiceConfigVersionRequest() : serviceConfigVersionRequest;
- if (propName.equals("service_name"))
-
serviceConfigVersionRequest.setServiceName(entry.getValue().toString());
- else if (propName.equals("service_config_version"))
-
serviceConfigVersionRequest.setVersion(Long.valueOf(entry.getValue().toString()));
- else if (propName.equals("service_config_version_note")) {
- serviceConfigVersionRequest.setNote(entry.getValue().toString());
+ if (propName != null) {
+ switch (propName) {
+ case "service_name": {
+
serviceConfigVersionRequest.setServiceName(entry.getValue().toString());
+ break;
+ }
+ case "service_config_version": {
+
serviceConfigVersionRequest.setVersion(Long.valueOf(entry.getValue().toString()));
+ break;
+ }
+ case "service_config_version_note": {
+ serviceConfigVersionRequest.setNote(entry.getValue().toString());
+ break;
+ }
+ }
}
}
}