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 b1e9369  [AMBARI-24481] Orchestration: Remove singular upgrade pack 
from UpgradeContext; resolve ServiceGroup names (#2081)
b1e9369 is described below

commit b1e93699e609e8cb52e1f9228fcefca6e6805196
Author: ncole <[email protected]>
AuthorDate: Wed Aug 15 15:37:06 2018 -0400

    [AMBARI-24481] Orchestration: Remove singular upgrade pack from 
UpgradeContext; resolve ServiceGroup names (#2081)
---
 .../internal/UpgradeResourceProvider.java          | 61 ++++++++++++----------
 .../apache/ambari/server/state/UpgradeContext.java | 27 +++-------
 .../apache/ambari/server/state/UpgradeHelper.java  | 18 +++++--
 3 files changed, 55 insertions(+), 51 deletions(-)

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 d5e740e..7bd3a91 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
@@ -86,6 +86,7 @@ import 
org.apache.ambari.server.serveraction.kerberos.KerberosOperationException
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.ConfigHelper;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.UpgradeContextFactory;
@@ -127,8 +128,6 @@ import com.google.inject.persist.Transactional;
 @StaticallyInject
 public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider {
 
-  static final String DUMMY_SERVICE_GROUP = "CORE"; // FIXME need a service 
group name, since null or "" is not allowed
-
   public static final String UPGRADE_CLUSTER_NAME = "Upgrade/cluster_name";
   public static final String UPGRADE_PLAN_ID = "Upgrade/upgrade_plan_id";
   public static final String UPGRADE_TYPE = "Upgrade/upgrade_type";
@@ -727,10 +726,10 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
    * @throws AmbariException
    * @throws AuthorizationException
    */
-  protected UpgradeEntity createUpgrade(UpgradeContext upgradeContext, 
UpgradePlanEntity upgradePlan)
+  @Transactional(rollbackOn = {RuntimeException.class, AmbariException.class, 
AuthorizationException.class})
+  UpgradeEntity createUpgrade(UpgradeContext upgradeContext, UpgradePlanEntity 
upgradePlan)
       throws AmbariException, AuthorizationException {
 
-    UpgradePack pack = upgradeContext.getUpgradePack();
     Cluster cluster = upgradeContext.getCluster();
     Direction direction = upgradeContext.getDirection();
 
@@ -744,7 +743,7 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
 
     // Non Rolling Upgrades require a group with name 
"UPDATE_DESIRED_REPOSITORY_ID".
     // This is needed as a marker to indicate which version to use when an 
upgrade is paused.
-    if (pack.getType() == UpgradeType.EXPRESS) {
+    if (upgradeContext.getType() == UpgradeType.EXPRESS) {
       boolean foundUpdateDesiredRepositoryIdGrouping = false;
       for (UpgradeGroupHolder group : groups) {
         if (group.groupClass == UpdateStackGrouping.class) {
@@ -755,8 +754,8 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
 
       if (!foundUpdateDesiredRepositoryIdGrouping) {
         throw new AmbariException(String.format(
-            "Express upgrade packs are required to have a group of type %s. 
The upgrade pack %s is missing this grouping.",
-            "update-stack", pack.getName()));
+            "Express upgrade packs are required to have a group of type %s.",
+            "update-stack"));
       }
     }
 
@@ -766,7 +765,7 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
     UpgradeEntity upgrade = new UpgradeEntity();
     upgrade.setClusterId(cluster.getClusterId());
     upgrade.setDirection(direction);
-    upgrade.setUpgradeType(pack.getType());
+    upgrade.setUpgradeType(upgradeContext.getType());
     
upgrade.setAutoSkipComponentFailures(upgradeContext.isComponentFailureAutoSkipped());
     
upgrade.setAutoSkipServiceCheckFailures(upgradeContext.isServiceCheckFailureAutoSkipped());
     upgrade.setDowngradeAllowed(upgradeContext.isDowngradeAllowed());
@@ -776,7 +775,7 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
     addComponentHistoryToUpgrade(cluster, upgrade, upgradeContext);
 
     // update configs and move mpack versions for some upgrade types
-    switch (pack.getType()) {
+    switch (upgradeContext.getType()) {
       case ROLLING:
       case HOST_ORDERED: {
         s_upgradeHelper.updateDesiredMpacksAndConfigs(upgradeContext);
@@ -792,12 +791,15 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
     //
     // HDP 2.2 to 2.3 should start with the config-upgrade.xml from HDP 2.2
     // HDP 2.2 to 2.4 should start with HDP 2.2 and merge in HDP 2.3's 
config-upgrade.xml
-    ConfigUpgradePack configUpgradePack = 
ConfigurationPackBuilder.build(upgradeContext);
+
 
     // create the upgrade and request
     for (UpgradeGroupHolder group : groups) {
       List<UpgradeItemEntity> itemEntities = new ArrayList<>();
 
+      @Experimental(feature=ExperimentalFeature.MPACK_UPGRADES, comment="to be 
implemented")
+      ConfigUpgradePack configUpgradePack = 
ConfigurationPackBuilder.build(upgradeContext);
+
       for (StageWrapper wrapper : group.items) {
         switch(wrapper.getType()) {
           case SERVER_SIDE_ACTION:{
@@ -817,6 +819,7 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
               itemEntity.setHosts(wrapper.getHostsJson());
 
               injectVariables(configHelper, cluster, itemEntity);
+
               if (makeServerSideStage(group, upgradeContext, null, req,
                   itemEntity, (ServerSideActionTask) task, configUpgradePack)) 
{
                 itemEntities.add(itemEntity);
@@ -968,21 +971,22 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
     boolean skippable = group.skippable;
     boolean supportsAutoSkipOnFailure = group.supportsAutoSkipOnFailure;
     boolean allowRetry = group.allowRetry;
+    ServiceGroup serviceGroup = group.serviceGroup;
 
     switch (wrapper.getType()) {
       case CONFIGURE:
       case START:
       case STOP:
       case RESTART:
-        makeCommandStage(context, request, stackId, entity, wrapper, skippable,
+        makeCommandStage(context, request, stackId, entity, serviceGroup, 
wrapper, skippable,
             supportsAutoSkipOnFailure, allowRetry);
         break;
       case UPGRADE_TASKS:
-        makeActionStage(context, request, stackId, entity, wrapper, skippable,
+        makeActionStage(context, request, stackId, entity, serviceGroup, 
wrapper, skippable,
             supportsAutoSkipOnFailure, allowRetry);
         break;
       case SERVICE_CHECK:
-        makeServiceCheckStage(context, request, stackId, entity, wrapper,
+        makeServiceCheckStage(context, request, stackId, entity, serviceGroup, 
wrapper,
             skippable, supportsAutoSkipOnFailure, allowRetry);
         break;
       default:
@@ -1032,7 +1036,7 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
    * @throws AmbariException
    */
   private void makeActionStage(UpgradeContext context, RequestStageContainer 
request,
-      StackId stackId, UpgradeItemEntity entity,
+      StackId stackId, UpgradeItemEntity entity, ServiceGroup serviceGroup,
       StageWrapper wrapper, boolean skippable, boolean 
supportsAutoSkipOnFailure,
       boolean allowRetry) throws AmbariException {
 
@@ -1063,9 +1067,8 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
     applyAdditionalParameters(wrapper, params);
 
     // add each host to this stage
-    //TODO pass service group name once upgrade is fixed
-    RequestResourceFilter filter = new 
RequestResourceFilter(DUMMY_SERVICE_GROUP, serviceName, componentName,
-        new ArrayList<>(wrapper.getHosts()));
+    RequestResourceFilter filter = new 
RequestResourceFilter(serviceGroup.getServiceGroupName(),
+        serviceName, componentName, new ArrayList<>(wrapper.getHosts()));
 
     ActionExecutionContext actionContext = 
buildActionExecutionContext(cluster, context,
         EXECUTE_TASK_ROLE, stackId, Collections.singletonList(filter), params,
@@ -1121,7 +1124,7 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
    * @throws AmbariException
    */
   private void makeCommandStage(UpgradeContext context, RequestStageContainer 
request,
-      StackId stackId, UpgradeItemEntity entity,
+      StackId stackId, UpgradeItemEntity entity, ServiceGroup serviceGroup,
       StageWrapper wrapper, boolean skippable, boolean 
supportsAutoSkipOnFailure,
       boolean allowRetry) throws AmbariException {
 
@@ -1130,13 +1133,9 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
     List<RequestResourceFilter> filters = new ArrayList<>();
 
     for (TaskWrapper tw : wrapper.getTasks()) {
-      String serviceName = tw.getService();
-      String componentName = tw.getComponent();
-
       // add each host to this stage
-      //TODO pass service group name once upgrade is fixed
-      filters.add(new RequestResourceFilter(DUMMY_SERVICE_GROUP, 
tw.getService(), tw.getComponent(),
-          new ArrayList<>(tw.getHosts())));
+      filters.add(new RequestResourceFilter(serviceGroup.getServiceGroupName(),
+          tw.getService(), tw.getComponent(), new ArrayList<>(tw.getHosts())));
     }
 
     String function = null;
@@ -1198,15 +1197,15 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
   }
 
   private void makeServiceCheckStage(UpgradeContext context, 
RequestStageContainer request,
-      StackId stackId, UpgradeItemEntity entity,
+      StackId stackId, UpgradeItemEntity entity, ServiceGroup serviceGroup,
       StageWrapper wrapper, boolean skippable, boolean 
supportsAutoSkipOnFailure,
       boolean allowRetry) throws AmbariException {
 
     List<RequestResourceFilter> filters = new ArrayList<>();
 
     for (TaskWrapper tw : wrapper.getTasks()) {
-      //TODO pass service group name once upgrade is fixed
-      filters.add(new RequestResourceFilter(DUMMY_SERVICE_GROUP, 
tw.getService(), "", Collections.emptyList()));
+      filters.add(new RequestResourceFilter(serviceGroup.getServiceGroupName(),
+          tw.getService(), "", Collections.emptyList()));
     }
 
     Cluster cluster = context.getCluster();
@@ -1261,7 +1260,7 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
       ServerSideActionTask task, ConfigUpgradePack configUpgradePack) throws 
AmbariException {
 
     Cluster cluster = context.getCluster();
-    UpgradePack upgradePack = context.getUpgradePack();
+    UpgradePack upgradePack = group.upgradePack;
 
     Map<String, String> commandParams = getNewParameterMap(request, context);
     commandParams.put(UpgradeContext.COMMAND_PARAM_UPGRADE_PACK, 
upgradePack.getName());
@@ -1637,7 +1636,10 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
      * @return the {@link ConfigUpgradePack} which contains all of the 
necessary
      *         configuration definitions for the upgrade.
      */
+    @Experimental(feature=ExperimentalFeature.MPACK_UPGRADES,
+        comment="to be implemented when configs are worked out")
     public static ConfigUpgradePack build(UpgradeContext cx) {
+      /*
       final UpgradePack upgradePack = cx.getUpgradePack();
       final StackId stackId = null;
 
@@ -1645,6 +1647,9 @@ public class UpgradeResourceProvider extends 
AbstractControllerResourceProvider
         stackId.getStackName(), stackId.getStackVersion());
 
       return configUpgradePack;
+      */
+
+      return null;
     }
   }
 
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 e704d91..513a727 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
@@ -433,25 +433,6 @@ public class UpgradeContext {
   }
 
   /**
-   * Gets the upgrade pack for this upgrade.
-   *
-   * @return the upgrade pack
-   */
-  public UpgradePack getUpgradePack() {
-    return m_upgradePack;
-  }
-
-  /**
-   * Sets the upgrade pack for this upgrade
-   *
-   * @param upgradePack
-   *          the upgrade pack to set
-   */
-  public void setUpgradePack(UpgradePack upgradePack) {
-    m_upgradePack = upgradePack;
-  }
-
-  /**
    * Gets the cluster that the upgrade is for.
    *
    * @return the cluster (never {@code null}).
@@ -601,7 +582,13 @@ public class UpgradeContext {
       return false;
     }
 
-    return m_upgradePack.isDowngradeAllowed();
+    for (MpackChangeSummary summary : m_serviceGroups.values()) {
+      if (!summary.getUpgradePack().isDowngradeAllowed()) {
+        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 d2dedb5..edb3e63 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
@@ -251,7 +251,7 @@ public class UpgradeHelper {
 
     for (LifecycleType lifecycle : LifecycleType.ordered()) {
 
-      groupsInUpgrade.values().forEach(detail -> {
+      groupsInUpgrade.forEach((serviceGroup, detail) -> {
 
         Mpack target = detail.getTarget();
         UpgradePack upgradePack = detail.getUpgradePack();
@@ -262,7 +262,7 @@ public class UpgradeHelper {
         }
 
         try {
-          groups.addAll(createSequence(context, upgradePack, target, 
lifecycle));
+          groups.addAll(createSequence(context, upgradePack, target, 
serviceGroup, lifecycle));
         } catch (AmbariException e) {
           throw new IllegalArgumentException(e);
         }
@@ -286,7 +286,7 @@ public class UpgradeHelper {
    * @return the list of holders
    */
   private List<UpgradeGroupHolder> createSequence(UpgradeContext context, 
UpgradePack upgradePack,
-      Mpack mpack, LifecycleType lifecycleType) throws AmbariException {
+      Mpack mpack, ServiceGroup serviceGroup, LifecycleType lifecycleType) 
throws AmbariException {
 
     Cluster cluster = context.getCluster();
     MasterHostResolver mhr = context.getResolver();
@@ -320,6 +320,8 @@ public class UpgradeHelper {
       groupHolder.supportsAutoSkipOnFailure = group.supportsAutoSkipOnFailure;
       groupHolder.allowRetry = group.allowRetry;
       groupHolder.processingGroup = group.isProcessingGroup();
+      groupHolder.upgradePack = upgradePack;
+      groupHolder.serviceGroup = serviceGroup;
 
       // !!! all downgrades are skippable
       if (context.getDirection().isDowngrade()) {
@@ -787,6 +789,16 @@ public class UpgradeHelper {
     public List<StageWrapper> items = new ArrayList<>();
 
     /**
+     * Upgrade Pack backing this grouping
+     */
+    public UpgradePack upgradePack;
+
+    /**
+     * Service Group backing this grouping
+     */
+    public ServiceGroup serviceGroup;
+
+    /**
      * {@inheritDoc}
      */
     @Override

Reply via email to