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/branch-feature-AMBARI-14714
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();

Reply via email to