You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2014/08/29 14:51:08 UTC

git commit: AMBARI-7064. When make single PUT request for stop/start service and turn on/of MM two operations with same name is in bgo popup (dlysnichenko)

Repository: ambari
Updated Branches:
  refs/heads/trunk c485326e9 -> b22ce6c33


AMBARI-7064. When make single PUT request for stop/start service and turn on/of MM two operations with same name is in bgo popup (dlysnichenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b22ce6c3
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b22ce6c3
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b22ce6c3

Branch: refs/heads/trunk
Commit: b22ce6c33cad85fcb40b4337b60105391f3b1bef
Parents: c485326
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Thu Aug 28 19:32:49 2014 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Fri Aug 29 15:49:57 2014 +0300

----------------------------------------------------------------------
 .../controller/AmbariActionExecutionHelper.java |  4 +-
 .../AmbariManagementControllerImpl.java         | 12 +++--
 .../controller/MaintenanceStateHelper.java      | 49 +++++++++-----------
 .../internal/ComponentResourceProvider.java     |  2 -
 .../internal/HostResourceProvider.java          | 12 +++--
 .../internal/ServiceResourceProvider.java       | 12 +++--
 .../controller/MaintenanceStateHelperTest.java  | 34 ++++++++++++--
 7 files changed, 78 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
index efe85e0..4808a77 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
@@ -269,11 +269,13 @@ public class AmbariActionExecutionHelper {
                 }
               }
       );
-      LOG.debug("Ignoring action for hosts due to maintenance state." +
+      if (! ignoredHosts.isEmpty()) {
+        LOG.debug("Ignoring action for hosts due to maintenance state." +
             "Ignored hosts =" + ignoredHosts + ", component="
             + componentName + ", service=" + serviceName
             + ", cluster=" + cluster.getClusterName() + ", " +
             "actionName=" + actionContext.getActionName());
+      }
     }
 
     // If request did not specify hosts and there exists no host

http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index cc122f6..efce9bd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -2103,7 +2103,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
         new HashMap<String, Map<String, Map<String, Set<String>>>>();
     Set<State> seenNewStates = new HashSet<State>();
     Map<ServiceComponentHost, State> directTransitionScHosts = new HashMap<ServiceComponentHost, State>();
-    Set<String> maintenanceClusters = new HashSet<String>();
+
+    // We don't expect batch requests for different clusters, that's why
+    // nothing bad should happen if value is overwritten few times
+    String maintenanceCluster = null;
 
     // Determine operation level
     Resource.Type reqOpLvl;
@@ -2199,8 +2202,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
               "maintenance state to one of " + EnumSet.of(MaintenanceState.OFF, MaintenanceState.ON));
           } else {
             sch.setMaintenanceState(newMaint);
-
-            maintenanceClusters.add(sch.getClusterName());
+            maintenanceCluster = sch.getClusterName();
           }
         }
       }
@@ -2339,9 +2341,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
       }
     }
 
-    if (maintenanceClusters.size() > 0) {
+    if (maintenanceCluster != null) {
       try {
-        maintenanceStateHelper.createRequests(this, requestProperties, maintenanceClusters);
+        maintenanceStateHelper.createRequests(this, requestProperties, maintenanceCluster);
       } catch (Exception e) {
         LOG.warn("Could not send maintenance status to Nagios (" + e.getMessage() + ")");
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
index 6a429be..059e2c9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
@@ -50,7 +50,8 @@ public class MaintenanceStateHelper {
   private static final String NAGIOS_COMPONENT = "NAGIOS_SERVER";
   private static final String NAGIOS_ACTION_NAME = "nagios_update_ignore";
   private static final Logger LOG = LoggerFactory.getLogger(MaintenanceStateHelper.class);
-  
+  public static final String UPDATE_NAGIOS_REQUEST_NAME = "Update Nagios configuration";
+
   @Inject
   private Clusters clusters;
   
@@ -250,44 +251,40 @@ public class MaintenanceStateHelper {
   }
   
   /**
-   * Creates the requests to send to the clusters. These requests
-   * update ignored allerts Nagios configuration.
+   * Creates the Nagios update request to send to the cluster. This request
+   * updates ignored allerts Nagios configuration.
    * @param amc the controller
    * @param requestProperties the request properties
-   * @param clusterNames the names of all the clusters to update
+   * @param clusterName the names of clusters to update
    * @return the response
    * @throws AmbariException
    */
   public RequestStatusResponse createRequests(AmbariManagementController amc,
-      Map<String, String> requestProperties, Set<String> clusterNames)
+      Map<String, String> requestProperties, String clusterName)
           throws AmbariException {
     
+    // Substitute another request name
     Map<String, String> params = new HashMap<String, String>();
-    
-    // return the first one, just like amc.createStages()
-    RequestStatusResponse response = null;
+    Map<String, String> requestPropertiesClone = new HashMap<String, String>(requestProperties.size());
+    requestPropertiesClone.putAll(requestProperties);
+    requestPropertiesClone.put("context", UPDATE_NAGIOS_REQUEST_NAME);
 
     RequestResourceFilter resourceFilter =
       new RequestResourceFilter(NAGIOS_SERVICE, NAGIOS_COMPONENT, null);
 
-    for (String clusterName : clusterNames) {
-      RequestOperationLevel level =
-              new RequestOperationLevel(Resource.Type.HostComponent,
-              clusterName, NAGIOS_SERVICE, NAGIOS_COMPONENT, null);
-
-      ExecuteActionRequest actionRequest = new ExecuteActionRequest(
-        clusterName, null, NAGIOS_ACTION_NAME,
-        Collections.singletonList(resourceFilter),
-        level, params);
-      
-      if (null == response) {
-        // createAction() may throw an exception if Nagios is in MS or
-        // if Nagios is absent in cluster. This exception is usually ignored at
-        // upper levels
-        response = amc.createAction(actionRequest, requestProperties);
-      }
-    }    
-    return response;
+    RequestOperationLevel level =
+            new RequestOperationLevel(Resource.Type.HostComponent,
+            clusterName, NAGIOS_SERVICE, NAGIOS_COMPONENT, null);
+
+    ExecuteActionRequest actionRequest = new ExecuteActionRequest(
+      clusterName, null, NAGIOS_ACTION_NAME,
+      Collections.singletonList(resourceFilter),
+      level, params);
+
+    // createAction() may throw an exception if Nagios is in MS or
+    // if Nagios is absent in cluster. This exception is usually ignored at
+    // upper levels
+    return amc.createAction(actionRequest, requestPropertiesClone);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
index c6b0970..9a2be41 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
@@ -835,8 +835,6 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
 
     // TODO additional validation?
 
-    // TODO if all components reach a common state, should service state be
-    // modified?
     Cluster cluster = clusters.getCluster(clusterNames.iterator().next());
 
     return getManagementController().createAndPersistStages(cluster, requestProperties, null, null, changedComps, changedScHosts,

http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
index 03f7233..facc670 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
@@ -533,7 +533,10 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
 
     AmbariManagementController controller = getManagementController();
     Clusters                   clusters   = controller.getClusters();
-    Set<String>                maintenanceClusters = new HashSet<String>();
+
+    // We don't expect batch requests for different clusters, that's why
+    // nothing bad should happen if value is overwritten few times
+    String maintenanceCluster = null;
     
     for (HostRequest request : requests) {
       if (request.getHostname() == null
@@ -582,8 +585,7 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
               "maintenance state to one of " + EnumSet.of(MaintenanceState.OFF, MaintenanceState.ON));
           } else {
             h.setMaintenanceState(c.getClusterId(), newState);
-            
-            maintenanceClusters.add(c.getClusterName());
+            maintenanceCluster = c.getClusterName();
           }
         }
       }
@@ -628,9 +630,9 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
       //todo: that are allowed above, should throw exception
     }
     
-    if (maintenanceClusters.size() > 0) {
+    if (maintenanceCluster != null) {
       try {
-        maintenanceStateHelper.createRequests(controller, requestProperties, maintenanceClusters);
+        maintenanceStateHelper.createRequests(controller, requestProperties, maintenanceCluster);
       } catch (Exception e) {
         LOG.warn("Could not send maintenance status to Nagios (" + e.getMessage() + ")");
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
index f8a362d..aec91fd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
@@ -597,7 +597,10 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
     }
 
     Clusters       clusters        = controller.getClusters();
-    Set<String> maintenanceClusters = new HashSet<String>();
+
+    // We don't expect batch requests for different clusters, that's why
+    // nothing bad should happen if value is overwritten few times
+    String maintenanceCluster = null;
 
     for (ServiceRequest request : requests) {
       if (request.getClusterName() == null
@@ -653,8 +656,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
               "maintenance state to one of " + EnumSet.of(MaintenanceState.OFF, MaintenanceState.ON));
           } else {
             s.setMaintenanceState(newMaint);
-            
-            maintenanceClusters.add(cluster.getClusterName());
+            maintenanceCluster = cluster.getClusterName();
           }
         }
       }
@@ -726,9 +728,9 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider
           + " changes for a set of services at the same time");
     }
     
-    if (maintenanceClusters.size() > 0) {
+    if (maintenanceCluster != null) {
       try {
-        maintenanceStateHelper.createRequests(controller, requestProperties, maintenanceClusters);
+        maintenanceStateHelper.createRequests(controller, requestProperties, maintenanceCluster);
       } catch (Exception e) {
         LOG.warn("Could not send maintenance state to Nagios (" + e.getMessage() + ")");
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/b22ce6c3/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java
index c9ac5bb..9b4ce29 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/MaintenanceStateHelperTest.java
@@ -107,7 +107,7 @@ public class MaintenanceStateHelperTest {
     
     Map<String, String> map = new HashMap<String, String>();
     map.put("context", "abc");
-    maintenanceStateHelper.createRequests(amc, map, Collections.singleton(sch.getClusterName()));
+    maintenanceStateHelper.createRequests(amc, map, sch.getClusterName());
     
     ExecuteActionRequest ear = earCapture.getValue();
     map = rpCapture.getValue();
@@ -167,7 +167,7 @@ public class MaintenanceStateHelperTest {
     
     Map<String, String> map = new HashMap<String, String>();
     map.put("context", "abc");
-    maintenanceStateHelper.createRequests(amc, map, Collections.singleton(cluster.getClusterName()));
+    maintenanceStateHelper.createRequests(amc, map, cluster.getClusterName());
     
     ExecuteActionRequest ear = earCapture.getValue();
     rpCapture.getValue();
@@ -227,7 +227,7 @@ public class MaintenanceStateHelperTest {
     
     Map<String, String> map = new HashMap<String, String>();
     map.put("context", "abc");
-    maintenanceStateHelper.createRequests(amc, map, Collections.singleton("c1"));
+    maintenanceStateHelper.createRequests(amc, map, "c1");
     
     ExecuteActionRequest ear = earCapture.getValue();
     map = rpCapture.getValue();
@@ -540,6 +540,34 @@ public class MaintenanceStateHelperTest {
     Assert.assertTrue(ignored.contains("host3"));
   }
 
+  @Test
+  public void testcreateRequests() throws AmbariException {
+    Injector injector = createStrictMock(Injector.class);
+    MaintenanceStateHelper maintenanceStateHelper =
+            createMockBuilder(MaintenanceStateHelper.class)
+                    .withConstructor(injector)
+                    .createNiceMock();
+    replay(maintenanceStateHelper);
+
+    RequestStatusResponse rsrMock = EasyMock.createMock(RequestStatusResponse.class);
+    AmbariManagementController amcMock = EasyMock.createMock(AmbariManagementController.class);
+
+    Capture<Map<String, String>> rpCapture = new Capture<Map<String, String>>();
+    Capture<ExecuteActionRequest> actReqCapture = new Capture<ExecuteActionRequest>();
+    expect(amcMock.createAction(capture(actReqCapture), capture(rpCapture))).andReturn(rsrMock);
+    replay(amcMock, rsrMock);
+
+    Map<String, String> requestProperties = new HashMap<String, String>();
+    requestProperties.put("context", "some.request.description");
+
+    maintenanceStateHelper.createRequests(amcMock, requestProperties, "dummy_cluster");
+
+    verify(amcMock);
+
+    // Check that new request name is substituted
+    Assert.assertEquals(rpCapture.getValue().get("context"), MaintenanceStateHelper.UPDATE_NAGIOS_REQUEST_NAME);
+  }
+
   private static void injectField(MaintenanceStateHelper maintenanceStateHelper, Clusters clusters)
           throws NoSuchFieldException, IllegalAccessException {
     Class<?> maintenanceHelperClass = MaintenanceStateHelper.class;