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 2017/09/15 15:06:32 UTC

ambari git commit: AMBARI-21967. Exception was thrown while starting Patch Rolling/Express Upgrade when upgrade failure tolerance option is selected (ncole)

Repository: ambari
Updated Branches:
  refs/heads/branch-2.6 16c0beb1c -> 8217f4c1d


AMBARI-21967. Exception was thrown while starting Patch Rolling/Express Upgrade when upgrade failure tolerance option is selected (ncole)


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

Branch: refs/heads/branch-2.6
Commit: 8217f4c1dda8476c917435de81ee39275faa60d9
Parents: 16c0beb
Author: Nate Cole <nc...@hortonworks.com>
Authored: Fri Sep 15 09:11:31 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Fri Sep 15 09:11:31 2017 -0400

----------------------------------------------------------------------
 .../ambari/server/state/UpgradeHelper.java      | 25 ++++++++---
 .../ambari/server/state/UpgradeHelperTest.java  | 44 ++++++++++++++++++++
 2 files changed, 64 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8217f4c1/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
----------------------------------------------------------------------
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 e6ca728..9aa9e31 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
@@ -563,15 +563,29 @@ public class UpgradeHelper {
     LinkedHashSet<StageWrapper> priority = new LinkedHashSet<>();
     LinkedHashSet<StageWrapper> others = new LinkedHashSet<>();
 
+    Set<String> extraKeys = new HashSet<>();
+    LinkedHashSet<StageWrapper> extras = new LinkedHashSet<>();
+
     for (List<StageWrapper> holderItems : new List[] { oldHolder.items, newHolder.items }) {
       for (StageWrapper stageWrapper : holderItems) {
-        ServiceCheckStageWrapper wrapper = (ServiceCheckStageWrapper) stageWrapper;
-
-        if (wrapper.priority) {
-          priority.add(stageWrapper);
+        if (stageWrapper instanceof ServiceCheckStageWrapper) {
+          ServiceCheckStageWrapper wrapper = (ServiceCheckStageWrapper) stageWrapper;
+          if (wrapper.priority) {
+            priority.add(stageWrapper);
+          } else {
+            others.add(stageWrapper);
+          }
         } else {
-          others.add(stageWrapper);
+          // !!! It's a good chance that back-to-back service check groups are adding the
+          // same non-service-check wrappers.
+          // this should be "equal enough" to prevent them from duplicating on merge
+          String key = stageWrapper.toString();
+          if (!extraKeys.contains(key)) {
+            extras.add(stageWrapper);
+            extraKeys.add(key);
+          }
         }
+
       }
     }
 
@@ -580,6 +594,7 @@ public class UpgradeHelper {
 
     oldHolder.items = Lists.newLinkedList(priority);
     oldHolder.items.addAll(others);
+    oldHolder.items.addAll(extras);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/8217f4c1/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 5dfbc53..ac9be66 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
@@ -2536,6 +2536,50 @@ public class UpgradeHelperTest extends EasyMockSupport {
   }
 
   @Test
+  public void testSequentialServiceChecksWithServiceCheckFailure() throws Exception {
+    Map<String, UpgradePack> upgrades = ambariMetaInfo.getUpgradePacks("HDP", "2.1.1");
+    assertTrue(upgrades.containsKey("upgrade_test_checks"));
+    UpgradePack upgrade = upgrades.get("upgrade_test_checks");
+    assertNotNull(upgrade);
+
+    // !!! fake skippable so we don't affect other tests
+    for (Grouping g : upgrade.getAllGroups()) {
+      if (g.name.equals("SERVICE_CHECK_1") || g.name.equals("SERVICE_CHECK_2")) {
+        g.skippable = true;
+      }
+    }
+
+    Cluster cluster = makeCluster();
+    cluster.deleteService("HDFS");
+    cluster.deleteService("YARN");
+
+    UpgradeContext context = getMockUpgradeContext(cluster, Direction.UPGRADE, UpgradeType.ROLLING, repositoryVersion2110,
+        RepositoryType.STANDARD, cluster.getServices().keySet(), m_masterHostResolver, false);
+    expect(context.isServiceCheckFailureAutoSkipped()).andReturn(Boolean.TRUE).atLeastOnce();
+
+    replay(context);
+
+    List<UpgradeGroupHolder> groups = m_upgradeHelper.createSequence(upgrade, context);
+    assertEquals(5, groups.size());
+
+    UpgradeGroupHolder serviceCheckGroup = groups.get(2);
+    assertEquals(ServiceCheckGrouping.class, serviceCheckGroup.groupClass);
+    assertEquals(4, serviceCheckGroup.items.size());
+
+    StageWrapper wrapper = serviceCheckGroup.items.get(0);
+    assertEquals(ServiceCheckGrouping.ServiceCheckStageWrapper.class, wrapper.getClass());
+    assertTrue(wrapper.getText().contains("ZooKeeper"));
+
+    wrapper = serviceCheckGroup.items.get(serviceCheckGroup.items.size()-1);
+    assertTrue(wrapper.getText().equals("Verifying Skipped Failures"));
+
+    // Do stacks cleanup
+    stackManagerMock.invalidateCurrentPaths();
+    ambariMetaInfo.init();
+  }
+
+
+  @Test
   public void testPrematureServiceChecks() throws Exception {
     Map<String, UpgradePack> upgrades = ambariMetaInfo.getUpgradePacks("HDP", "2.1.1");
     assertTrue(upgrades.containsKey("upgrade_test_checks"));