You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rn...@apache.org on 2016/04/13 17:48:26 UTC
ambari git commit: AMBARI-15861. NullPointerException in cluster
deployment due to LogSearch PropertyProvider error. (rnettleton)
Repository: ambari
Updated Branches:
refs/heads/trunk e57576bf1 -> 4938e8479
AMBARI-15861. NullPointerException in cluster deployment due to LogSearch PropertyProvider error. (rnettleton)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4938e847
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4938e847
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4938e847
Branch: refs/heads/trunk
Commit: 4938e84794fae9b84acbd732199c7c4cdbd088dc
Parents: e57576b
Author: Bob Nettleton <rn...@hortonworks.com>
Authored: Wed Apr 13 10:19:07 2016 -0400
Committer: Bob Nettleton <rn...@hortonworks.com>
Committed: Wed Apr 13 11:43:14 2016 -0400
----------------------------------------------------------------------
.../logging/LoggingSearchPropertyProvider.java | 49 ++++++-----
.../LoggingSearchPropertyProviderTest.java | 89 ++++++++++++++++++++
2 files changed, 115 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/4938e847/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
index 6b4a8a4..2d2ef18 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
@@ -93,30 +93,33 @@ public class LoggingSearchPropertyProvider implements PropertyProvider {
LoggingRequestHelper requestHelper =
requestHelperFactory.getHelper(controller, clusterName);
- // send query to obtain logging metadata
- Set<String> logFileNames =
- requestHelper.sendGetLogFileNamesRequest(mappedComponentNameForLogSearch, hostName);
-
- if ((logFileNames != null) && (!logFileNames.isEmpty())) {
- loggingInfo.setComponentName(mappedComponentNameForLogSearch);
- List<LogFileDefinitionInfo> listOfFileDefinitions =
- new LinkedList<LogFileDefinitionInfo>();
-
- for (String fileName : logFileNames) {
- // generate the URIs that can be used by clients to obtain search results/tail log results/etc
- final String searchEngineURI = controller.getAmbariServerURI(getFullPathToSearchEngine(clusterName));
- final String logFileTailURI = createLogFileTailURI(searchEngineURI, mappedComponentNameForLogSearch, hostName);
- // all log files are assumed to be service types for now
- listOfFileDefinitions.add(new LogFileDefinitionInfo(fileName, LogFileType.SERVICE, searchEngineURI, logFileTailURI));
+ // if LogSearch service is available
+ if (requestHelper != null) {
+ // send query to obtain logging metadata
+ Set<String> logFileNames =
+ requestHelper.sendGetLogFileNamesRequest(mappedComponentNameForLogSearch, hostName);
+
+ if ((logFileNames != null) && (!logFileNames.isEmpty())) {
+ loggingInfo.setComponentName(mappedComponentNameForLogSearch);
+ List<LogFileDefinitionInfo> listOfFileDefinitions =
+ new LinkedList<LogFileDefinitionInfo>();
+
+ for (String fileName : logFileNames) {
+ // generate the URIs that can be used by clients to obtain search results/tail log results/etc
+ final String searchEngineURI = controller.getAmbariServerURI(getFullPathToSearchEngine(clusterName));
+ final String logFileTailURI = createLogFileTailURI(searchEngineURI, mappedComponentNameForLogSearch, hostName);
+ // all log files are assumed to be service types for now
+ listOfFileDefinitions.add(new LogFileDefinitionInfo(fileName, LogFileType.SERVICE, searchEngineURI, logFileTailURI));
+ }
+
+ loggingInfo.setListOfLogFileDefinitions(listOfFileDefinitions);
+
+ LOG.info("Adding logging info for component name = " + componentName + " on host name = " + hostName);
+ // add the logging metadata for this host component
+ resource.setProperty("logging", loggingInfo);
+ } else {
+ LOG.error("Error occurred while making request to LogSearch service, unable to populate logging properties on this resource");
}
-
- loggingInfo.setListOfLogFileDefinitions(listOfFileDefinitions);
-
- LOG.info("Adding logging info for component name = " + componentName + " on host name = " + hostName);
- // add the logging metadata for this host component
- resource.setProperty("logging", loggingInfo);
- } else {
- LOG.error("Error occurred while making request to LogSearch service, unable to populate logging properties on this resource");
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/4938e847/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
index 19c0756..b360a49 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java
@@ -167,4 +167,93 @@ public class LoggingSearchPropertyProviderTest {
mockSupport.verifyAll();
}
+ @Test
+ public void testCheckWhenLogSearchNotAvailable() throws Exception {
+
+ final String expectedStackName = "HDP";
+ final String expectedStackVersion = "2.4";
+ final String expectedComponentName = "NAMENODE";
+ final String expectedServiceName = "HDFS";
+ final String expectedLogSearchComponentName = "hdfs_namenode";
+
+ EasyMockSupport mockSupport = new EasyMockSupport();
+
+ Resource resourceMock =
+ mockSupport.createMock(Resource.class);
+ expect(resourceMock.getPropertyValue(PropertyHelper.getPropertyId("HostRoles", "component_name"))).andReturn(expectedComponentName).atLeastOnce();
+ expect(resourceMock.getPropertyValue(PropertyHelper.getPropertyId("HostRoles", "host_name"))).andReturn("c6401.ambari.apache.org").atLeastOnce();
+ expect(resourceMock.getPropertyValue(PropertyHelper.getPropertyId("HostRoles", "cluster_name"))).andReturn("clusterone").atLeastOnce();
+
+ LoggingRequestHelperFactory helperFactoryMock =
+ mockSupport.createMock(LoggingRequestHelperFactory.class);
+
+ Request requestMock =
+ mockSupport.createMock(Request.class);
+
+ Predicate predicateMock =
+ mockSupport.createMock(Predicate.class);
+
+ LoggingSearchPropertyProvider.ControllerFactory factoryMock =
+ mockSupport.createMock(LoggingSearchPropertyProvider.ControllerFactory.class);
+
+ AmbariManagementController controllerMock =
+ mockSupport.createMock(AmbariManagementController.class);
+
+ AmbariMetaInfo metaInfoMock =
+ mockSupport.createMock(AmbariMetaInfo.class);
+
+ Clusters clustersMock =
+ mockSupport.createMock(Clusters.class);
+
+ Cluster clusterMock =
+ mockSupport.createMock(Cluster.class);
+
+ StackId stackIdMock =
+ mockSupport.createMock(StackId.class);
+
+ ComponentInfo componentInfoMock =
+ mockSupport.createMock(ComponentInfo.class);
+
+ LogDefinition logDefinitionMock =
+ mockSupport.createMock(LogDefinition.class);
+
+ expect(factoryMock.getAmbariManagementController()).andReturn(controllerMock);
+ expect(controllerMock.getAmbariMetaInfo()).andReturn(metaInfoMock).atLeastOnce();
+ expect(controllerMock.getClusters()).andReturn(clustersMock).atLeastOnce();
+ expect(clustersMock.getCluster("clusterone")).andReturn(clusterMock).atLeastOnce();
+ expect(stackIdMock.getStackName()).andReturn(expectedStackName).atLeastOnce();
+ expect(stackIdMock.getStackVersion()).andReturn(expectedStackVersion).atLeastOnce();
+ expect(clusterMock.getCurrentStackVersion()).andReturn(stackIdMock).atLeastOnce();
+
+ expect(metaInfoMock.getComponentToService(expectedStackName, expectedStackVersion, expectedComponentName)).andReturn(expectedServiceName).atLeastOnce();
+ expect(metaInfoMock.getComponent(expectedStackName, expectedStackVersion, expectedServiceName, expectedComponentName)).andReturn(componentInfoMock).atLeastOnce();
+
+ // simulate the case when LogSearch is not deployed, or is not available for some reason
+ expect(helperFactoryMock.getHelper(controllerMock, "clusterone")).andReturn(null).atLeastOnce();
+
+ expect(componentInfoMock.getLogs()).andReturn(Collections.singletonList(logDefinitionMock)).atLeastOnce();
+ expect(logDefinitionMock.getLogId()).andReturn(expectedLogSearchComponentName).atLeastOnce();
+
+ mockSupport.replayAll();
+
+ PropertyProvider propertyProvider =
+ new LoggingSearchPropertyProvider(helperFactoryMock, factoryMock);
+
+
+ // execute the populate resources method, verify that no exceptions occur, due to
+ // the LogSearch helper not being available
+ Set<Resource> returnedResources =
+ propertyProvider.populateResources(Collections.singleton(resourceMock), requestMock, predicateMock);
+
+ // verify that the set of resources has not changed in size
+ assertEquals("Returned resource set was of an incorrect size",
+ 1, returnedResources.size());
+
+ // verify that the single resource passed in was returned
+ assertSame("Returned resource was not the expected instance.",
+ resourceMock, returnedResources.iterator().next());
+
+ mockSupport.verifyAll();
+ }
+
}