AMBARI-22312 - Downgrade From HDP 2.6 to 2.5 Leaves 2.6 Hosts as CURRENT Instead of INSTALLED (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/83e8b672 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/83e8b672 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/83e8b672 Branch: refs/heads/feature-branch-AMBARI-21307 Commit: 83e8b67223cc35134476adf7c79e365c74b808d4 Parents: d1d118d Author: Jonathan Hurley <jhur...@hortonworks.com> Authored: Wed Oct 25 20:06:55 2017 -0400 Committer: Jonathan Hurley <jhur...@hortonworks.com> Committed: Wed Oct 25 20:06:55 2017 -0400 ---------------------------------------------------------------------- .../AmbariManagementControllerImpl.java | 13 +++-- .../upgrades/FinalizeUpgradeAction.java | 54 ++++++++++---------- 2 files changed, 36 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/83e8b672/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 1b1f524..380e1b4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -909,9 +909,16 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle StackId stackId = null; if (null != service) { - Service svc = cluster.getService(service); - stackId = svc.getDesiredStackId(); - } else { + try { + Service svc = cluster.getService(service); + stackId = svc.getDesiredStackId(); + } catch (AmbariException ambariException) { + LOG.warn("Adding configurations for {} even though its parent service {} is not installed", + configType, service); + } + } + + if (null == stackId) { stackId = cluster.getDesiredStackVersion(); } http://git-wip-us.apache.org/repos/asf/ambari/blob/83e8b672/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java index 87ea1fc..755f28e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java @@ -200,7 +200,7 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction { // move host versions from CURRENT to INSTALLED if their repos are no // longer used - finalizeHostRepositoryVersions(cluster); + finalizeHostVersionsNotDesired(cluster); if (upgradeContext.getOrchestrationType() == RepositoryType.STANDARD) { outSB.append(String.format("Finalizing the version for cluster %s.\n", cluster.getClusterName())); @@ -280,38 +280,36 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction { throw new AmbariException(messageBuff.toString()); } + finalizeHostVersionsNotDesired(cluster); - if (upgradeContext.isPatchRevert()) { - finalizeHostRepositoryVersions(cluster); - } else { - // for every repository being downgraded to, ensure the host versions are correct - Map<String, RepositoryVersionEntity> targetVersionsByService = upgradeContext.getTargetVersions(); - Set<RepositoryVersionEntity> targetRepositoryVersions = new HashSet<>(); - for (String service : targetVersionsByService.keySet()) { - targetRepositoryVersions.add(targetVersionsByService.get(service)); - } + // for every repository being downgraded to, ensure the host versions are correct + Map<String, RepositoryVersionEntity> targetVersionsByService = upgradeContext.getTargetVersions(); + Set<RepositoryVersionEntity> targetRepositoryVersions = new HashSet<>(); + for (String service : targetVersionsByService.keySet()) { + targetRepositoryVersions.add(targetVersionsByService.get(service)); + } - for (RepositoryVersionEntity targetRepositoryVersion : targetRepositoryVersions) { - // find host versions - List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository( - cluster.getClusterId(), targetRepositoryVersion); + // move host versions in the downgrade back to CURRENT if they are not + for (RepositoryVersionEntity targetRepositoryVersion : targetRepositoryVersions) { + // find host versions + List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository( + cluster.getClusterId(), targetRepositoryVersion); - outSB.append(String.format("Finalizing %d host(s) back to %s", hostVersions.size(), - targetRepositoryVersion.getVersion())).append(System.lineSeparator()); + outSB.append(String.format("Finalizing %d host(s) back to %s", hostVersions.size(), + targetRepositoryVersion.getVersion())).append(System.lineSeparator()); - for (HostVersionEntity hostVersion : hostVersions) { - if (hostVersion.getState() != RepositoryVersionState.CURRENT) { - hostVersion.setState(RepositoryVersionState.CURRENT); - hostVersionDAO.merge(hostVersion); - } + for (HostVersionEntity hostVersion : hostVersions) { + if (hostVersion.getState() != RepositoryVersionState.CURRENT) { + hostVersion.setState(RepositoryVersionState.CURRENT); + hostVersionDAO.merge(hostVersion); + } - List<HostComponentStateEntity> hostComponentStates = hostComponentStateDAO.findByHost( - hostVersion.getHostName()); + List<HostComponentStateEntity> hostComponentStates = hostComponentStateDAO.findByHost( + hostVersion.getHostName()); - for (HostComponentStateEntity hostComponentState : hostComponentStates) { - hostComponentState.setUpgradeState(UpgradeState.NONE); - hostComponentStateDAO.merge(hostComponentState); - } + for (HostComponentStateEntity hostComponentState : hostComponentStates) { + hostComponentState.setUpgradeState(UpgradeState.NONE); + hostComponentStateDAO.merge(hostComponentState); } } } @@ -406,7 +404,7 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction { * @param cluster * @throws AmbariException */ - private void finalizeHostRepositoryVersions(Cluster cluster) throws AmbariException { + private void finalizeHostVersionsNotDesired(Cluster cluster) throws AmbariException { // create a set of all of the repos that the services are on Set<RepositoryVersionEntity> desiredRepoVersions = new HashSet<>(); Set<String> serviceNames = cluster.getServices().keySet();