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/31 20:12:47 UTC
[16/50] [abbrv] ambari git commit: AMBARI-20996 - Fallback Cluster
Current Version Is Blank Which Causes Upgrade Errors (jonathanhurley)
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/trunk
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)