You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by am...@apache.org on 2018/01/05 07:56:00 UTC

[04/45] ambari git commit: AMBARI-22679. RU: Service action failed with NullPointer on Downgrade after RU (dgrinenko via dlysnichenko)

AMBARI-22679. RU: Service action failed with NullPointer on Downgrade after RU (dgrinenko via dlysnichenko)


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

Branch: refs/heads/branch-feature-AMBARI-22008-isilon
Commit: 55f095abb3d910b8e41b4c8054143c1d6d64fdf2
Parents: 32092da
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Fri Dec 22 19:25:55 2017 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Fri Dec 22 19:27:12 2017 +0200

----------------------------------------------------------------------
 .../internal/UpgradeResourceProvider.java       | 31 +++++++--------
 .../ambari/server/state/UpgradeContext.java     | 14 +++++++
 .../state/stack/ConfigUpgradeValidityTest.java  | 42 ++++++++++++++++++--
 3 files changed, 68 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/55f095ab/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 1fbf130..7f38740 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
@@ -17,8 +17,6 @@
  */
 package org.apache.ambari.server.controller.internal;
 
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOOKS_FOLDER;
-import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SERVICE_PACKAGE_FOLDER;
 
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -82,9 +80,7 @@ import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponent;
-import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.StackInfo;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.UpgradeContextFactory;
 import org.apache.ambari.server.state.UpgradeHelper;
@@ -766,16 +762,12 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
       s_upgradeHelper.updateDesiredRepositoriesAndConfigs(upgradeContext);
     }
 
-    @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES, comment = "This is SO VERY wrong")
-    StackId configurationPackSourceStackId = upgradeContext.getSourceVersions().values().iterator().next().getStackId();
-
     // resolve or build a proper config upgrade pack - always start out with the config pack
     // for the current stack and merge into that
     //
     // 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(pack,
-        configurationPackSourceStackId);
+    ConfigUpgradePack configUpgradePack = ConfigurationPackBuilder.build(upgradeContext);
 
     // create the upgrade and request
     for (UpgradeGroupHolder group : groups) {
@@ -1603,17 +1595,24 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
      * Builds the configurations to use for the specified upgrade and source
      * stack.
      *
-     * @param upgradePack
-     *          the upgrade pack (not {@code null}).
-     * @param sourceStackId
-     *          the source stack (not {@code null}).
+     * @param cx
+     *          the upgrade context(not {@code null}).
      * @return the {@link ConfigUpgradePack} which contains all of the necessary
      *         configuration definitions for the upgrade.
      */
-    public static ConfigUpgradePack build(UpgradePack upgradePack, StackId sourceStackId) {
+    public static ConfigUpgradePack build(UpgradeContext cx) {
+      final UpgradePack upgradePack = cx.getUpgradePack();
+      final StackId stackId;
+
+      if (cx.getDirection() == Direction.UPGRADE) {
+        stackId = cx.getStackIdFromVersions(cx.getSourceVersions());
+      } else {
+        stackId = cx.getStackIdFromVersions(cx.getTargetVersions());
+      }
+
       List<UpgradePack.IntermediateStack> intermediateStacks = upgradePack.getIntermediateStacks();
       ConfigUpgradePack configUpgradePack = s_metaProvider.get().getConfigUpgradePack(
-          sourceStackId.getStackName(), sourceStackId.getStackVersion());
+        stackId.getStackName(), stackId.getStackVersion());
 
       // merge in any intermediate stacks
       if (null != intermediateStacks) {
@@ -1623,7 +1622,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider
 
         for (UpgradePack.IntermediateStack intermediateStack : intermediateStacks) {
           ConfigUpgradePack intermediateConfigUpgradePack = s_metaProvider.get().getConfigUpgradePack(
-              sourceStackId.getStackName(), intermediateStack.version);
+            stackId.getStackName(), intermediateStack.version);
 
           configPacksToMerge.add(intermediateConfigUpgradePack);
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/55f095ab/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java
----------------------------------------------------------------------
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 2b91bac..befa31b 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
@@ -529,6 +529,20 @@ public class UpgradeContext {
   }
 
   /**
+   * Getting stackId from the set of versions. Is is possible until we upgrading components on the same stack.
+   *
+   * Note: Function should be modified for cross-stack upgrade.
+   *
+   * @param version {@link Set} of services repository versions
+   * @return
+   * {@link StackId} based on provided versions
+   */
+  @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES, comment="This is wrong")
+  public StackId getStackIdFromVersions(Map<String, RepositoryVersionEntity> version) {
+    return version.values().iterator().next().getStackId();
+  }
+
+  /**
    * Gets the upgrade pack for this upgrade.
    *
    * @return the upgrade pack

http://git-wip-us.apache.org/repos/asf/ambari/blob/55f095ab/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java
index 2930590..3d8c5e7 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/ConfigUpgradeValidityTest.java
@@ -31,9 +31,17 @@ import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.internal.UpgradeResourceProvider.ConfigurationPackBuilder;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity;
 import org.apache.ambari.server.stack.ModuleFileUnmarshaller;
+import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.StackInfo;
+import org.apache.ambari.server.state.UpgradeContext;
+import org.apache.ambari.server.state.UpgradeContextFactory;
+import org.apache.ambari.server.state.cluster.ClusterImpl;
 import org.apache.ambari.server.state.stack.UpgradePack.ProcessingComponent;
 import org.apache.ambari.server.state.stack.upgrade.ClusterGrouping;
 import org.apache.ambari.server.state.stack.upgrade.ClusterGrouping.ExecuteStage;
@@ -46,6 +54,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.filefilter.FileFilterUtils;
 import org.apache.commons.io.filefilter.IOFileFilter;
 import org.apache.commons.lang.StringUtils;
+import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -70,6 +79,7 @@ public class ConfigUpgradeValidityTest {
 
   private Injector injector;
   private AmbariMetaInfo ambariMetaInfo;
+  private UpgradeContextFactory upgradeContextFactory;
 
   private int validatedConfigCount = 0;
 
@@ -86,6 +96,7 @@ public class ConfigUpgradeValidityTest {
     injector.getInstance(GuiceJpaInitializer.class);
 
     ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
+    upgradeContextFactory = injector.getInstance(UpgradeContextFactory.class);
   }
 
   @After
@@ -104,6 +115,8 @@ public class ConfigUpgradeValidityTest {
     Collection<StackInfo> stacks = ambariMetaInfo.getStacks();
     Assert.assertFalse(stacks.isEmpty());
 
+    Cluster cluster = EasyMock.createNiceMock(Cluster.class);
+
     for( StackInfo stack : stacks ){
       if (!stack.isActive()) {
         LOG.info("Skipping configuration validity test for {}", new StackId(stack));
@@ -113,10 +126,33 @@ public class ConfigUpgradeValidityTest {
       Map<String, UpgradePack> upgradePacks = ambariMetaInfo.getUpgradePacks(stack.getName(), stack.getVersion());
       for (String key : upgradePacks.keySet()) {
         UpgradePack upgradePack = upgradePacks.get(key);
-        StackId sourceStack = new StackId(stack);
+        final StackId sourceStack = new StackId(stack);
+
+        final RepositoryVersionEntity rve = new RepositoryVersionEntity() {{
+          setStack(new StackEntity(){{
+            setStackName(sourceStack.getStackName());
+            setStackVersion(sourceStack.getStackVersion());
+          }});
+        }};
+
+        final UpgradeEntity upgradeEntity = new UpgradeEntity();
+
+        UpgradeHistoryEntity upgradeHistoryEntity = new UpgradeHistoryEntity(){{
+          setServiceName("TEST");
+          setComponentName("TEST");
+          setFromRepositoryVersion(rve);
+          setUpgrade(upgradeEntity);
+        }};
+
+        upgradeEntity.setDirection(Direction.UPGRADE);
+        upgradeEntity.addHistory(upgradeHistoryEntity);
+        upgradeEntity.setRepositoryVersion(rve);
+
+        UpgradeContext cx = upgradeContextFactory.create(cluster, upgradeEntity);
+
+        cx.setUpgradePack(upgradePack);
 
-        ConfigUpgradePack configUpgradePack = ConfigurationPackBuilder.build(upgradePack,
-            sourceStack);
+        ConfigUpgradePack configUpgradePack = ConfigurationPackBuilder.build(cx);
 
         // do configure tasks in the group section
         List<Grouping> groups = upgradePack.getGroups(Direction.UPGRADE);