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/03/14 18:41:59 UTC
[15/50] ambari git commit: AMBARI-20401 - HOU wizard wrongly shows
hosts with only client components at the start of 'Upgrade Hosts' group
(jonathanhurley)
AMBARI-20401 - HOU wizard wrongly shows hosts with only client components at the start of 'Upgrade Hosts' group (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fd257ec2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fd257ec2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fd257ec2
Branch: refs/heads/branch-feature-AMBARI-12556
Commit: fd257ec2ab0aa88f9971c7f4a330b19b6cefd751
Parents: 01ef695
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Fri Mar 10 17:06:42 2017 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Fri Mar 10 20:30:21 2017 -0500
----------------------------------------------------------------------
.../state/stack/upgrade/HostOrderGrouping.java | 15 ++++--
.../internal/UpgradeResourceProviderTest.java | 54 ++++++++++++++++++++
2 files changed, 64 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/fd257ec2/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/HostOrderGrouping.java
----------------------------------------------------------------------
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 7734731..97864a6 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
@@ -205,10 +205,6 @@ public class HostOrderGrouping extends Grouping {
continue;
}
- // build the single STOP stage
- StageWrapper stopWrapper = new StageWrapper(StageWrapper.Type.STOP, String.format("Stop on %s", hostName),
- stopTasks.toArray(new TaskWrapper[stopTasks.size()]));
-
// now process the HRCs created so that we can create the appropriate
// stage/task wrappers for the RESTARTs
RoleGraphFactory roleGraphFactory = upgradeContext.getRoleGraphFactory();
@@ -267,10 +263,19 @@ public class HostOrderGrouping extends Grouping {
structuredOut.addProperty(HOST, hostName);
mt.structuredOut = structuredOut.toString();
+ // build the single STOP stage, but only if there are components to
+ // stop; client-only hosts have no components which need stopping
+ if (!stopTasks.isEmpty()) {
+ StageWrapper stopWrapper = new StageWrapper(StageWrapper.Type.STOP,
+ String.format("Stop on %s", hostName),
+ stopTasks.toArray(new TaskWrapper[stopTasks.size()]));
+
+ wrappers.add(stopWrapper);
+ }
+
StageWrapper manualWrapper = new StageWrapper(StageWrapper.Type.SERVER_SIDE_ACTION, "Manual Confirmation",
new TaskWrapper(null, null, Collections.<String>emptySet(), mt));
- wrappers.add(stopWrapper);
wrappers.add(manualWrapper);
// !!! TODO install_packages for hdp and conf-select changes. Hopefully these will no-op.
http://git-wip-us.apache.org/repos/asf/ambari/blob/fd257ec2/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 62e55c4..3e70989 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -1562,6 +1562,60 @@ public class UpgradeResourceProviderTest {
assertEquals("UNKNOWN", hostComponent.getVersion());
}
+ /**
+ * Ensures that stages created with an HOU are sequential and do not skip any
+ * IDs. When there are stages with IDs like (1,2,3,5,6,7,10), the request will
+ * get stuck in a PENDING state. This affects HOU specifically since they can
+ * potentially try to create empty stages which won't get persisted (such as a
+ * STOP on client-only hosts).
+ *
+ * @throws Exception
+ */
+ @Test()
+ public void testEmptyGroupingsDoNotSkipStageIds() throws Exception {
+
+ StageDAO stageDao = injector.getInstance(StageDAO.class);
+ Assert.assertEquals(0, stageDao.findAll().size());
+
+ // strip out all non-client components - clients don't have STOP commands
+ Cluster cluster = clusters.getCluster("c1");
+ List<ServiceComponentHost> schs = cluster.getServiceComponentHosts("h1");
+ for (ServiceComponentHost sch : schs) {
+ if (sch.isClientComponent()) {
+ continue;
+ }
+
+ cluster.removeServiceComponentHost(sch);
+ }
+
+ // define host order
+ Set<Map<String, List<String>>> hostsOrder = new LinkedHashSet<>();
+ Map<String, List<String>> hostGrouping = new HashMap<>();
+ hostGrouping = new HashMap<>();
+ hostGrouping.put("hosts", Lists.newArrayList("h1"));
+ hostsOrder.add(hostGrouping);
+
+ Map<String, Object> requestProps = new HashMap<>();
+ requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_VERSION, "2.2.0.0");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test_host_ordered");
+ requestProps.put(UpgradeResourceProvider.UPGRADE_TYPE, UpgradeType.HOST_ORDERED.toString());
+ requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS,Boolean.TRUE.toString());
+ requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name());
+ requestProps.put(UpgradeResourceProvider.UPGRADE_HOST_ORDERED_HOSTS, hostsOrder);
+
+ ResourceProvider upgradeResourceProvider = createProvider(amc);
+ Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null);
+ upgradeResourceProvider.createResources(request);
+
+ List<StageEntity> stages = stageDao.findByRequestId(cluster.getUpgradeEntity().getRequestId());
+ Assert.assertEquals(3, stages.size());
+
+ long expectedStageId = 1L;
+ for (StageEntity stage : stages) {
+ Assert.assertEquals(expectedStageId++, stage.getStageId().longValue());
+ }
+ }
private String parseSingleMessage(String msgStr){
JsonParser parser = new JsonParser();