From 16bbca3784b6a40d0c2b26083882fa2bed970972 Mon Sep 17 00:00:00 2001 From: Lisnichenko Dmitro Date: Wed, 14 Feb 2018 16:48:17 +0200 Subject: [PATCH 1/3] AMBARI-22986. Not able to add Livy2 after doing rolling upgrade to M21 (dlysnichenko) --- .../internal/UpgradeResourceProvider.java | 11 ++++++++ .../server/upgrade/UpgradeCatalog262.java | 28 +++++++++++++++++++ 2 files changed, 39 insertions(+) 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 14e311e1c18..f2a82b646a3 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 @@ -67,6 +67,7 @@ import org.apache.ambari.server.orm.entities.HostRoleCommandEntity; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; import org.apache.ambari.server.orm.entities.RequestEntity; +import org.apache.ambari.server.orm.entities.StackEntity; import org.apache.ambari.server.orm.entities.UpgradeEntity; import org.apache.ambari.server.orm.entities.UpgradeGroupEntity; import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity; @@ -755,7 +756,17 @@ major stack versions (e.g., HDP 2.2 -> 2.3), and then set config changes at the appropriate moment during the orchestration. */ if (pack.getType() == UpgradeType.ROLLING || pack.getType() == UpgradeType.HOST_ORDERED) { + if (direction == Direction.UPGRADE) { + StackEntity targetStack = upgradeContext.getRepositoryVersion().getStack(); + cluster.setDesiredStackVersion( + new StackId(targetStack.getStackName(), targetStack.getStackVersion())); + } s_upgradeHelper.updateDesiredRepositoriesAndConfigs(upgradeContext); + if (direction == Direction.DOWNGRADE) { + StackId targetStack = upgradeContext.getCluster().getCurrentStackVersion(); + cluster.setDesiredStackVersion( + new StackId(targetStack.getStackName(), targetStack.getStackVersion())); + } } // resolve or build a proper config upgrade pack - always start out with the config pack diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog262.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog262.java index f83204d8106..862092e79bf 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog262.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog262.java @@ -18,9 +18,14 @@ package org.apache.ambari.server.upgrade; import java.sql.SQLException; +import java.util.Map; import org.apache.ambari.server.AmbariException; +import org.apache.ambari.server.controller.AmbariManagementController; import org.apache.ambari.server.orm.DBAccessor; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.StackId; import com.google.inject.Inject; import com.google.inject.Injector; @@ -61,6 +66,29 @@ private void addHostRequestStatusColumn() throws SQLException { @Override protected void executePreDMLUpdates() throws AmbariException, SQLException { + fixDesiredStack(); + } + + /** + * if desired stack < current stack, set current stack as desired + * + * @throws AmbariException + */ + private void fixDesiredStack() throws AmbariException { + AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class); + Clusters clusters = ambariManagementController.getClusters(); + if (clusters != null) { + Map clusterMap = getCheckedClusterMap(clusters); + if (clusterMap != null && !clusterMap.isEmpty()) { + for (final Cluster cluster : clusterMap.values()) { + StackId desiredStack = cluster.getDesiredStackVersion(); + StackId currentStack = cluster.getCurrentStackVersion(); + if (desiredStack.compareTo(currentStack) < 0) { + cluster.setDesiredStackVersion(currentStack); + } + } + } + } } @Override From c3ee12154760d3887d806f646963f96785e1928c Mon Sep 17 00:00:00 2001 From: Lisnichenko Dmitro Date: Wed, 14 Feb 2018 18:28:05 +0200 Subject: [PATCH 2/3] AMBARI-22986. Not able to add Livy2 after doing rolling upgrade to M21 - fixed review comments (dlysnichenko) --- .../server/controller/internal/UpgradeResourceProvider.java | 3 +-- .../org/apache/ambari/server/upgrade/UpgradeCatalog262.java | 2 +- 2 files changed, 2 insertions(+), 3 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 f2a82b646a3..9036ac4bacb 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 @@ -764,8 +764,7 @@ major stack versions (e.g., HDP 2.2 -> 2.3), and then set config changes s_upgradeHelper.updateDesiredRepositoriesAndConfigs(upgradeContext); if (direction == Direction.DOWNGRADE) { StackId targetStack = upgradeContext.getCluster().getCurrentStackVersion(); - cluster.setDesiredStackVersion( - new StackId(targetStack.getStackName(), targetStack.getStackVersion())); + cluster.setDesiredStackVersion(targetStack); } } diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog262.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog262.java index 862092e79bf..5dfcef43b32 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog262.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog262.java @@ -83,7 +83,7 @@ private void fixDesiredStack() throws AmbariException { for (final Cluster cluster : clusterMap.values()) { StackId desiredStack = cluster.getDesiredStackVersion(); StackId currentStack = cluster.getCurrentStackVersion(); - if (desiredStack.compareTo(currentStack) < 0) { + if (!desiredStack.equals(currentStack)) { cluster.setDesiredStackVersion(currentStack); } } From e2e462934c38dfcd9593faaf9bdadc0ace5f5350 Mon Sep 17 00:00:00 2001 From: Lisnichenko Dmitro Date: Wed, 14 Feb 2018 20:45:23 +0200 Subject: [PATCH 3/3] AMBARI-22986. Not able to add Livy2 after doing rolling upgrade to M21 - add tests (dlysnichenko) --- .../internal/UpgradeResourceProviderTest.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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 a8c095412cf..88ed9462c95 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 @@ -701,9 +701,10 @@ public void testCreatePartialDowngrade() throws Exception { public void testDowngradeToBase() throws Exception { Cluster cluster = clusters.getCluster("c1"); + assertEquals(cluster.getDesiredStackVersion().getStackId(), "HDP-2.1.1"); Map requestProps = new HashMap<>(); requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1"); - requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2111.getId())); + requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION_ID, String.valueOf(repoVersionEntity2200.getId())); requestProps.put(UpgradeResourceProvider.UPGRADE_PACK, "upgrade_test"); requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, "true"); requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, Direction.UPGRADE.name()); @@ -718,6 +719,8 @@ public void testDowngradeToBase() throws Exception { UpgradeEntity upgrade = upgrades.get(0); + assertEquals("HDP-2.2.0", cluster.getDesiredStackVersion().getStackId()); + // now abort the upgrade so another can be created abortUpgrade(upgrade.getRequestId()); @@ -749,12 +752,14 @@ public void testDowngradeToBase() throws Exception { Resource r = status.getAssociatedResources().iterator().next(); String id = r.getPropertyValue("Upgrade/request_id").toString(); + assertEquals("HDP-2.1.1", cluster.getDesiredStackVersion().getStackId()); + UpgradeEntity entity = upgradeDao.findUpgrade(Long.parseLong(id)); assertNotNull(entity); assertEquals(Direction.DOWNGRADE, entity.getDirection()); // associated version is the FROM on DOWNGRADE - assertEquals(repoVersionEntity2111.getVersion(), entity.getRepositoryVersion().getVersion()); + assertEquals(repoVersionEntity2200.getVersion(), entity.getRepositoryVersion().getVersion()); // target is by service assertEquals(repoVersionEntity2110.getVersion(), @@ -763,6 +768,8 @@ public void testDowngradeToBase() throws Exception { StageDAO dao = injector.getInstance(StageDAO.class); List stages = dao.findByRequestId(entity.getRequestId()); + assertEquals("HDP-2.1.1", cluster.getDesiredStackVersion().getStackId()); + Gson gson = new Gson(); for (StageEntity se : stages) { Map map = gson.>fromJson(se.getCommandParamsStage(), Map.class); @@ -1113,6 +1120,7 @@ public void testPercents() throws Exception { public void testCreateCrossStackUpgrade() throws Exception { Cluster cluster = clusters.getCluster("c1"); StackId oldStack = repoVersionEntity2110.getStackId(); + assertEquals(cluster.getDesiredStackVersion(), oldStack); for (Service s : cluster.getServices().values()) { assertEquals(oldStack, s.getDesiredStackId()); @@ -1155,6 +1163,7 @@ public void testCreateCrossStackUpgrade() throws Exception { assertEquals(2, group.getItems().size()); assertTrue(cluster.getDesiredConfigs().containsKey("zoo.cfg")); + assertTrue(cluster.getDesiredStackVersion().getStackId().equals("HDP-2.2.0")); for (Service s : cluster.getServices().values()) { assertEquals(repoVersionEntity2200, s.getDesiredRepositoryVersion());