You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2016/06/29 13:19:22 UTC

ambari git commit: AMBARI-17313. Handle desired state for services/components on restart (Laszlo Puskas via magyari_sandor)

Repository: ambari
Updated Branches:
  refs/heads/branch-2.4 32326775f -> 74a262c48


 AMBARI-17313. Handle desired state for services/components on restart (Laszlo Puskas via magyari_sandor)


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

Branch: refs/heads/branch-2.4
Commit: 74a262c48da8a5faf6996b250ec0c5bf660e5ab8
Parents: 3232677
Author: Laszlo Puskas <lp...@hortonworks.com>
Authored: Wed Jun 29 15:04:38 2016 +0200
Committer: Sandor Magyari <sm...@hortonworks.com>
Committed: Wed Jun 29 15:17:05 2016 +0200

----------------------------------------------------------------------
 .../AmbariCustomCommandExecutionHelper.java     |  72 +++---
 .../AmbariCustomCommandExecutionHelperTest.java | 221 +++++++++----------
 .../AmbariManagementControllerTest.java         |  39 ++--
 3 files changed, 168 insertions(+), 164 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/74a262c4/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index b60592d..9526077 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
@@ -18,33 +18,6 @@
 
 package org.apache.ambari.server.controller;
 
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.AGENT_STACK_RETRY_COUNT;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.AGENT_STACK_RETRY_ON_UNAVAILABILITY;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.CLIENTS_TO_UPDATE_CONFIGS;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.COMMAND_TIMEOUT;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.COMPONENT_CATEGORY;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.CUSTOM_COMMAND;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_DRIVER_FILENAME;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_NAME;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.GROUP_LIST;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOOKS_FOLDER;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOST_SYS_PREPPED;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JAVA_HOME;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JAVA_VERSION;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JCE_NAME;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_LOCATION;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_NAME;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.MYSQL_JDBC_URL;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.NOT_MANAGED_HDFS_PATH_LIST;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.ORACLE_JDBC_URL;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.REPO_INFO;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SCRIPT;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SCRIPT_TYPE;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SERVICE_PACKAGE_FOLDER;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_NAME;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_VERSION;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.USER_LIST;
-
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -109,6 +82,33 @@ import com.google.gson.JsonObject;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.AGENT_STACK_RETRY_COUNT;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.AGENT_STACK_RETRY_ON_UNAVAILABILITY;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.CLIENTS_TO_UPDATE_CONFIGS;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.COMMAND_TIMEOUT;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.COMPONENT_CATEGORY;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.CUSTOM_COMMAND;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_DRIVER_FILENAME;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_NAME;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.GROUP_LIST;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOOKS_FOLDER;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOST_SYS_PREPPED;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JAVA_HOME;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JAVA_VERSION;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JCE_NAME;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_LOCATION;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_NAME;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.MYSQL_JDBC_URL;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.NOT_MANAGED_HDFS_PATH_LIST;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.ORACLE_JDBC_URL;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.REPO_INFO;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SCRIPT;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SCRIPT_TYPE;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SERVICE_PACKAGE_FOLDER;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_NAME;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_VERSION;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.USER_LIST;
+
 /**
  * Helper class containing logic to process custom command execution requests .
  * This class has special support needed for SERVICE_CHECK and DECOMMISSION.
@@ -446,6 +446,21 @@ public class AmbariCustomCommandExecutionHelper {
 
       roleParams.put(COMPONENT_CATEGORY, componentInfo.getCategory());
       execCmd.setRoleParams(roleParams);
+
+      // perform any server side command related logic - eg - set desired states on restart
+      applyCustomCommandBackendLogic(cluster, serviceName, componentName, commandName, hostName);
+    }
+  }
+
+  private void applyCustomCommandBackendLogic(Cluster cluster, String serviceName, String componentName, String commandName, String hostname) throws AmbariException {
+    switch (commandName) {
+      case "RESTART":
+        LOG.info("Updating desired state on RESTART for the service [{}], service component [{}]", serviceName, componentName);
+        cluster.getService(serviceName).getServiceComponent(componentName).getServiceComponentHost(hostname).setDesiredState(State.STARTED);
+        break;
+      default:
+        LOG.debug("No backend operations needed for the custom command: {}", commandName);
+        break;
     }
   }
 
@@ -989,8 +1004,7 @@ public class AmbariCustomCommandExecutionHelper {
           }
         }
 
-        addCustomCommandAction(actionExecutionContext, resourceFilter, stage, extraParams,
-            commandDetail);
+        addCustomCommandAction(actionExecutionContext, resourceFilter, stage, extraParams, commandDetail);
       } else {
         throw new AmbariException("Unsupported action " + actionName);
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/74a262c4/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
index 68b31c0..251f00a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
@@ -17,8 +17,6 @@
  */
 package org.apache.ambari.server.controller;
 
-import static org.mockito.Matchers.any;
-
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -28,8 +26,12 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.Role;
+import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
+import org.apache.ambari.server.actionmanager.HostRoleCommand;
+import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.actionmanager.Request;
 import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.agent.ExecutionCommand;
@@ -52,15 +54,15 @@ import org.apache.ambari.server.state.SecurityType;
 import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.topology.TopologyManager;
 import org.apache.ambari.server.utils.StageUtils;
+import org.easymock.Capture;
+import org.easymock.EasyMock;
+import org.easymock.EasyMockRule;
+import org.easymock.Mock;
+import org.easymock.MockType;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
 import org.springframework.security.core.context.SecurityContextHolder;
 
 import com.google.inject.Guice;
@@ -69,54 +71,70 @@ import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
-@RunWith(MockitoJUnitRunner.class)
+
 public class AmbariCustomCommandExecutionHelperTest {
-  private Injector injector;
-  private AmbariManagementController controller;
-  private Clusters clusters;
+  private static final String REQUEST_CONTEXT_PROPERTY = "context";
 
+  @Rule
+  public EasyMockRule mocks = new EasyMockRule(this);
 
-  private static final String REQUEST_CONTEXT_PROPERTY = "context";
+  @Mock(type = MockType.NICE)
+  private ActionManager actionManager;
+
+  @Mock(type = MockType.NICE)
+  private HostRoleCommand hostRoleCommand;
+
+  private Injector injector;
+  private Clusters clusters;
+  private AmbariManagementController ambariManagementController;
+  private Capture<Request> requestCapture = EasyMock.newCapture();
 
-  @Captor ArgumentCaptor<Request> requestCapture;
-  @Mock ActionManager am;
 
   @Before
   public void setup() throws Exception {
+    EasyMock.reset(actionManager, hostRoleCommand);
+
     InMemoryDefaultTestModule module = new InMemoryDefaultTestModule(){
       @Override
       protected void configure() {
         super.configure();
-        bind(ActionManager.class).toInstance(am);
+        bind(ActionManager.class).toInstance(actionManager);
       }
     };
-    injector = Guice.createInjector(module);
-
 
+    injector = Guice.createInjector(module);
     injector.getInstance(GuiceJpaInitializer.class);
-    controller = injector.getInstance(AmbariManagementController.class);
+    ambariManagementController = injector.getInstance(AmbariManagementController.class);
     clusters = injector.getInstance(Clusters.class);
+
     StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
     StageUtils.setConfiguration(injector.getInstance(Configuration.class));
-  }
 
-  @After
-  public void clearAuthentication() {
-    SecurityContextHolder.getContext().setAuthentication(null);
+    SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
+    createClusterFixture("c1", "HDP-2.0.6", "c1");
+
+    EasyMock.expect(hostRoleCommand.getTaskId()).andReturn(1L);
+    EasyMock.expect(hostRoleCommand.getStageId()).andReturn(1L);
+    EasyMock.expect(hostRoleCommand.getRoleCommand()).andReturn(RoleCommand.CUSTOM_COMMAND);
+    EasyMock.expect(hostRoleCommand.getRole()).andReturn(Role.AMBARI_SERVER_ACTION);
+    EasyMock.expect(hostRoleCommand.getStatus()).andReturn(HostRoleStatus.PENDING);
+
+    EasyMock.expect(actionManager.getNextRequestId()).andReturn(1L).anyTimes();
+    EasyMock.expect(actionManager.getRequestTasks(1L)).andReturn(Collections.singletonList(hostRoleCommand));
+
+    actionManager.sendActions(EasyMock.capture(requestCapture), EasyMock.anyObject(ExecuteActionRequest.class));
+    EasyMock.expectLastCall();
+
   }
 
   @After
   public void teardown() {
+    SecurityContextHolder.getContext().setAuthentication(null);
     injector.getInstance(PersistService.class).stop();
   }
 
-  @SuppressWarnings("serial")
   @Test
   public void testRefreshQueueCustomCommand() throws Exception {
-    SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
-
-    createClusterFixture("HDP-2.0.6");
-
     Map<String, String> requestProperties = new HashMap<String, String>() {
       {
         put(REQUEST_CONTEXT_PROPERTY, "Refresh YARN Capacity Scheduler");
@@ -130,13 +148,11 @@ public class AmbariCustomCommandExecutionHelperTest {
             put("forceRefreshConfigTags", "capacity-scheduler");
           }
         }, false);
-    actionRequest.getResourceFilters().add(
-        new RequestResourceFilter("YARN", "RESOURCEMANAGER", Collections.singletonList("c6401")));
+    actionRequest.getResourceFilters().add(new RequestResourceFilter("YARN", "RESOURCEMANAGER", Collections.singletonList("c1-c6401")));
 
-    controller.createAction(actionRequest, requestProperties);
+    EasyMock.replay(hostRoleCommand, actionManager);
 
-    Mockito.verify(am, Mockito.times(1)).sendActions(requestCapture.capture(),
-        any(ExecuteActionRequest.class));
+    ambariManagementController.createAction(actionRequest, requestProperties);
 
     Request request = requestCapture.getValue();
     Assert.assertNotNull(request);
@@ -146,7 +162,7 @@ public class AmbariCustomCommandExecutionHelperTest {
 
     Assert.assertEquals(1, stage.getHosts().size());
 
-    List<ExecutionCommandWrapper> commands = stage.getExecutionCommands("c6401");
+    List<ExecutionCommandWrapper> commands = stage.getExecutionCommands("c1-c6401");
     Assert.assertEquals(1, commands.size());
 
     ExecutionCommand command = commands.get(0).getExecutionCommand();
@@ -159,9 +175,6 @@ public class AmbariCustomCommandExecutionHelperTest {
 
   @Test
   public void testHostsFilterHealthy() throws Exception {
-    SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
-
-    createClusterFixture("HDP-2.0.6");
 
     Map<String, String> requestProperties = new HashMap<String, String>() {
       {
@@ -175,9 +188,9 @@ public class AmbariCustomCommandExecutionHelperTest {
     ExecuteActionRequest actionRequest = new ExecuteActionRequest(
        "c1", "RESTART", null,
        Arrays.asList(
-          new RequestResourceFilter("GANGLIA", "GANGLIA_SERVER", Collections.singletonList("c6401")),
-          new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR", Collections.singletonList("c6401")),
-          new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR", Collections.singletonList("c6402"))
+           new RequestResourceFilter("GANGLIA", "GANGLIA_SERVER", Collections.singletonList("c1-c6401")),
+           new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR", Collections.singletonList("c1-c6401")),
+           new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR", Collections.singletonList("c1-c6402"))
        ),
        new RequestOperationLevel(Resource.Type.Service, "c1", "GANGLIA", null, null),
         new HashMap<String, String>() {
@@ -186,11 +199,9 @@ public class AmbariCustomCommandExecutionHelperTest {
         },
        false);
 
-    controller.createAction(actionRequest, requestProperties);
-
-    //clusters.getHost("c6402").setState(HostState.HEARTBEAT_LOST);
+    EasyMock.replay(hostRoleCommand, actionManager);
 
-    Mockito.verify(am, Mockito.times(1)).sendActions(requestCapture.capture(), any(ExecuteActionRequest.class));
+    ambariManagementController.createAction(actionRequest, requestProperties);
 
     Request request = requestCapture.getValue();
     Assert.assertNotNull(request);
@@ -204,12 +215,8 @@ public class AmbariCustomCommandExecutionHelperTest {
 
   @Test
   public void testHostsFilterUnhealthyHost() throws Exception {
-    SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
-
-    createClusterFixture("HDP-2.0.6");
-
     // Set custom status to host
-    clusters.getHost("c6402").setState(HostState.HEARTBEAT_LOST);
+    clusters.getHost("c1-c6402").setState(HostState.HEARTBEAT_LOST);
     Map<String, String> requestProperties = new HashMap<String, String>() {
       {
         put("context", "Restart all components for GANGLIA");
@@ -221,22 +228,18 @@ public class AmbariCustomCommandExecutionHelperTest {
 
     ExecuteActionRequest actionRequest = new ExecuteActionRequest("c1", "RESTART", null,
         Arrays.asList(
-            new RequestResourceFilter("GANGLIA", "GANGLIA_SERVER",
-                Collections.singletonList("c6401")),
-            new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR",
-                Collections.singletonList("c6401")),
-            new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR",
-                Collections.singletonList("c6402"))),
+            new RequestResourceFilter("GANGLIA", "GANGLIA_SERVER", Collections.singletonList("c1-c6401")),
+            new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR", Collections.singletonList("c1-c6401")),
+            new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR", Collections.singletonList("c1-c6402"))),
         new RequestOperationLevel(Resource.Type.Service, "c1", "GANGLIA", null, null),
         new HashMap<String, String>() {
           {
           }
         }, false);
 
-    controller.createAction(actionRequest, requestProperties);
+    EasyMock.replay(hostRoleCommand, actionManager);
 
-    Mockito.verify(am, Mockito.times(1)).sendActions(requestCapture.capture(),
-        any(ExecuteActionRequest.class));
+    ambariManagementController.createAction(actionRequest, requestProperties);
 
     Request request = requestCapture.getValue();
     Assert.assertNotNull(request);
@@ -250,13 +253,9 @@ public class AmbariCustomCommandExecutionHelperTest {
 
   @Test
   public void testHostsFilterUnhealthyComponent() throws Exception {
-    SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
-
-    createClusterFixture("HDP-2.0.6");
-
     // Set custom status to host
     clusters.getCluster("c1").getService("GANGLIA").getServiceComponent(
-        "GANGLIA_MONITOR").getServiceComponentHost("c6402").setState(State.UNKNOWN);
+        "GANGLIA_MONITOR").getServiceComponentHost("c1-c6402").setState(State.UNKNOWN);
 
     Map<String, String> requestProperties = new HashMap<String, String>() {
       {
@@ -269,22 +268,18 @@ public class AmbariCustomCommandExecutionHelperTest {
 
     ExecuteActionRequest actionRequest = new ExecuteActionRequest("c1", "RESTART", null,
         Arrays.asList(
-            new RequestResourceFilter("GANGLIA", "GANGLIA_SERVER",
-                Collections.singletonList("c6401")),
-            new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR",
-                Collections.singletonList("c6401")),
-            new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR",
-                Collections.singletonList("c6402"))),
+            new RequestResourceFilter("GANGLIA", "GANGLIA_SERVER", Collections.singletonList("c1-c6401")),
+            new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR", Collections.singletonList("c1-c6401")),
+            new RequestResourceFilter("GANGLIA", "GANGLIA_MONITOR", Collections.singletonList("c1-c6402"))),
         new RequestOperationLevel(Resource.Type.Host, "c1", "GANGLIA", null, null),
         new HashMap<String, String>() {
           {
           }
         }, false);
 
-    controller.createAction(actionRequest, requestProperties);
+    EasyMock.replay(hostRoleCommand, actionManager);
 
-    Mockito.verify(am, Mockito.times(1)).sendActions(requestCapture.capture(),
-        any(ExecuteActionRequest.class));
+    ambariManagementController.createAction(actionRequest, requestProperties);
 
     Request request = requestCapture.getValue();
     Assert.assertNotNull(request);
@@ -302,9 +297,6 @@ public class AmbariCustomCommandExecutionHelperTest {
    */
   @Test(expected = AmbariException.class)
   public void testNoCandidateHostThrowsException() throws Exception {
-    SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
-
-    createClusterFixture("HDP-2.0.6");
     long clusterId = clusters.getCluster("c1").getClusterId();
 
     // put host into MM
@@ -325,8 +317,8 @@ public class AmbariCustomCommandExecutionHelperTest {
     // create the service check on the host in MM
     ExecuteActionRequest actionRequest = new ExecuteActionRequest("c1",
         "ZOOKEEPER_QUORUM_SERVICE_CHECK",
-        null, Arrays.asList(new RequestResourceFilter("ZOOKEEPER", "ZOOKEEPER_CLIENT",
-            Collections.singletonList("c6402"))),
+        null, Collections.singletonList(new RequestResourceFilter("ZOOKEEPER", "ZOOKEEPER_CLIENT",
+        Collections.singletonList("c6402"))),
 
         new RequestOperationLevel(Resource.Type.Service, "c1", "ZOOKEEPER", null, null),
         new HashMap<String, String>() {
@@ -334,7 +326,8 @@ public class AmbariCustomCommandExecutionHelperTest {
           }
         }, false);
 
-    controller.createAction(actionRequest, requestProperties);
+    EasyMock.replay(hostRoleCommand, actionManager);
+    ambariManagementController.createAction(actionRequest, requestProperties);
     Assert.fail(
         "Expected an exception since there are no hosts which can run the ZK service check");
   }
@@ -346,10 +339,6 @@ public class AmbariCustomCommandExecutionHelperTest {
    */
   @Test(expected = AmbariException.class)
   public void testServiceCheckMaintenanceModeWithMissingComponentName() throws Exception {
-    SecurityContextHolder.getContext().setAuthentication(
-        TestAuthenticationFactory.createAdministrator());
-
-    createClusterFixture("HDP-2.0.6");
     long clusterId = clusters.getCluster("c1").getClusterId();
 
     // put host into MM
@@ -371,8 +360,8 @@ public class AmbariCustomCommandExecutionHelperTest {
     // create the service check on the host in MM, passing in null for the
     // component name
     ExecuteActionRequest actionRequest = new ExecuteActionRequest("c1",
-        "ZOOKEEPER_QUORUM_SERVICE_CHECK", null, Arrays.asList(
-            new RequestResourceFilter("ZOOKEEPER", null, Collections.singletonList("c6402"))),
+        "ZOOKEEPER_QUORUM_SERVICE_CHECK", null, Collections.singletonList(new RequestResourceFilter("ZOOKEEPER", null,
+        Collections.singletonList("c6402"))),
 
         new RequestOperationLevel(Resource.Type.Service, "c1", "ZOOKEEPER", null, null),
         new HashMap<String, String>() {
@@ -380,48 +369,46 @@ public class AmbariCustomCommandExecutionHelperTest {
           }
         }, false);
 
-    controller.createAction(actionRequest, requestProperties);
-    Assert.fail(
-        "Expected an exception since there are no hosts which can run the ZK service check");
+    EasyMock.replay(hostRoleCommand, actionManager);
+    ambariManagementController.createAction(actionRequest, requestProperties);
+    Assert.fail("Expected an exception since there are no hosts which can run the ZK service check");
   }
 
   @Test
   public void testIsTopologyRefreshRequired() throws Exception {
-    SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
-
     AmbariCustomCommandExecutionHelper helper = injector.getInstance(AmbariCustomCommandExecutionHelper.class);
 
-    createClusterFixture("HDP-2.1.1");
+    createClusterFixture("c2", "HDP-2.1.1", "c2");
 
-    Assert.assertTrue(helper.isTopologyRefreshRequired("START", "c1", "HDFS"));
-    Assert.assertTrue(helper.isTopologyRefreshRequired("RESTART", "c1", "HDFS"));
-    Assert.assertFalse(helper.isTopologyRefreshRequired("STOP", "c1", "HDFS"));
+    Assert.assertTrue(helper.isTopologyRefreshRequired("START", "c2", "HDFS"));
+    Assert.assertTrue(helper.isTopologyRefreshRequired("RESTART", "c2", "HDFS"));
+    Assert.assertFalse(helper.isTopologyRefreshRequired("STOP", "c2", "HDFS"));
   }
 
-  private void createClusterFixture(String stackVersion) throws AmbariException, AuthorizationException {
-    createCluster("c1", stackVersion);
-    addHost("c6401","c1");
-    addHost("c6402","c1");
+  private void createClusterFixture(String clusterName, String stackVersion, String hostPrefix) throws AmbariException, AuthorizationException {
+    createCluster(clusterName, stackVersion);
+    addHost(hostPrefix + "-c6401", clusterName);
+    addHost(hostPrefix + "-c6402", clusterName);
 
-    clusters.getCluster("c1");
-    createService("c1", "YARN", null);
-    createService("c1", "GANGLIA", null);
-    createService("c1", "ZOOKEEPER", null);
+    clusters.getCluster(clusterName);
+    createService(clusterName, "YARN", null);
+    createService(clusterName, "GANGLIA", null);
+    createService(clusterName, "ZOOKEEPER", null);
 
-    createServiceComponent("c1", "YARN","RESOURCEMANAGER", State.INIT);
-    createServiceComponent("c1", "YARN", "NODEMANAGER", State.INIT);
-    createServiceComponent("c1", "GANGLIA", "GANGLIA_SERVER", State.INIT);
-    createServiceComponent("c1", "GANGLIA", "GANGLIA_MONITOR", State.INIT);
-    createServiceComponent("c1", "ZOOKEEPER", "ZOOKEEPER_CLIENT", State.INIT);
+    createServiceComponent(clusterName, "YARN", "RESOURCEMANAGER", State.INIT);
+    createServiceComponent(clusterName, "YARN", "NODEMANAGER", State.INIT);
+    createServiceComponent(clusterName, "GANGLIA", "GANGLIA_SERVER", State.INIT);
+    createServiceComponent(clusterName, "GANGLIA", "GANGLIA_MONITOR", State.INIT);
+    createServiceComponent(clusterName, "ZOOKEEPER", "ZOOKEEPER_CLIENT", State.INIT);
 
-    createServiceComponentHost("c1","YARN","RESOURCEMANAGER","c6401", null);
-    createServiceComponentHost("c1","YARN","NODEMANAGER","c6401", null);
-    createServiceComponentHost("c1","GANGLIA","GANGLIA_SERVER","c6401", State.INIT);
-    createServiceComponentHost("c1","GANGLIA","GANGLIA_MONITOR","c6401", State.INIT);
+    createServiceComponentHost(clusterName, "YARN", "RESOURCEMANAGER", hostPrefix + "-c6401", null);
+    createServiceComponentHost(clusterName, "YARN", "NODEMANAGER", hostPrefix + "-c6401", null);
+    createServiceComponentHost(clusterName, "GANGLIA", "GANGLIA_SERVER", hostPrefix + "-c6401", State.INIT);
+    createServiceComponentHost(clusterName, "GANGLIA", "GANGLIA_MONITOR", hostPrefix + "-c6401", State.INIT);
 
-    createServiceComponentHost("c1","YARN","NODEMANAGER","c6402", null);
-    createServiceComponentHost("c1","GANGLIA","GANGLIA_MONITOR","c6402", State.INIT);
-    createServiceComponentHost("c1", "ZOOKEEPER", "ZOOKEEPER_CLIENT", "c6402", State.INIT);
+    createServiceComponentHost(clusterName, "YARN", "NODEMANAGER", hostPrefix + "-c6402", null);
+    createServiceComponentHost(clusterName, "GANGLIA", "GANGLIA_MONITOR", hostPrefix + "-c6402", State.INIT);
+    createServiceComponentHost(clusterName, "ZOOKEEPER", "ZOOKEEPER_CLIENT", hostPrefix + "-c6402", State.INIT);
 
   }
   private void addHost(String hostname, String clusterName) throws AmbariException {
@@ -444,7 +431,7 @@ public class AmbariCustomCommandExecutionHelperTest {
   private void createCluster(String clusterName, String stackVersion) throws AmbariException, AuthorizationException {
     ClusterRequest r = new ClusterRequest(null, clusterName, State.INSTALLED.name(),
         SecurityType.NONE, stackVersion, null);
-    controller.createCluster(r);
+    ambariManagementController.createCluster(r);
   }
 
   private void createService(String clusterName,
@@ -457,7 +444,7 @@ public class AmbariCustomCommandExecutionHelperTest {
     Set<ServiceRequest> requests = new HashSet<ServiceRequest>();
     requests.add(r1);
 
-    ServiceResourceProviderTest.createServices(controller, requests);
+    ServiceResourceProviderTest.createServices(ambariManagementController, requests);
   }
 
   private void createServiceComponent(String clusterName,
@@ -472,7 +459,7 @@ public class AmbariCustomCommandExecutionHelperTest {
     Set<ServiceComponentRequest> requests =
         new HashSet<ServiceComponentRequest>();
     requests.add(r);
-    ComponentResourceProviderTest.createComponents(controller, requests);
+    ComponentResourceProviderTest.createComponents(ambariManagementController, requests);
   }
 
   private void createServiceComponentHost(String clusterName, String serviceName, String componentName, String hostname, State desiredState)
@@ -486,7 +473,7 @@ public class AmbariCustomCommandExecutionHelperTest {
     Set<ServiceComponentHostRequest> requests =
         new HashSet<ServiceComponentHostRequest>();
     requests.add(r);
-    controller.createHostComponents(requests);
+    ambariManagementController.createHostComponents(requests);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/74a262c4/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index fd70df5..29cdbdf 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -18,22 +18,6 @@
 
 package org.apache.ambari.server.controller;
 
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.io.StringReader;
 import java.lang.reflect.Type;
 import java.net.UnknownHostException;
@@ -176,6 +160,22 @@ import com.google.inject.persist.PersistService;
 
 import junit.framework.Assert;
 
+import static org.easymock.EasyMock.capture;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.createStrictMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 public class AmbariManagementControllerTest {
 
   private static final Logger LOG =
@@ -6685,8 +6685,7 @@ public class AmbariManagementControllerTest {
       Role.RESOURCEMANAGER.name(), new ArrayList<String>() {{ add(host2); }});
     resourceFilters.add(resourceFilter);
 
-    ExecuteActionRequest request = new ExecuteActionRequest(cluster1,
-      "RESTART", null, resourceFilters, null, params, false);
+    ExecuteActionRequest request = new ExecuteActionRequest(cluster1, "RESTART", null, resourceFilters, null, params, false);
 
     RequestStatusResponse response = controller.createAction(request, requestProperties);
     Assert.assertEquals(3, response.getTasks().size());
@@ -6728,6 +6727,10 @@ public class AmbariManagementControllerTest {
         storedTasks.get(0).getRole().name());
     Assert.assertEquals(host1, storedTasks.get(0).getHostName());
     Assert.assertEquals(requestProperties.get(REQUEST_CONTEXT_PROPERTY), response.getRequestContext());
+
+    Assert.assertEquals(State.STARTED, cluster.getService("HDFS").getServiceComponent(Role.DATANODE.name()).getServiceComponentHost(host1).getDesiredState());
+    Assert.assertEquals(State.STARTED, cluster.getService("HDFS").getServiceComponent(Role.DATANODE.name()).getServiceComponentHost(host2).getDesiredState());
+    Assert.assertEquals(State.STARTED, cluster.getService("YARN").getServiceComponent(Role.RESOURCEMANAGER.name()).getServiceComponentHost(host2).getDesiredState());
   }