Browse Source

AMBARI-20845. Include cluster filter in every Log Search request in Ambari server. (rnettleton)

Bob Nettleton 8 years ago
parent
commit
2daa20e1f6

+ 6 - 0
ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java

@@ -99,6 +99,8 @@ public class LoggingRequestHelperImpl implements LoggingRequestHelper {
 
   private static final int DEFAULT_LOGSEARCH_READ_TIMEOUT_IN_MILLISECONDS = 5000;
 
+  private static final String LOGSEARCH_CLUSTERS_QUERY_PARAMETER_NAME = "clusters";
+
   private static AtomicInteger errorLogCounterForLogSearchConnectionExceptions = new AtomicInteger(0);
 
   private final String hostName;
@@ -382,6 +384,10 @@ public class LoggingRequestHelperImpl implements LoggingRequestHelper {
     URIBuilder uriBuilder = createBasicURI(scheme);
     uriBuilder.setPath(LOGSEARCH_QUERY_PATH);
 
+    // set the current cluster name, in case this LogSearch service supports data
+    // for multiple clusters
+    uriBuilder.addParameter(LOGSEARCH_CLUSTERS_QUERY_PARAMETER_NAME, cluster.getClusterName());
+
     // add any query strings specified
     for (String key : queryParameters.keySet()) {
       uriBuilder.addParameter(key, queryParameters.get(key));

+ 9 - 0
ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImplTest.java

@@ -154,6 +154,7 @@ public class LoggingRequestHelperImplTest {
     Capture<HttpURLConnection> captureURLConnectionForAuthentication = new Capture<HttpURLConnection>();
 
     expect(clusterMock.getDesiredConfigByType("logsearch-admin-json")).andReturn(adminPropertiesConfigMock).atLeastOnce();
+    expect(clusterMock.getClusterName()).andReturn("clusterone").atLeastOnce();
     expect(adminPropertiesConfigMock.getProperties()).andReturn(testConfigProperties).atLeastOnce();
     expect(networkConnectionMock.readQueryResponseFromServer(capture(captureURLConnection))).andReturn(new StringBuffer(TEST_JSON_INPUT_TWO_LIST_ENTRIES)).atLeastOnce();
 
@@ -181,6 +182,8 @@ public class LoggingRequestHelperImplTest {
       "http", httpURLConnection.getURL().getProtocol());
     assertEquals("URLConnection did not have the expected method set",
       "GET", httpURLConnection.getRequestMethod());
+    assertTrue("URLConnection's URL did not have the expected query parameter string",
+      httpURLConnection.getURL().getQuery().contains("clusters=clusterone"));
 
     assertSame("HttpUrlConnection instances passed into NetworkConnection mock should have been the same instance",
       httpURLConnection, captureURLConnectionForAuthentication.getValue());
@@ -426,6 +429,7 @@ public class LoggingRequestHelperImplTest {
     Capture<HttpURLConnection> captureURLConnectionForAuthentication = new Capture<HttpURLConnection>();
 
     expect(clusterMock.getDesiredConfigByType("logsearch-admin-json")).andReturn(adminPropertiesConfigMock).atLeastOnce();
+    expect(clusterMock.getClusterName()).andReturn("clusterone").atLeastOnce();
     expect(adminPropertiesConfigMock.getProperties()).andReturn(testConfigProperties).atLeastOnce();
     expect(networkConnectionMock.readQueryResponseFromServer(capture(captureURLConnection))).andReturn(new StringBuffer(TEST_JSON_INPUT_TWO_LIST_ENTRIES)).atLeastOnce();
 
@@ -453,6 +457,8 @@ public class LoggingRequestHelperImplTest {
       "http", httpURLConnection.getURL().getProtocol());
     assertEquals("URLConnection did not have the expected method set",
       "GET", httpURLConnection.getRequestMethod());
+    assertTrue("URLConnection's URL did not have the expected query parameter string",
+      httpURLConnection.getURL().getQuery().contains("clusters=clusterone"));
 
     assertSame("HttpUrlConnection instances passed into NetworkConnection mock should have been the same instance",
       httpURLConnection, captureURLConnectionForAuthentication.getValue());
@@ -508,6 +514,7 @@ public class LoggingRequestHelperImplTest {
     Capture<HttpURLConnection> captureURLConnectionForAuthentication = new Capture<HttpURLConnection>();
 
     expect(clusterMock.getDesiredConfigByType("logsearch-admin-json")).andReturn(adminPropertiesConfigMock).atLeastOnce();
+    expect(clusterMock.getClusterName()).andReturn("clusterone").atLeastOnce();
     expect(adminPropertiesConfigMock.getProperties()).andReturn(testConfigProperties).atLeastOnce();
     expect(networkConnectionMock.readQueryResponseFromServer(capture(captureURLConnection))).andReturn(new StringBuffer(TEST_JSON_INPUT_NULL_LOG_LIST)).atLeastOnce();
 
@@ -535,6 +542,8 @@ public class LoggingRequestHelperImplTest {
       "http", httpURLConnection.getURL().getProtocol());
     assertEquals("URLConnection did not have the expected method set",
       "GET", httpURLConnection.getRequestMethod());
+    assertTrue("URLConnection's URL did not have the expected query parameter string",
+	       httpURLConnection.getURL().getQuery().contains("clusters=clusterone"));
 
     assertSame("HttpUrlConnection instances passed into NetworkConnection mock should have been the same instance",
       httpURLConnection, captureURLConnectionForAuthentication.getValue());