You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2017/05/11 20:00:17 UTC

ambari git commit: AMBARI-20996 - Fallback Cluster Current Version Is Blank Which Causes Upgrade Errors (jonathanhurley)

Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-12556 b8cb5d486 -> 7b0ccdae5


AMBARI-20996 - Fallback Cluster Current Version Is Blank Which Causes Upgrade Errors (jonathanhurley)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7b0ccdae
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7b0ccdae
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7b0ccdae

Branch: refs/heads/branch-feature-AMBARI-12556
Commit: 7b0ccdae5572e4e96795f29f16dddb92c7e0128a
Parents: b8cb5d4
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Thu May 11 13:46:14 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Thu May 11 15:04:23 2017 -0400

----------------------------------------------------------------------
 .../libraries/functions/stack_features.py       |  3 +-
 .../libraries/functions/version.py              | 31 +++++++++++++-------
 .../upgrades/UpdateDesiredStackAction.java      |  8 +++--
 .../server/state/RepositoryVersionState.java    |  4 +--
 ambari-server/src/test/python/TestVersion.py    | 12 ++++++++
 5 files changed, 41 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py b/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
index 2b3df5f..cbd32e7 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
@@ -23,6 +23,7 @@ import ambari_simplejson as json
 from resource_management.core.exceptions import Fail
 from resource_management.core.logger import Logger
 from resource_management.libraries.functions.constants import Direction
+from resource_management.libraries.functions.version import format_stack_version
 
 # executionCommand for STOP
 _ROLE_COMMAND_STOP = 'STOP'
@@ -141,7 +142,7 @@ def get_stack_feature_version(config):
     if current_cluster_version is not None:
       version_for_stack_feature_checks = current_cluster_version
     elif original_stack is not None:
-      version_for_stack_feature_checks = original_stack
+      version_for_stack_feature_checks = format_stack_version(original_stack)
     else:
       version_for_stack_feature_checks = version if version is not None else stack_version
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/ambari-common/src/main/python/resource_management/libraries/functions/version.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/version.py b/ambari-common/src/main/python/resource_management/libraries/functions/version.py
index 2500430..406bd95 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/version.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/version.py
@@ -34,23 +34,32 @@ def _normalize(v, desired_segments=0):
   return [int(x) for x in v_list]
 
 
-def format_stack_version(input):
+def format_stack_version(value):
   """
-  :param input: Input string, e.g. "2.2" or "GlusterFS", or "2.0.6.GlusterFS", or "2.2.0.1-885"
+  :param value: Input string, e.g. "2.2" or "GlusterFS", or "2.0.6.GlusterFS", or "2.2.0.1-885"
   :return: Returns a well-formatted HDP stack version of the form #.#.#.# as a string.
   """
-  if input:
-    if "-" in input:
-      input_array = input.split("-")
-      input = input_array[0]
+  if value:
+    if "-" in value:
+      first_occurrence = value.find("-")
+      last_occurence = value.rfind("-")
 
-    input = re.sub(r'^\D+', '', input)
-    input = re.sub(r'\D+$', '', input)
-    input = input.strip('.')
+      if first_occurrence == last_occurence:
+        if value[0].isalpha():
+          value = value[first_occurrence + 1:]
+        else:
+          value = value[:first_occurrence]
+      else:
+        value = value[first_occurrence + 1:last_occurence]
 
-    strip_dots = input.replace('.', '')
+
+    value = re.sub(r'^\D+', '', value)
+    value = re.sub(r'\D+$', '', value)
+    value = value.strip('.')
+
+    strip_dots = value.replace('.', '')
     if strip_dots.isdigit():
-      normalized = _normalize(str(input))
+      normalized = _normalize(str(value))
       if len(normalized) == 2:
         normalized = normalized + [0, 0]
       elif len(normalized) == 3:

http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
index e6336c8..4500b5d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpdateDesiredStackAction.java
@@ -192,17 +192,19 @@ public class UpdateDesiredStackAction extends AbstractUpgradeServerAction {
 
       out.append(message).append(System.lineSeparator());
 
-      // a downgrade must force host versions back to INSTALLED
+      // a downgrade must force host versions back to INSTALLED, but only if it's required
       if (upgradeContext.getDirection() == Direction.DOWNGRADE) {
         RepositoryVersionEntity downgradeFromRepositoryVersion = upgradeContext.getDowngradeFromRepositoryVersion();
-        out.append(String.format("Setting all host versions back to %s for repository version %s",
+        out.append(String.format("Setting host versions back to %s for repository version %s",
             RepositoryVersionState.INSTALLED, downgradeFromRepositoryVersion.getVersion()));
 
         List<HostVersionEntity> hostVersionsToReset = m_hostVersionDAO.findHostVersionByClusterAndRepository(
             cluster.getClusterId(), downgradeFromRepositoryVersion);
 
         for (HostVersionEntity hostVersion : hostVersionsToReset) {
-          hostVersion.setState(RepositoryVersionState.INSTALLED);
+          if( hostVersion.getState() != RepositoryVersionState.NOT_REQUIRED ){
+            hostVersion.setState(RepositoryVersionState.INSTALLED);
+          }
         }
       }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
index 11ea512..5e32d1f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
@@ -76,7 +76,7 @@ public enum RepositoryVersionState {
   /**
    * Repository version is not required
    */
-  NOT_REQUIRED(1),
+  NOT_REQUIRED(0),
 
   /**
    * Repository version that is in the process of being installed.
@@ -101,7 +101,7 @@ public enum RepositoryVersionState {
   /**
    * Repository version that is installed and supported and is the active version.
    */
-  CURRENT(0);
+  CURRENT(1);
 
   private final int weight;
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/7b0ccdae/ambari-server/src/test/python/TestVersion.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestVersion.py b/ambari-server/src/test/python/TestVersion.py
index 0392908..a8f4c65 100644
--- a/ambari-server/src/test/python/TestVersion.py
+++ b/ambari-server/src/test/python/TestVersion.py
@@ -45,6 +45,18 @@ class TestVersion(TestCase):
     gluster_fs_actual = self.version_module.format_stack_version("GlusterFS")
     self.assertEqual("", gluster_fs_actual)
 
+
+  def test_format_with_hyphens(self):
+    actual = self.version_module.format_stack_version("FOO-1.0")
+    self.assertEqual("1.0.0.0", actual)
+
+    actual = self.version_module.format_stack_version("1.0.0-1234")
+    self.assertEqual("1.0.0.0", actual)
+
+    actual = self.version_module.format_stack_version("FOO-1.0-9999")
+    self.assertEqual("1.0.0.0", actual)
+
+
   def test_comparison(self):
     # All versions to compare, from 1.0.0.0 to 3.0.0.0, and only include elements that are a multiple of 7.
     versions = range(1000, 3000, 7)