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"));