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 2018/08/08 19:40:45 UTC

[ambari] branch branch-feature-AMBARI-14714 updated: [AMBARI-24430] Orchestration: Display Names are not being resolved

This is an automated email from the ASF dual-hosted git repository.

ncole pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/branch-feature-AMBARI-14714 by this push:
     new 1e5b74e  [AMBARI-24430] Orchestration: Display Names are not being resolved
1e5b74e is described below

commit 1e5b74e68a73aa00cf7349c18dd656d426619766
Author: Nate Cole <nc...@hortonworks.com>
AuthorDate: Wed Aug 8 14:49:51 2018 -0400

    [AMBARI-24430] Orchestration: Display Names are not being resolved
---
 .../ambari/server/agent/stomp/TopologyHolder.java  |  4 +-
 .../internal/UpgradeResourceProvider.java          |  2 +-
 .../java/org/apache/ambari/server/state/Mpack.java | 20 ++++++++++
 .../apache/ambari/server/state/UpgradeContext.java | 15 +++++++-
 .../apache/ambari/server/state/UpgradeHelper.java  | 44 ++++++++++------------
 .../state/stack/upgrade/ClusterGrouping.java       |  5 ++-
 .../state/stack/upgrade/ColocatedGrouping.java     | 15 ++++----
 .../server/state/stack/upgrade/Grouping.java       | 18 +++++----
 .../state/stack/upgrade/HostOrderGrouping.java     | 12 +++---
 .../state/stack/upgrade/ServiceCheckGrouping.java  |  9 +++--
 .../state/stack/upgrade/StageWrapperBuilder.java   |  9 +++--
 .../stack/upgrade/StageWrapperBuilderTest.java     |  9 +++--
 12 files changed, 98 insertions(+), 64 deletions(-)

diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/TopologyHolder.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/TopologyHolder.java
index 1cb3bf3..a2710231 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/TopologyHolder.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/TopologyHolder.java
@@ -44,7 +44,7 @@ import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
 import com.google.common.eventbus.Subscribe;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -95,7 +95,7 @@ public class TopologyHolder extends AgentClusterDataHolder<TopologyUpdateEvent>
               .setComponentName(sch.getServiceComponentName())
               .setServiceName(sch.getServiceName())
               .setVersion(sch.getVersion())
-              .setHostIds(ImmutableSet.of(sch.getHost().getHostId()))
+              .setHostIds(Sets.newHashSet(sch.getHost().getHostId()))
               .setComponentLevelParams(ambariManagementController.getTopologyComponentLevelParams(sch))
               .setCommandParams(ambariManagementController.getTopologyCommandParams(sch))
               .build();
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 2e2f988..d5e740e 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
@@ -736,7 +736,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
 
     ConfigHelper configHelper = getManagementController().getConfigHelper();
 
-    List<UpgradeGroupHolder> groups = s_upgradeHelper.createSequence(upgradeContext, upgradePlan);
+    List<UpgradeGroupHolder> groups = s_upgradeHelper.createSequence(upgradeContext);
 
     if (groups.isEmpty()) {
       throw new AmbariException("There are no groupings available");
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/Mpack.java b/ambari-server/src/main/java/org/apache/ambari/server/state/Mpack.java
index 1a23f38..9345e09 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/Mpack.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/Mpack.java
@@ -25,6 +25,7 @@ import java.util.Set;
 
 import org.apache.ambari.server.stack.RepoUtil;
 import org.apache.ambari.server.state.stack.RepositoryXml;
+import org.apache.ambari.server.state.stack.UpgradePack;
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang3.StringUtils;
 
@@ -361,6 +362,8 @@ public class Mpack {
 
     private final Mpack m_source;
     private final Mpack m_target;
+    
+    private UpgradePack m_upgradePack = null;
 
     /**
      * Constructor.
@@ -537,6 +540,23 @@ public class Mpack {
     public boolean hasVersionChanges() {
       return !m_moduleVersionChanges.isEmpty();
     }
+
+    /**
+     * Sets the upgrade pack which this summary uses for orchestration.
+     * 
+     * @param upgradePack
+     *          the upgrade pack
+     */
+    public void setUpgradePack(UpgradePack upgradePack) {
+      m_upgradePack = upgradePack;
+    }
+    
+    /**
+     * @return the upgrade pack used for orchestration
+     */
+    public UpgradePack getUpgradePack() {
+      return m_upgradePack;
+    }
   }
 
   /**
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
index f3f1b14..d74b2c6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
@@ -116,7 +116,7 @@ public class UpgradeContext {
   public static final String COMMAND_PARAM_TASKS = "tasks";
   public static final String COMMAND_PARAM_STRUCT_OUT = "structured_out";
 
-  /*
+  /**
    * The cluster that the upgrade is for.
    */
   private final Cluster m_cluster;
@@ -318,6 +318,10 @@ public class UpgradeContext {
       Long upgradePlanId = Long.valueOf(upgradeRequestMap.get(UPGRADE_PLAN_ID).toString());
       UpgradePlanEntity upgradePlan = upgradePlanDAO.findByPK(upgradePlanId);
 
+      if (null == upgradePlan) {
+        throw new AmbariException(String.format("Cannot find upgrade plan %s", upgradePlanId));
+      }
+
       m_direction = upgradePlan.getDirection();
 
       // depending on the direction, we must either have a target repository or an upgrade we are downgrading from
@@ -339,6 +343,13 @@ public class UpgradeContext {
               continue;
             }
 
+            // !!! TODO this better be resolved in the upgrade detail and non-null
+            String upgradePackName = detail.getUpgradePack();
+
+            // !!! TODO this should be moved from the stack to the mpack
+            StackInfo stack = m_metaInfo.getStack(targetMpack.getStackId());
+            summary.setUpgradePack(stack.getUpgradePacks().get(upgradePackName));
+
             m_serviceGroups.put(serviceGroup, summary);
           }
           break;
@@ -749,7 +760,7 @@ public class UpgradeContext {
    */
   @Experimental(feature=ExperimentalFeature.MPACK_UPGRADES, comment = "Needs implementation and thought")
   public boolean isSupportedInUpgrade(String serviceName) {
-    return false;
+    return true;
   }
 
   /**
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index 178c7b3..d2dedb5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -35,7 +35,6 @@ import java.util.stream.Collectors;
 import org.apache.ambari.annotations.Experimental;
 import org.apache.ambari.annotations.ExperimentalFeature;
 import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.StackAccessException;
 import org.apache.ambari.server.agent.stomp.AgentConfigsHolder;
 import org.apache.ambari.server.agent.stomp.MetadataHolder;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -63,9 +62,9 @@ import org.apache.ambari.server.orm.dao.StackDAO;
 import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
 import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
 import org.apache.ambari.server.orm.entities.StackEntity;
-import org.apache.ambari.server.orm.entities.UpgradePlanEntity;
 import org.apache.ambari.server.stack.HostsType;
 import org.apache.ambari.server.stack.MasterHostResolver;
+import org.apache.ambari.server.state.Mpack.MpackChangeSummary;
 import org.apache.ambari.server.state.stack.UpgradePack;
 import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
 import org.apache.ambari.server.state.stack.upgrade.AddComponentTask;
@@ -240,8 +239,11 @@ public class UpgradeHelper {
    * @param upgradePlan
    *          the upgrade plan to execute
    */
-  public List<UpgradeGroupHolder> createSequence(UpgradeContext context,
-      UpgradePlanEntity upgradePlan) throws AmbariException {
+  @Experimental(feature=ExperimentalFeature.UNIT_TEST_REQUIRED,
+      comment = "require testing for lifecycles and mocked clusters, upgrade plans")
+  public List<UpgradeGroupHolder> createSequence(UpgradeContext context) throws AmbariException {
+
+    Map<ServiceGroup, MpackChangeSummary> groupsInUpgrade = context.getServiceGroups();
 
     // !!! TODO there is a ton of work to do here for merging upgrade packs across lifecycles
 
@@ -249,26 +251,18 @@ public class UpgradeHelper {
 
     for (LifecycleType lifecycle : LifecycleType.ordered()) {
 
-      upgradePlan.getDetails().forEach(detail -> {
-        long mpackId = detail.getMpackTargetId();
-        StackId stackId = m_ambariMetaInfoProvider.get().getMpack(mpackId).getStackId();
-        final StackInfo stack;
-        try {
-          stack = m_ambariMetaInfoProvider.get().getStack(stackId);
-        } catch (StackAccessException e) {
-          LOG.info("Cannot access stack ");
-          return;
-        }
-        String upgradePackName = detail.getUpgradePack();
+      groupsInUpgrade.values().forEach(detail -> {
+
+        Mpack target = detail.getTarget();
+        UpgradePack upgradePack = detail.getUpgradePack();
 
-        UpgradePack upgradePack = stack.getUpgradePacks().get(upgradePackName);
         if (null == upgradePack) {
           throw new IllegalArgumentException(
-              String.format("Upgrade detail cannot find upgrade pack %s for %s", upgradePackName, stackId));
+              String.format("Upgrade detail cannot find upgrade pack %s", target));
         }
 
         try {
-          groups.addAll(createSequence(context, upgradePack, lifecycle));
+          groups.addAll(createSequence(context, upgradePack, target, lifecycle));
         } catch (AmbariException e) {
           throw new IllegalArgumentException(e);
         }
@@ -292,7 +286,7 @@ public class UpgradeHelper {
    * @return the list of holders
    */
   private List<UpgradeGroupHolder> createSequence(UpgradeContext context, UpgradePack upgradePack,
-      LifecycleType lifecycleType) throws AmbariException {
+      Mpack mpack, LifecycleType lifecycleType) throws AmbariException {
 
     Cluster cluster = context.getCluster();
     MasterHostResolver mhr = context.getResolver();
@@ -481,7 +475,7 @@ public class UpgradeHelper {
                 if (!hostsType.getHosts().isEmpty() && hostsType.hasMastersAndSecondaries()) {
                   // The order is important, first do the standby, then the active namenode.
                   hostsType.arrangeHostSecondariesFirst();
-                  builder.add(context, hostsType, service.serviceName,
+                  builder.add(context, mpack, hostsType, service.serviceName,
                       svc.isClientOnlyService(), pc, null);
                 } else {
                   LOG.warn("Could not orchestrate NameNode.  Hosts could not be resolved: hosts={}, active={}, standby={}",
@@ -493,27 +487,27 @@ public class UpgradeHelper {
                 if (isNameNodeHA && hostsType.hasMastersAndSecondaries()) {
                   // This could be any order, but the NameNodes have to know what role they are going to take.
                   // So need to make 2 stages, and add different parameters to each one.
-                  builder.add(context, HostsType.normal(hostsType.getMasters()), service.serviceName,
+                  builder.add(context, mpack, HostsType.normal(hostsType.getMasters()), service.serviceName,
                       svc.isClientOnlyService(), pc, nameNodeRole("active"));
 
-                  builder.add(context, HostsType.normal(hostsType.getSecondaries()), service.serviceName,
+                  builder.add(context, mpack, HostsType.normal(hostsType.getSecondaries()), service.serviceName,
                       svc.isClientOnlyService(), pc, nameNodeRole("standby"));
                 } else {
                   // If no NameNode HA, then don't need to change hostsType.hosts since there should be exactly one.
-                  builder.add(context, hostsType, service.serviceName,
+                  builder.add(context, mpack, hostsType, service.serviceName,
                       svc.isClientOnlyService(), pc, null);
                 }
 
                 break;
             }
           } else {
-            builder.add(context, hostsType, service.serviceName,
+            builder.add(context, mpack, hostsType, service.serviceName,
                 svc.isClientOnlyService(), pc, null);
           }
         }
       }
 
-      List<StageWrapper> proxies = builder.build(context);
+      List<StageWrapper> proxies = builder.build(context, mpack);
 
       if (CollectionUtils.isNotEmpty(proxies)) {
 
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java
index 70aa602..6ec5a65 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ClusterGrouping.java
@@ -40,6 +40,7 @@ import org.apache.ambari.server.stack.HostsType;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.MaintenanceState;
+import org.apache.ambari.server.state.Mpack;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
 import org.apache.commons.lang.StringUtils;
@@ -153,7 +154,7 @@ public class ClusterGrouping extends Grouping {
     }
 
     @Override
-    public void add(UpgradeContext ctx, HostsType hostsType, String service,
+    public void add(UpgradeContext ctx, Mpack mpack, HostsType hostsType, String service,
         boolean clientOnly, ProcessingComponent pc, Map<String, String> params) {
       // !!! no-op in this case
     }
@@ -162,7 +163,7 @@ public class ClusterGrouping extends Grouping {
      * {@inheritDoc}
      */
     @Override
-    public List<StageWrapper> build(UpgradeContext upgradeContext,
+    public List<StageWrapper> build(UpgradeContext upgradeContext, Mpack mpack,
         List<StageWrapper> stageWrappers) {
 
       if (null == executionStages) {
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 9e3f21a..71df27a 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
@@ -32,6 +32,7 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
 import org.apache.ambari.server.stack.HostsType;
+import org.apache.ambari.server.state.Mpack;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
 import org.apache.ambari.server.state.stack.upgrade.StageWrapper.Type;
@@ -83,7 +84,7 @@ public class ColocatedGrouping extends Grouping {
     }
 
     @Override
-    public void add(UpgradeContext context, HostsType hostsType, String service,
+    public void add(UpgradeContext context, Mpack mpack, HostsType hostsType, String service,
         boolean clientOnly, ProcessingComponent pc, Map<String, String> params) {
 
       int count = Double.valueOf(Math.ceil(
@@ -114,7 +115,7 @@ public class ColocatedGrouping extends Grouping {
           proxy = new TaskProxy();
           proxy.clientOnly = clientOnly;
           proxy.message = getStageText("Preparing",
-              context.getDisplayName(null, service, pc.name), Collections.singleton(host));
+              context.getDisplayName(mpack, service, pc.name), Collections.singleton(host));
           proxy.tasks.addAll(TaskWrapperBuilder.getTaskList(service, pc.name, singleHostsType, tasks, params));
           proxy.service = service;
           proxy.component = pc.name;
@@ -133,7 +134,7 @@ public class ColocatedGrouping extends Grouping {
           proxy.component = pc.name;
           proxy.type = Type.RESTART;
           proxy.message = getStageText("Restarting",
-              context.getDisplayName(null, service, pc.name), Collections.singleton(host));
+              context.getDisplayName(mpack, service, pc.name), Collections.singleton(host));
           targetList.add(proxy);
         }
 
@@ -162,7 +163,7 @@ public class ColocatedGrouping extends Grouping {
      * {@inheritDoc}
      */
     @Override
-    public List<StageWrapper> build(UpgradeContext upgradeContext, List<StageWrapper> stageWrappers) {
+    public List<StageWrapper> build(UpgradeContext upgradeContext, Mpack mpack, List<StageWrapper> stageWrappers) {
 
       final List<Task> visitedServerSideTasks = new ArrayList<>();
 
@@ -199,7 +200,7 @@ public class ColocatedGrouping extends Grouping {
         List<String> messages = new ArrayList<>();
         messages.add(m_batch.message);
         task.messages = messages;
-        formatFirstBatch(upgradeContext, task, befores);
+        formatFirstBatch(upgradeContext, mpack, task, befores);
 
         StageWrapper wrapper = new StageWrapper(
             StageWrapper.Type.SERVER_SIDE_ACTION,
@@ -294,7 +295,7 @@ public class ColocatedGrouping extends Grouping {
      * @param task      the manual task representing the verification message
      * @param wrappers  the list of stage wrappers
      */
-    private void formatFirstBatch(UpgradeContext ctx, ManualTask task, List<StageWrapper> wrappers) {
+    private void formatFirstBatch(UpgradeContext ctx, Mpack mpack, ManualTask task, List<StageWrapper> wrappers) {
       Set<String> names = new LinkedHashSet<>();
       Map<String, Set<String>> compLocations = new HashMap<>();
 
@@ -310,7 +311,7 @@ public class ColocatedGrouping extends Grouping {
               compLocations.get(host).add(tw.getComponent());
             }
 
-            names.add(ctx.getDisplayName(null,
+            names.add(ctx.getDisplayName(mpack,
                 tw.getService(), tw.getComponent()));
           }
         }
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 d3112e5..d6d9823 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
@@ -33,6 +33,7 @@ import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.stack.HostsType;
+import org.apache.ambari.server.state.Mpack;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.stack.UpgradePack;
 import org.apache.ambari.server.state.stack.UpgradePack.OrderService;
@@ -136,7 +137,7 @@ public class Grouping {
      * @param params additional parameters
      */
     @Override
-    public void add(UpgradeContext context, HostsType hostsType, String service,
+    public void add(UpgradeContext context, Mpack mpack, HostsType hostsType, String service,
        boolean clientOnly, ProcessingComponent pc, Map<String, String> params) {
 
       // Construct the pre tasks during Upgrade/Downgrade direction.
@@ -149,7 +150,7 @@ public class Grouping {
         List<TaskWrapper> preTasks = TaskWrapperBuilder.getTaskList(service, pc.name, hostsType, bucket.tasks, params);
         List<List<TaskWrapper>> organizedTasks = organizeTaskWrappersBySyncRules(preTasks);
         for (List<TaskWrapper> tasks : organizedTasks) {
-          addTasksToStageInBatches(tasks, "Preparing", context, service, pc, params);
+          addTasksToStageInBatches(tasks, "Preparing", context, mpack, service, pc, params);
         }
       }
 
@@ -157,7 +158,7 @@ public class Grouping {
       Task t = resolveTask(context, pc);
       if (null != t) {
         TaskWrapper tw = new TaskWrapper(service, pc.name, hostsType.getHosts(), params, t);
-        addTasksToStageInBatches(Collections.singletonList(tw), t.getActionVerb(), context, service, pc, params);
+        addTasksToStageInBatches(Collections.singletonList(tw), t.getActionVerb(), context, mpack, service, pc, params);
       }
 
       // Construct the post tasks during Upgrade/Downgrade direction.
@@ -166,7 +167,7 @@ public class Grouping {
         List<TaskWrapper> postTasks = TaskWrapperBuilder.getTaskList(service, pc.name, hostsType, bucket.tasks, params);
         List<List<TaskWrapper>> organizedTasks = organizeTaskWrappersBySyncRules(postTasks);
         for (List<TaskWrapper> tasks : organizedTasks) {
-          addTasksToStageInBatches(tasks, "Completing", context, service, pc, params);
+          addTasksToStageInBatches(tasks, "Completing", context, mpack, service, pc, params);
         }
       }
 
@@ -215,7 +216,8 @@ public class Grouping {
      * @param pc Processing Component
      * @param params Params to add to the stage.
      */
-    private void addTasksToStageInBatches(List<TaskWrapper> tasks, String verb, UpgradeContext ctx, String service, ProcessingComponent pc, Map<String, String> params) {
+    private void addTasksToStageInBatches(List<TaskWrapper> tasks, String verb,
+        UpgradeContext ctx, Mpack mpack, String service, ProcessingComponent pc, Map<String, String> params) {
       if (tasks == null || tasks.isEmpty() || tasks.get(0).getTask() == null) {
         return;
       }
@@ -242,7 +244,7 @@ public class Grouping {
         for (Set<String> hostSubset : hostSets) {
           batchNum++;
 
-          String stageText = getStageText(verb, ctx.getDisplayName(null, service, pc.name),
+          String stageText = getStageText(verb, ctx.getDisplayName(mpack, service, pc.name),
               hostSubset, batchNum, numBatchesNeeded);
 
           StageWrapper stage = new StageWrapper(
@@ -261,7 +263,7 @@ public class Grouping {
      * @return Return the stages, which may potentially be followed by service checks.
      */
     @Override
-    public List<StageWrapper> build(UpgradeContext upgradeContext,
+    public List<StageWrapper> build(UpgradeContext upgradeContext, Mpack mpack,
         List<StageWrapper> stageWrappers) {
 
       // insert all pre-processed stage wrappers first
@@ -275,7 +277,7 @@ public class Grouping {
         tasks.add(new TaskWrapper(
             service, "", Collections.emptySet(), new ServiceCheckTask()));
 
-        displays.add(upgradeContext.getDisplayName(null, service));
+        displays.add(upgradeContext.getDisplayName(mpack, service));
       }
 
       if (upgradeContext.getDirection().isUpgrade() && m_serviceCheck
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java
index ddb38f4..4b1fa4e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java
@@ -101,14 +101,14 @@ public class HostOrderGrouping extends Grouping {
     }
 
     @Override
-    public void add(UpgradeContext upgradeContext, HostsType hostsType, String service,
+    public void add(UpgradeContext upgradeContext, Mpack mpack, HostsType hostsType, String service,
         boolean clientOnly, ProcessingComponent pc, Map<String, String> params) {
       // !!! NOOP, this called when there are services in the group, and there
       // are none for host-ordered.
     }
 
     @Override
-    public List<StageWrapper> build(UpgradeContext upgradeContext,
+    public List<StageWrapper> build(UpgradeContext upgradeContext, Mpack mpack,
         List<StageWrapper> stageWrappers) throws AmbariException {
 
       List<StageWrapper> wrappers = new ArrayList<>(stageWrappers);
@@ -119,7 +119,7 @@ public class HostOrderGrouping extends Grouping {
             wrappers.addAll(buildHosts(upgradeContext, orderItem.getActionItems()));
             break;
           case SERVICE_CHECK:
-            wrappers.addAll(buildServiceChecks(upgradeContext, orderItem.getActionItems()));
+            wrappers.addAll(buildServiceChecks(upgradeContext, mpack, orderItem.getActionItems()));
             break;
         }
       }
@@ -302,7 +302,9 @@ public class HostOrderGrouping extends Grouping {
      * @param upgradeContext  the context
      * @return  the wrappers for a host
      */
-    private List<StageWrapper> buildServiceChecks(UpgradeContext upgradeContext, List<String> serviceChecks) {
+    private List<StageWrapper> buildServiceChecks(UpgradeContext upgradeContext,
+        Mpack mpack, List<String> serviceChecks) {
+
       if (CollectionUtils.isEmpty(serviceChecks)) {
         return Collections.emptyList();
       }
@@ -325,7 +327,7 @@ public class HostOrderGrouping extends Grouping {
         }
 
         StageWrapper wrapper = new StageWrapper(StageWrapper.Type.SERVICE_CHECK,
-            String.format("Service Check %s", upgradeContext.getDisplayName(null, serviceName)),
+            String.format("Service Check %s", upgradeContext.getDisplayName(mpack, serviceName)),
             new TaskWrapper(serviceName, "", Collections.emptySet(), new ServiceCheckTask()));
 
         wrappers.add(wrapper);
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java
index cee28e8..299bf34 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/ServiceCheckGrouping.java
@@ -36,6 +36,7 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.stack.HostsType;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.CommandScriptDefinition;
+import org.apache.ambari.server.state.Mpack;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.StackId;
@@ -116,7 +117,7 @@ public class ServiceCheckGrouping extends Grouping {
      * {@inheritDoc}
      */
     @Override
-    public void add(UpgradeContext ctx, HostsType hostsType, String service,
+    public void add(UpgradeContext ctx, Mpack mpack, HostsType hostsType, String service,
         boolean clientOnly, ProcessingComponent pc, Map<String, String> params) {
       // !!! nothing to do here
     }
@@ -125,7 +126,7 @@ public class ServiceCheckGrouping extends Grouping {
      * {@inheritDoc}
      */
     @Override
-    public List<StageWrapper> build(UpgradeContext upgradeContext,
+    public List<StageWrapper> build(UpgradeContext upgradeContext, Mpack mpack,
         List<StageWrapper> stageWrappers) {
       m_cluster = upgradeContext.getCluster();
       m_metaInfo = upgradeContext.getAmbariMetaInfo();
@@ -143,7 +144,7 @@ public class ServiceCheckGrouping extends Grouping {
       for (String service : priorityServices) {
         if (checkServiceValidity(upgradeContext, service, serviceMap)) {
           StageWrapper wrapper = new ServiceCheckStageWrapper(service,
-              upgradeContext.getDisplayName(null, service), true);
+              upgradeContext.getDisplayName(mpack, service), true);
 
           result.add(wrapper);
           clusterServices.remove(service);
@@ -159,7 +160,7 @@ public class ServiceCheckGrouping extends Grouping {
 
           if (checkServiceValidity(upgradeContext, service, serviceMap)) {
             StageWrapper wrapper = new ServiceCheckStageWrapper(service,
-                upgradeContext.getDisplayName(null, service), false);
+                upgradeContext.getDisplayName(mpack, service), false);
 
             result.add(wrapper);
           }
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilder.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilder.java
index d3b42ac..a83781d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilder.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilder.java
@@ -26,6 +26,7 @@ import java.util.Set;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.serveraction.upgrades.AutoSkipFailedSummaryAction;
 import org.apache.ambari.server.stack.HostsType;
+import org.apache.ambari.server.state.Mpack;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
 import org.apache.commons.collections.CollectionUtils;
@@ -76,7 +77,7 @@ public abstract class StageWrapperBuilder {
    * @param params
    *          additional parameters
    */
-  public abstract void add(UpgradeContext upgradeContext, HostsType hostsType, String service,
+  public abstract void add(UpgradeContext upgradeContext, Mpack mpack, HostsType hostsType, String service,
       boolean clientOnly, ProcessingComponent pc, Map<String, String> params);
 
   /**
@@ -87,9 +88,9 @@ public abstract class StageWrapperBuilder {
    *          the upgrade context (not {@code null}).
    * @return a list of stages, never {@code null}
    */
-  public final List<StageWrapper> build(UpgradeContext upgradeContext) throws AmbariException {
+  public final List<StageWrapper> build(UpgradeContext upgradeContext, Mpack mpack) throws AmbariException {
     List<StageWrapper> stageWrappers = beforeBuild(upgradeContext);
-    stageWrappers = build(upgradeContext, stageWrappers);
+    stageWrappers = build(upgradeContext, mpack, stageWrappers);
     stageWrappers = afterBuild(upgradeContext, stageWrappers);
     return stageWrappers;
   }
@@ -119,7 +120,7 @@ public abstract class StageWrapperBuilder {
    * @return the stage wrapper list, (never {@code null})
    */
   public abstract List<StageWrapper> build(UpgradeContext upgradeContext,
-      List<StageWrapper> stageWrappers) throws AmbariException;
+      Mpack mpack, List<StageWrapper> stageWrappers) throws AmbariException;
 
   /**
    * Performs any post-processing that needs to be performed on the list of
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
index 5872281..c523cf3 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/StageWrapperBuilderTest.java
@@ -27,6 +27,7 @@ import org.apache.ambari.annotations.ExperimentalFeature;
 import org.apache.ambari.server.serveraction.upgrades.AutoSkipFailedSummaryAction;
 import org.apache.ambari.server.stack.HostsType;
 import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Mpack;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
@@ -65,7 +66,7 @@ public class StageWrapperBuilderTest extends EasyMockSupport {
     replayAll();
 
     MockStageWrapperBuilder builder = new MockStageWrapperBuilder(null);
-    List<StageWrapper> stageWrappers = builder.build(upgradeContext);
+    List<StageWrapper> stageWrappers = builder.build(upgradeContext, null);
     List<Integer> invocationOrder = builder.getInvocationOrder();
 
     Assert.assertEquals(Integer.valueOf(0), invocationOrder.get(0));
@@ -108,7 +109,7 @@ public class StageWrapperBuilderTest extends EasyMockSupport {
 
     builder.setMockStageWrappers(mockStageWrappers);
 
-    List<StageWrapper> stageWrappers = builder.build(upgradeContext);
+    List<StageWrapper> stageWrappers = builder.build(upgradeContext, null);
     Assert.assertEquals(2, stageWrappers.size());
 
     StageWrapper skipSummaryWrapper = stageWrappers.get(1);
@@ -156,7 +157,7 @@ public class StageWrapperBuilderTest extends EasyMockSupport {
      * {@inheritDoc}
      */
     @Override
-    public void add(UpgradeContext upgradeContext, HostsType hostsType, String service,
+    public void add(UpgradeContext upgradeContext, Mpack mpack, HostsType hostsType, String service,
         boolean clientOnly, ProcessingComponent pc, Map<String, String> params) {
     }
 
@@ -164,7 +165,7 @@ public class StageWrapperBuilderTest extends EasyMockSupport {
      * {@inheritDoc}
      */
     @Override
-    public List<StageWrapper> build(UpgradeContext upgradeContext,
+    public List<StageWrapper> build(UpgradeContext upgradeContext, Mpack mpack,
         List<StageWrapper> stageWrappers) {
       m_invocationOrder.add(1);
       return m_stageWrappers;