You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2014/12/09 16:22:21 UTC

ambari git commit: AMBARI-8573. Upgrade Execute: add service check tasks (ncole)

Repository: ambari
Updated Branches:
  refs/heads/trunk 3022e2749 -> 9e2ebf8a4


AMBARI-8573. Upgrade Execute: add service check tasks (ncole)


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

Branch: refs/heads/trunk
Commit: 9e2ebf8a42e4d2e11b0756148b2ded14d1bcb7db
Parents: 3022e27
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Dec 8 20:26:50 2014 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Tue Dec 9 10:22:08 2014 -0500

----------------------------------------------------------------------
 .../internal/UpgradeResourceProvider.java       | 88 +++++++++++++++-----
 .../state/stack/upgrade/ColocatedGrouping.java  | 37 +++++++-
 .../server/state/stack/upgrade/Grouping.java    | 32 ++++++-
 .../state/stack/upgrade/ServiceCheckTask.java   | 41 +++++++++
 .../state/stack/upgrade/StageWrapper.java       | 47 ++++++-----
 .../ambari/server/state/stack/upgrade/Task.java |  6 +-
 .../internal/UpgradeResourceProviderTest.java   | 14 ++--
 .../ambari/server/state/UpgradeHelperTest.java  |  6 +-
 8 files changed, 216 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/9e2ebf8a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
index 88ea6bb..9cce147 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java
@@ -375,8 +375,8 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
       for (StageWrapper wrapper : group.items) {
         UpgradeItemEntity itemEntity = new UpgradeItemEntity();
         itemEntity.setText(wrapper.getText());
-        itemEntity.setTasks(wrapper.getHostsJson());
-        itemEntity.setHosts(wrapper.getTasksJson());
+        itemEntity.setTasks(wrapper.getTasksJson());
+        itemEntity.setHosts(wrapper.getHostsJson());
         itemEntities.add(itemEntity);
 
         // upgrade items match a stage
@@ -420,10 +420,16 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
   private void createStage(Cluster cluster, RequestStageContainer request, final String version,
       UpgradeItemEntity entity, StageWrapper wrapper) throws AmbariException {
 
-    if (wrapper.hasCommand()) {
-      makeRestartStage(cluster, request, version, entity, wrapper);
-    } else {
-      makeActionStage(cluster, request, version, entity, wrapper);
+    switch (wrapper.getType()) {
+      case RESTART:
+        makeRestartStage(cluster, request, version, entity, wrapper);
+        break;
+      case RU_TASKS:
+        makeActionStage(cluster, request, version, entity, wrapper);
+        break;
+      case SERVICE_CHECK:
+        makeServiceCheckStage(cluster, request, version, entity, wrapper);
+        break;
     }
 
   }
@@ -431,6 +437,19 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
   private void makeActionStage(Cluster cluster, RequestStageContainer request, final String version,
       UpgradeItemEntity entity, StageWrapper wrapper) throws AmbariException {
 
+    // add each host to this stage
+    RequestResourceFilter filter = new RequestResourceFilter("", "",
+        new ArrayList<String>(wrapper.getHosts()));
+
+    Map<String, String> params = new HashMap<String, String>();
+    params.put("tasks", entity.getTasks());
+
+    ActionExecutionContext actionContext = new ActionExecutionContext(
+        cluster.getClusterName(), "ru_execute_tasks",
+        Collections.singletonList(filter),
+        params);
+    actionContext.setTimeout(Short.valueOf((short)60));
+
     Map<String, String> hostLevelParams = new HashMap<String, String>();
     hostLevelParams.put(JDK_LOCATION, getManagementController().getJdkResourceUrl());
 
@@ -449,20 +468,6 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
     stage.setStageId(stageId);
     entity.setStageId(Long.valueOf(stageId));
 
-    // add each host to this stage
-    RequestResourceFilter filter = new RequestResourceFilter("", "",
-        new ArrayList<String>(wrapper.getHosts()));
-
-    // !!! TODO when the custom action is underway, change this
-    Map<String, String> params = new HashMap<String, String>();
-    params.put("tasks", entity.getTasks());
-
-    ActionExecutionContext actionContext = new ActionExecutionContext(
-        cluster.getClusterName(), "ru_execute_tasks",
-        Collections.singletonList(filter),
-        params);
-    actionContext.setTimeout(Short.valueOf((short)60));
-
     // !!! TODO verify the action is valid
 
     actionExecutionHelper.get().addExecutionCommandsToStage(actionContext, stage);
@@ -527,5 +532,48 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
     request.addStages(Collections.singletonList(stage));
   }
 
+  private void makeServiceCheckStage(Cluster cluster, RequestStageContainer request, String version,
+      UpgradeItemEntity entity, StageWrapper wrapper) throws AmbariException {
+
+    List<RequestResourceFilter> filters = new ArrayList<RequestResourceFilter>();
+
+    for (TaskWrapper tw : wrapper.getTasks()) {
+      filters.add(new RequestResourceFilter(tw.getService(), "", Collections.<String>emptyList()));
+    }
+
+    Map<String, String> restartCommandParams = new HashMap<String, String>();
+    restartCommandParams.put("version", version);
+
+    ActionExecutionContext actionContext = new ActionExecutionContext(
+        cluster.getClusterName(), "SERVICE_CHECK",
+        filters,
+        restartCommandParams);
+    actionContext.setTimeout(Short.valueOf((short)-1));
+
+    ExecuteCommandJson jsons = commandExecutionHelper.get().getCommandJson(
+        actionContext, cluster);
+
+    Stage stage = stageFactory.get().createNew(request.getId().longValue(),
+        "/tmp/ambari",
+        cluster.getClusterName(),
+        cluster.getClusterId(),
+        entity.getText(),
+        jsons.getClusterHostInfo(),
+        jsons.getCommandParamsForStage(),
+        jsons.getHostParamsForStage());
+
+    long stageId = request.getLastStageId() + 1;
+    if (0L == stageId) {
+      stageId = 1L;
+    }
+    stage.setStageId(stageId);
+    entity.setStageId(Long.valueOf(stageId));
+
+    Map<String, String> requestParams = new HashMap<String, String>();
+
+    commandExecutionHelper.get().addExecutionCommandsToStage(actionContext, stage, requestParams);
+
+    request.addStages(Collections.singletonList(stage));
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/9e2ebf8a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java
index 988e272..f89645a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ColocatedGrouping.java
@@ -19,6 +19,7 @@ package org.apache.ambari.server.state.stack.upgrade;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -29,6 +30,7 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,6 +59,7 @@ public class ColocatedGrouping extends Grouping {
     private Map<String, List<TaskProxy>> initialBatch = new LinkedHashMap<String, List<TaskProxy>>();
     private Map<String, List<TaskProxy>> finalBatches = new LinkedHashMap<String, List<TaskProxy>>();
 
+
     private MultiHomedHolder(Batch batch) {
       this.batch = batch;
     }
@@ -83,6 +86,7 @@ public class ColocatedGrouping extends Grouping {
           proxy = new TaskProxy();
           proxy.message = getStageText("Preparing", pc.name, Collections.singleton(host));
           proxy.tasks.add(new TaskWrapper(service, pc.name, Collections.singleton(host), pc.preTasks));
+          proxy.service = service;
           proxy.component = pc.name;
           targetList.add(proxy);
         }
@@ -94,6 +98,7 @@ public class ColocatedGrouping extends Grouping {
             proxy = new TaskProxy();
             proxy.tasks.add(new TaskWrapper(service, pc.name, Collections.singleton(host), t));
             proxy.restart = true;
+            proxy.service = service;
             proxy.component = pc.name;
             proxy.message = getStageText("Restarting ", pc.name, Collections.singleton(host));
 
@@ -104,6 +109,7 @@ public class ColocatedGrouping extends Grouping {
         if (null != pc.postTasks && pc.postTasks.size() > 0) {
           proxy = new TaskProxy();
           proxy.component = pc.name;
+          proxy.service = service;
           proxy.tasks.add(new TaskWrapper(service, pc.name, Collections.singleton(host), pc.postTasks));
           proxy.message = getStageText("Completing", pc.name, Collections.singleton(host));
           targetList.add(proxy);
@@ -123,21 +129,24 @@ public class ColocatedGrouping extends Grouping {
 
       results.addAll(fromProxies(initialBatch));
 
+      // !!! TODO when manual tasks are ready
 //      StageWrapper wrapper = new StageWrapper(
 //      ManualTask task = new ManualTask();
 //      task.message = batch.message;
 //      wrapper.tasks.add(new TaskWrapper(null, null, null, task));
-      // !!! TODO
 //      results.add(wrapper);
 
       results.addAll(fromProxies(finalBatches));
 
+
       return results;
     }
 
     private List<StageWrapper> fromProxies(Map<String, List<TaskProxy>> wrappers) {
       List<StageWrapper> results = new ArrayList<StageWrapper>();
 
+      Set<String> serviceChecks = new HashSet<String>();
+
       for (Entry<String, List<TaskProxy>> entry : wrappers.entrySet()) {
 
         // !!! stage per host, per type
@@ -145,13 +154,15 @@ public class ColocatedGrouping extends Grouping {
         StageWrapper execwrapper = null;
 
         for (TaskProxy t : entry.getValue()) {
+          serviceChecks.add(t.service);
+
           if (!t.restart) {
             if (null == wrapper) {
-              wrapper = new StageWrapper(t.message, t.tasks);
+              wrapper = new StageWrapper(StageWrapper.Type.RU_TASKS, t.message, t.getTasksArray());
             }
           } else {
             if (null == execwrapper) {
-              execwrapper = new StageWrapper(t.message, t.tasks);
+              execwrapper = new StageWrapper(StageWrapper.Type.RESTART, t.message, t.getTasksArray());
             }
           }
         }
@@ -165,6 +176,21 @@ public class ColocatedGrouping extends Grouping {
         }
       }
 
+      if (serviceChecks.size() > 0) {
+        // !!! add the service check task
+        List<TaskWrapper> tasks = new ArrayList<TaskWrapper>();
+        for (String service : serviceChecks) {
+          tasks.add(new TaskWrapper(service, "", Collections.<String>emptySet(), new ServiceCheckTask()));
+        }
+
+        StageWrapper wrapper = new StageWrapper(
+            StageWrapper.Type.SERVICE_CHECK,
+            "Service Check " + StringUtils.join(serviceChecks, ", "),
+            tasks.toArray(new TaskWrapper[tasks.size()]));
+
+        results.add(wrapper);
+      }
+
       return results;
     }
 
@@ -175,6 +201,7 @@ public class ColocatedGrouping extends Grouping {
    */
   private static class TaskProxy {
     private boolean restart = false;
+    private String service;
     private String component;
     private String message;
     private List<TaskWrapper> tasks = new ArrayList<TaskWrapper>();
@@ -188,6 +215,10 @@ public class ColocatedGrouping extends Grouping {
 
       return s;
     }
+
+    private TaskWrapper[] getTasksArray() {
+      return tasks.toArray(new TaskWrapper[0]);
+    }
   }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/9e2ebf8a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Grouping.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Grouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Grouping.java
index f99ee72..c45f005 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Grouping.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Grouping.java
@@ -19,6 +19,7 @@ package org.apache.ambari.server.state.stack.upgrade;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -28,6 +29,7 @@ import javax.xml.bind.annotation.XmlSeeAlso;
 
 import org.apache.ambari.server.state.stack.UpgradePack;
 import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
+import org.apache.commons.lang.StringUtils;
 
 /**
  *
@@ -55,13 +57,15 @@ public class Grouping {
   private static class DefaultBuilder extends StageWrapperBuilder {
 
     private List<StageWrapper> stages = new ArrayList<StageWrapper>();
+    private Set<String> serviceChecks = new HashSet<String>();
 
     @Override
     public void add(Set<String> hosts, String service, ProcessingComponent pc) {
       if (null != pc.preTasks && pc.preTasks.size() > 0) {
         StageWrapper stage = new StageWrapper(
+            StageWrapper.Type.RU_TASKS,
             getStageText("Preparing", pc.name, hosts),
-            Collections.singletonList(new TaskWrapper(service, pc.name, hosts, pc.preTasks)));
+            new TaskWrapper(service, pc.name, hosts, pc.preTasks));
         stages.add(stage);
       }
 
@@ -71,8 +75,9 @@ public class Grouping {
         if (RestartTask.class.isInstance(t)) {
           for (String hostName : hosts) {
             StageWrapper stage = new StageWrapper(
+                StageWrapper.Type.RESTART,
                 getStageText("Restarting", pc.name, Collections.singleton(hostName)),
-                Collections.singletonList(new TaskWrapper(service, pc.name, Collections.singleton(hostName), t)));
+                new TaskWrapper(service, pc.name, Collections.singleton(hostName), t));
             stages.add(stage);
           }
         }
@@ -80,14 +85,35 @@ public class Grouping {
 
       if (null != pc.postTasks && pc.postTasks.size() > 0) {
         StageWrapper stage = new StageWrapper(
+            StageWrapper.Type.RU_TASKS,
             getStageText("Completing", pc.name, hosts),
-            Collections.singletonList(new TaskWrapper(service, pc.name, hosts, pc.postTasks)));
+            new TaskWrapper(service, pc.name, hosts, pc.postTasks));
         stages.add(stage);
       }
+
+      serviceChecks.add(service);
+
     }
 
     @Override
     public List<StageWrapper> build() {
+
+      List<TaskWrapper> tasks = new ArrayList<TaskWrapper>();
+      for (String service : serviceChecks) {
+        tasks.add(new TaskWrapper(
+            service, "", Collections.<String>emptySet(), new ServiceCheckTask()));
+      }
+
+      if (serviceChecks.size() > 0) {
+        StageWrapper wrapper = new StageWrapper(
+            StageWrapper.Type.SERVICE_CHECK,
+            "Service Check " + StringUtils.join(serviceChecks, ", "),
+            tasks.toArray(new TaskWrapper[0])
+            );
+
+        stages.add(wrapper);
+      }
+
       return stages;
     }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/9e2ebf8a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckTask.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckTask.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckTask.java
new file mode 100644
index 0000000..5893edf
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckTask.java
@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.state.stack.upgrade;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Used to represent a restart of a component.
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name="service-check")
+public class ServiceCheckTask extends Task {
+
+  @XmlTransient
+  private Task.Type type = Task.Type.SERVICE_CHECK;
+
+  @Override
+  public Task.Type getType() {
+    return type;
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/9e2ebf8a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/StageWrapper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/StageWrapper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/StageWrapper.java
index 9544323..ae1558f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/StageWrapper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/StageWrapper.java
@@ -18,7 +18,7 @@
 package org.apache.ambari.server.state.stack.upgrade;
 
 import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -32,10 +32,16 @@ public class StageWrapper {
 
   private static Gson gson = new Gson();
   private String text;
+  private Type type;
 
   private List<TaskWrapper> tasks;
 
-  public StageWrapper(String text, List<TaskWrapper> tasks) {
+  public StageWrapper(Type type, String text, TaskWrapper... tasks) {
+    this(type, text, Arrays.asList(tasks));
+  }
+
+  private StageWrapper(Type type, String text, List<TaskWrapper> tasks) {
+    this.type = type;
     this.text = text;
     this.tasks = tasks;
   }
@@ -60,23 +66,6 @@ public class StageWrapper {
   }
 
   /**
-   * @return {@code true} if any of the tasks is a command type.  This affects
-   * the type of stage that is created.
-   */
-  public boolean hasCommand() {
-
-    for (TaskWrapper tw : tasks) {
-      for (Task t : tw.getTasks()) {
-        if (t.getType().isCommand()) {
-          return true;
-        }
-      }
-    }
-
-    return false;
-  }
-
-  /**
    * @return the set of hosts for all tasks
    */
   public Set<String> getHosts() {
@@ -102,4 +91,24 @@ public class StageWrapper {
     return text;
   }
 
+  /**
+   * Gets the type of stage.  All tasks defined for the stage execute this type.
+   * @return the type
+   */
+  public Type getType() {
+    return type;
+  }
+
+  /**
+   * Indicates the type of wrapper.
+   */
+  public enum Type {
+    MANUAL,
+    RESTART,
+    RU_TASKS,
+    SERVICE_CHECK
+  }
+
+
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/9e2ebf8a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Task.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Task.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Task.java
index 9a60fc9..8e7c577 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Task.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/Task.java
@@ -55,7 +55,11 @@ public abstract class Task {
     /**
      * Task that is a restart command.
      */
-    RESTART;
+    RESTART,
+    /**
+     * Task that is a service check
+     */
+    SERVICE_CHECK;
 
     /**
      * @return {@code true} if the task is manual or automated.

http://git-wip-us.apache.org/repos/asf/ambari/blob/9e2ebf8a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index cf58935..7d986c9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -18,8 +18,8 @@
 package org.apache.ambari.server.controller.internal;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 import java.lang.reflect.Field;
 import java.util.Collections;
@@ -132,6 +132,8 @@ public class UpgradeResourceProviderTest {
     ServiceComponent component = service.addServiceComponent("ZOOKEEPER_SERVER");
     component.addServiceComponentHost("h1");
 
+    component = service.addServiceComponent("ZOOKEEPER_CLIENT");
+    component.addServiceComponentHost("h1");
 
   }
 
@@ -167,11 +169,12 @@ public class UpgradeResourceProviderTest {
 
     UpgradeGroupEntity group = entity.getUpgradeGroups().get(0);
 
-    assertEquals(3, group.getItems().size());
+    assertEquals(4, group.getItems().size());
 
     assertTrue(group.getItems().get(0).getText().contains("Preparing"));
     assertTrue(group.getItems().get(1).getText().contains("Restarting"));
     assertTrue(group.getItems().get(2).getText().contains("Completing"));
+    assertTrue(group.getItems().get(3).getText().contains("Service Check"));
 
     ActionManager am = injector.getInstance(ActionManager.class);
     List<Long> requests = am.getRequestsByStatus(RequestStatus.IN_PROGRESS, 100, true);
@@ -181,7 +184,7 @@ public class UpgradeResourceProviderTest {
 
 
     List<Stage> stages = am.getRequestStatus(requests.get(0).longValue());
-    assertEquals(3, stages.size());
+    assertEquals(4, stages.size());
     for (int i = 0; i < stages.size(); i++) {
       Stage stage = stages.get(i);
       UpgradeItemEntity upgradeItem = group.getItems().get(i);
@@ -189,9 +192,8 @@ public class UpgradeResourceProviderTest {
       assertEquals(UpgradeState.NONE, upgradeItem.getState());
     }
 
-
     List<HostRoleCommand> tasks = am.getRequestTasks(requests.get(0).longValue());
-    assertEquals(3, tasks.size());
+    assertEquals(4, tasks.size());
 
     return status;
   }
@@ -257,7 +259,7 @@ public class UpgradeResourceProviderTest {
     ResourceProvider upgradeItemResourceProvider = new UpgradeItemResourceProvider(amc);
     resources = upgradeItemResourceProvider.getResources(request, predicate);
 
-    assertEquals(3, resources.size());
+    assertEquals(4, resources.size());
     res = resources.iterator().next();
     assertNotNull(res.getPropertyValue("UpgradeItem/status"));
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/9e2ebf8a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index 0d9aeea..3ff9942 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@ -82,9 +82,9 @@ public class UpgradeHelperTest {
     assertEquals("CORE_MASTER", groups.get(1).name);
     assertEquals("CORE_SLAVES", groups.get(2).name);
 
-    assertEquals(5, groups.get(0).items.size());
-    assertEquals(4, groups.get(1).items.size());
-    assertEquals(4, groups.get(2).items.size());
+    assertEquals(6, groups.get(0).items.size());
+    assertEquals(5, groups.get(1).items.size());
+    assertEquals(6, groups.get(2).items.size());
   }
 
   public Cluster makeCluster() throws AmbariException {