This is an automated email from the ASF dual-hosted git repository. jonathanhurley pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push: new 7700ee8 [AMBARI-24002] - Set All Versions only on Upgrades which cannot be Downgraded (#1430) 7700ee8 is described below commit 7700ee84c0019a8ba0f7c07f57d1009509819cdd Author: Jonathan Hurley <jonathanhur...@apache.org> AuthorDate: Thu May 31 15:58:31 2018 -0400 [AMBARI-24002] - Set All Versions only on Upgrades which cannot be Downgraded (#1430) --- .../libraries/functions/upgrade_summary.py | 6 +- .../internal/HostStackVersionResourceProvider.java | 2 +- .../apache/ambari/server/state/UpgradeContext.java | 31 +++ .../{ru_set_all.py => stack_select_set_all.py} | 86 ++------ .../HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml | 17 -- .../HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml | 17 -- .../HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml | 17 -- .../HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml | 17 -- .../stacks/HDP/2.3/upgrades/upgrade-2.3.xml | 10 - .../stacks/HDP/2.3/upgrades/upgrade-2.4.xml | 10 - .../stacks/HDP/2.3/upgrades/upgrade-2.5.xml | 10 - .../stacks/HDP/2.3/upgrades/upgrade-2.6.xml | 10 - .../HDP/2.4/upgrades/nonrolling-upgrade-2.4.xml | 17 -- .../HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml | 18 -- .../HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml | 18 -- .../stacks/HDP/2.4/upgrades/upgrade-2.4.xml | 10 - .../stacks/HDP/2.4/upgrades/upgrade-2.5.xml | 10 - .../stacks/HDP/2.4/upgrades/upgrade-2.6.xml | 10 - .../stacks/HDP/2.5/upgrades/host-upgrade-2.5.xml | 3 +- .../HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml | 17 -- .../HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml | 17 -- .../stacks/HDP/2.5/upgrades/upgrade-2.5.xml | 10 - .../stacks/HDP/2.5/upgrades/upgrade-2.6.xml | 10 - .../PERF/1.0/upgrades/nonrolling-upgrade-2.0.xml | 2 +- .../stacks/PERF/1.0/upgrades/upgrade-2.0.xml | 2 +- ambari-server/src/test/python/TestStackFeature.py | 10 +- ambari-server/src/test/python/TestStackSelect.py | 4 + .../src/test/python/TestUpgradeSummary.py | 4 + ..._ru_set_all.py => test_stack_select_set_all.py} | 225 +++++++++++---------- .../upgrades/upgrade_nonrolling_new_stack.xml | 4 +- .../HDP/2.1.1/upgrades/upgrade_test_nonrolling.xml | 2 +- .../stacks/HDP/2.2.0/upgrades/upgrade_test.xml | 2 +- .../HDP/2.2.0/upgrades/upgrade_test_15388.xml | 2 +- .../HDP/2.2.0/upgrades/upgrade_test_15388.xml | 2 +- 34 files changed, 204 insertions(+), 428 deletions(-) diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py b/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py index 0b30067..e6da97f 100644 --- a/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py +++ b/ambari-common/src/main/python/resource_management/libraries/functions/upgrade_summary.py @@ -22,7 +22,7 @@ from collections import namedtuple from resource_management.libraries.script.script import Script from resource_management.libraries.functions.constants import Direction -UpgradeSummary = namedtuple("UpgradeSummary", "type direction orchestration is_revert services is_downgrade_allowed is_switch_bits") +UpgradeSummary = namedtuple("UpgradeSummary", "type direction orchestration is_revert services is_downgrade_allowed is_switch_bits associated_stack associated_version") UpgradeServiceSummary = namedtuple("UpgradeServiceSummary", "service_name source_stack source_version target_stack target_version") @@ -102,7 +102,9 @@ def get_upgrade_summary(): orchestration=upgrade_summary["orchestration"], is_revert = upgrade_summary["isRevert"], services = service_summary_dict, is_downgrade_allowed=upgrade_summary["isDowngradeAllowed"], - is_switch_bits=upgrade_summary["isSwitchBits"]) + is_switch_bits=upgrade_summary["isSwitchBits"], + associated_stack=upgrade_summary["associatedStackId"], + associated_version = upgrade_summary["associatedVersion"]) def get_downgrade_from_version(service_name = None): diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java index ae3e2f9..fe72c53 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java @@ -105,7 +105,7 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource protected static final String COMPONENT_NAME_PROPERTY_ID = "name"; protected static final String INSTALL_PACKAGES_ACTION = "install_packages"; - protected static final String STACK_SELECT_ACTION = "ru_set_all"; + protected static final String STACK_SELECT_ACTION = "stack_select_set_all"; protected static final String INSTALL_PACKAGES_FULL_NAME = "Install Version"; diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java index c016bc6..b13aaf9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeContext.java @@ -971,6 +971,10 @@ public class UpgradeContext { summary.isDowngradeAllowed = isDowngradeAllowed(); + summary.associatedRepositoryId = m_repositoryVersion.getId(); + summary.associatedStackId = m_repositoryVersion.getStackId().getStackId(); + summary.associatedVersion = m_repositoryVersion.getVersion(); + // !!! a) if we are reverting, that can only happen via PATCH or MAINT // b) if orchestration is a revertible type (on upgrade) summary.isSwitchBits = m_isRevert || m_orchestration.isRevertable(); @@ -1441,6 +1445,33 @@ public class UpgradeContext { public Map<String, UpgradeServiceSummary> services; /** + * The ID of the repository associated with the upgrade. For an + * {@link Direction#UPGRADE}, this is the target repository, for a + * {@link Direction#DOWNGRADE} this was the repository being downgraded + * from. + */ + @SerializedName("associatedRepositoryId") + public long associatedRepositoryId; + + /** + * The ID of the repository associated with the upgrade. For an + * {@link Direction#UPGRADE}, this is the target stack, for a + * {@link Direction#DOWNGRADE} this was the stack that is being downgraded + * from. + */ + @SerializedName("associatedStackId") + public String associatedStackId; + + /** + * The ID of the repository associated with the upgrade. For an + * {@link Direction#UPGRADE}, this is the target versopm, for a + * {@link Direction#DOWNGRADE} this was the version that is being downgraded + * from. + */ + @SerializedName("associatedVersion") + public String associatedVersion; + + /** * MAINT or PATCH upgrades are meant to just be switching the bits and no other * incompatible changes. */ diff --git a/ambari-server/src/main/resources/custom_actions/scripts/ru_set_all.py b/ambari-server/src/main/resources/custom_actions/scripts/stack_select_set_all.py similarity index 52% rename from ambari-server/src/main/resources/custom_actions/scripts/ru_set_all.py rename to ambari-server/src/main/resources/custom_actions/scripts/stack_select_set_all.py index ef9ea29..ed9a1b0 100644 --- a/ambari-server/src/main/resources/custom_actions/scripts/ru_set_all.py +++ b/ambari-server/src/main/resources/custom_actions/scripts/stack_select_set_all.py @@ -21,20 +21,14 @@ Ambari Agent """ import os -import shutil import socket from ambari_commons.os_check import OSCheck from resource_management.libraries.script import Script -from resource_management.libraries.functions import conf_select from resource_management.libraries.functions import stack_tools -from resource_management.libraries.functions.default import default -from resource_management.libraries.functions.version import format_stack_version +from resource_management.libraries.functions import upgrade_summary +from resource_management.libraries.functions.constants import Direction from resource_management.core import shell -from resource_management.core.exceptions import Fail from resource_management.core.logger import Logger -from resource_management.core.resources.system import Execute, Link, Directory -from resource_management.libraries.functions.stack_features import check_stack_feature -from resource_management.libraries.functions import StackFeature from resource_management.libraries.functions.decorator import experimental class UpgradeSetAll(Script): @@ -42,48 +36,49 @@ class UpgradeSetAll(Script): This script is a part of stack upgrade workflow and is used to set the all of the component versions as a final step in the upgrade process """ - @experimental(feature="PATCH_UPGRADES", disable = True, comment = "Skipping stack-select set all") + @experimental(feature="PATCH_UPGRADES", disable = False, comment = "The stack-select tool will only be invoked if this is a standard upgrade which cannot be downgraded.") def actionexecute(self, env): - version = default('/commandParams/version', None) + summary = upgrade_summary.get_upgrade_summary() + if summary is None: + Logger.warning("There is no upgrade in progress") + return + + if summary.associated_version is None: + Logger.warning("There is no version associated with the upgrade in progress") + return + + if summary.orchestration != "STANDARD": + Logger.warning("The 'stack-select set all' command can only be invoked during STANDARD upgrades") + return + + if summary.direction.lower() != Direction.UPGRADE or summary.is_downgrade_allowed or summary.is_revert: + Logger.warning("The 'stack-select set all' command can only be invoked during an UPGRADE which cannot be downgraded") + return - if not version: - raise Fail("Value is required for '/commandParams/version'") - # other os? if OSCheck.is_redhat_family(): cmd = ('/usr/bin/yum', 'clean', 'all') code, out = shell.call(cmd, sudo=True) - formatted_version = format_stack_version(version) - if not formatted_version: - raise Fail("Unable to determine a properly formatted stack version from {0}".format(version)) - stack_selector_path = stack_tools.get_stack_tool_path(stack_tools.STACK_SELECTOR_NAME) # this script runs on all hosts; if this host doesn't have stack components, # then don't invoke the stack tool # (no need to log that it's skipped - the function will do that) - if is_host_skippable(stack_selector_path, formatted_version): + if is_host_skippable(stack_selector_path): return # invoke "set all" - cmd = ('ambari-python-wrap', stack_selector_path, 'set', 'all', version) + cmd = ('ambari-python-wrap', stack_selector_path, 'set', 'all', summary.associated_version) code, out = shell.call(cmd, sudo=True) if code != 0: raise Exception("Command '{0}' exit code is nonzero".format(cmd)) - if check_stack_feature(StackFeature.CONFIG_VERSIONING, formatted_version): - # backup the old and symlink /etc/[component]/conf to <stack-root>/current/[component] - for k, v in conf_select.get_package_dirs().iteritems(): - for dir_def in v: - link_config(dir_def['conf_dir'], dir_def['current_dir']) - -def is_host_skippable(stack_selector_path, formatted_version): +def is_host_skippable(stack_selector_path): """ Gets whether this host should not have the stack select tool called. :param stack_selector_path the path to the stack selector tool. - :param formatted_version: the version to use with the stack selector tool. :return: True if this host should be skipped, False otherwise. """ if not os.path.exists(stack_selector_path): @@ -110,42 +105,5 @@ def is_host_skippable(stack_selector_path, formatted_version): return False -def link_config(old_conf, link_conf): - """ - Creates a config link following: - 1. Checks if the old_conf location exists - 2. If it does, check if it's a link already - 3. Make a copy to /etc/[component]/conf.backup - 4. Remove the old directory and create a symlink to link_conf - - :old_conf: the old config directory, ie /etc/[component]/conf - :link_conf: the new target for the config directory, ie <stack-root>/current/[component-dir]/conf - """ - if os.path.islink(old_conf): - # if the link exists but is wrong, then change it - if os.path.realpath(old_conf) != link_conf: - Link(old_conf, to = link_conf) - else: - Logger.debug("Skipping {0}; it is already a link".format(old_conf)) - return - - if not os.path.exists(old_conf): - Logger.debug("Skipping {0}; it does not exist".format(old_conf)) - return - - old_parent = os.path.abspath(os.path.join(old_conf, os.pardir)) - - Logger.info("Linking {0} to {1}".format(old_conf, link_conf)) - - old_conf_copy = os.path.join(old_parent, "conf.backup") - if not os.path.exists(old_conf_copy): - Execute(("cp", "-R", "-p", old_conf, old_conf_copy), sudo=True, logoutput=True) - - shutil.rmtree(old_conf, ignore_errors=True) - - # link /etc/[component]/conf -> <stack-root>/current/[component]-client/conf - Link(old_conf, to = link_conf) - - if __name__ == "__main__": UpgradeSetAll().execute() diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml index f48751a..f43e131 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml @@ -305,23 +305,6 @@ </group> - <!-- - Invoke "hdp-select set all" to change any components we may have missed - that are installed on the hosts but not known by Ambari. - --> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Set Version On All Hosts"> - <scope>COMPLETE</scope> - <skippable>true</skippable> - <supports-auto-skip-failure>false</supports-auto-skip-failure> - - <execute-stage title="Update stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <!-- Now, restart all of the services. --> <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper"> <service-check>false</service-check> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml index 214e80d..47afa38 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml @@ -449,23 +449,6 @@ </group> - <!-- - Invoke "hdp-select set all" to change any components we may have missed - that are installed on the hosts but not known by Ambari. - --> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Set Version On All Hosts"> - <scope>COMPLETE</scope> - <skippable>true</skippable> - <supports-auto-skip-failure>false</supports-auto-skip-failure> - - <execute-stage title="Update stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <!-- Now, restart all of the services. --> <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper"> <service-check>false</service-check> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml index f006cf5..1fc8573 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.5.xml @@ -605,23 +605,6 @@ </execute-stage> </group> - <!-- - Invoke "hdp-select set all" to change any components we may have missed - that are installed on the hosts but not known by Ambari. - --> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Set Version On All Hosts"> - <scope>COMPLETE</scope> - <skippable>true</skippable> - <supports-auto-skip-failure>false</supports-auto-skip-failure> - - <execute-stage title="Update stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <!-- Now, restart all of the services. --> <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper"> <service-check>false</service-check> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml index 5b701c1..bde3665 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.6.xml @@ -707,23 +707,6 @@ </execute-stage> </group> - <!-- - Invoke "hdp-select set all" to change any components we may have missed - that are installed on the hosts but not known by Ambari. - --> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Set Version On All Hosts"> - <scope>COMPLETE</scope> - <skippable>true</skippable> - <supports-auto-skip-failure>false</supports-auto-skip-failure> - - <execute-stage title="Update stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <!-- Now, restart all of the services. --> <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper"> <service-check>false</service-check> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml index 5146b7b..f8d17c2 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml @@ -381,16 +381,6 @@ </service> </group> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> - <scope>COMPLETE</scope> - <execute-stage title="Update remaining HDP stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check"> <direction>UPGRADE</direction> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml index d159ce0..3a9e516 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml @@ -426,16 +426,6 @@ </service> </group> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> - <scope>COMPLETE</scope> - <execute-stage title="Update remaining HDP stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check"> <direction>UPGRADE</direction> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml index ad9221d..53a2db6 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml @@ -494,16 +494,6 @@ </service> </group> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> - <scope>COMPLETE</scope> - <execute-stage title="Update remaining HDP stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check"> <direction>UPGRADE</direction> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml index a4e6a26..8824c74 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml @@ -497,16 +497,6 @@ </service> </group> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> - <scope>COMPLETE</scope> - <execute-stage title="Update remaining HDP stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check"> <direction>UPGRADE</direction> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.4.xml index af282f9..2f47a41 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.4.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.4.xml @@ -294,23 +294,6 @@ </execute-stage> </group> - <!-- - Invoke "hdp-select set all" to change any components we may have missed - that are installed on the hosts but not known by Ambari. - --> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Set Version On All Hosts"> - <scope>COMPLETE</scope> - <skippable>true</skippable> - <supports-auto-skip-failure>false</supports-auto-skip-failure> - - <execute-stage title="Update stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <!-- Now, restart all of the services. --> <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper"> <service-check>false</service-check> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml index 8d73638..443c129 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.5.xml @@ -564,24 +564,6 @@ </execute-stage> </group> - <!-- - Invoke "hdp-select set all" to change any components we may have missed - that are installed on the hosts but not known by Ambari. - --> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Set Version On All Hosts"> - <scope>COMPLETE</scope> - <skippable>true</skippable> - <supports-auto-skip-failure>false</supports-auto-skip-failure> - - <execute-stage title="Update stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - - <!-- Now, restart all of the services. --> <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper"> <service-check>false</service-check> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml index 4299f46..55de1c0 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.6.xml @@ -661,24 +661,6 @@ </execute-stage> </group> - <!-- - Invoke "hdp-select set all" to change any components we may have missed - that are installed on the hosts but not known by Ambari. - --> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Set Version On All Hosts"> - <scope>COMPLETE</scope> - <skippable>true</skippable> - <supports-auto-skip-failure>false</supports-auto-skip-failure> - - <execute-stage title="Update stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - - <!-- Now, restart all of the services. --> <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper"> <service-check>false</service-check> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.4.xml index 6948a27..2e03e68 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.4.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.4.xml @@ -377,16 +377,6 @@ </service> </group> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> - <scope>COMPLETE</scope> - <execute-stage title="Update remaining HDP stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check"> <direction>UPGRADE</direction> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml index ac69e2f..c6b38eb 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml @@ -479,16 +479,6 @@ </service> </group> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> - <scope>COMPLETE</scope> - <execute-stage title="Update remaining HDP stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check"> <direction>UPGRADE</direction> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml index 048a634..aa0b24b 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml @@ -486,16 +486,6 @@ </service> </group> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> - <scope>COMPLETE</scope> - <execute-stage title="Update remaining HDP stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check"> <direction>UPGRADE</direction> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/host-upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/host-upgrade-2.5.xml index dda3ee6..1cc3f42 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/host-upgrade-2.5.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/host-upgrade-2.5.xml @@ -80,9 +80,10 @@ <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> <scope>COMPLETE</scope> + <direction>UPGRADE</direction> <execute-stage title="Update remaining HDP stack to {{version}}"> <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> + <script>scripts/stack_select_set_all.py</script> <function>actionexecute</function> </task> </execute-stage> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml index 1042795..4f804c4 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.5.xml @@ -358,23 +358,6 @@ </execute-stage> </group> - <!-- - Invoke "hdp-select set all" to change any components we may have missed - that are installed on the hosts but not known by Ambari. - --> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Set Version On All Hosts"> - <scope>COMPLETE</scope> - <skippable>true</skippable> - <supports-auto-skip-failure>false</supports-auto-skip-failure> - - <execute-stage title="Update stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <!-- Now, restart all of the services. --> <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper"> <service-check>false</service-check> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml index a3961ea..8b8d6f5 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/nonrolling-upgrade-2.6.xml @@ -722,23 +722,6 @@ </execute-stage> </group> - <!-- - Invoke "hdp-select set all" to change any components we may have missed - that are installed on the hosts but not known by Ambari. - --> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Set Version On All Hosts"> - <scope>COMPLETE</scope> - <skippable>true</skippable> - <supports-auto-skip-failure>false</supports-auto-skip-failure> - - <execute-stage title="Update stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <!-- Now, restart all of the services. --> <group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper"> <service-check>false</service-check> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml index 5a2a72a..e4ea566 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.5.xml @@ -421,16 +421,6 @@ </service> </group> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> - <scope>COMPLETE</scope> - <execute-stage title="Update remaining HDP stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check"> <direction>UPGRADE</direction> diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml index 5437370..22f5260 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml +++ b/ambari-server/src/main/resources/stacks/HDP/2.5/upgrades/upgrade-2.6.xml @@ -446,16 +446,6 @@ </service> </group> - <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> - <scope>COMPLETE</scope> - <execute-stage title="Update remaining HDP stack to {{version}}"> - <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> - <function>actionexecute</function> - </task> - </execute-stage> - </group> - <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check"> <direction>UPGRADE</direction> diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/upgrades/nonrolling-upgrade-2.0.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/upgrades/nonrolling-upgrade-2.0.xml index 5d24ff8..9d32906 100644 --- a/ambari-server/src/main/resources/stacks/PERF/1.0/upgrades/nonrolling-upgrade-2.0.xml +++ b/ambari-server/src/main/resources/stacks/PERF/1.0/upgrades/nonrolling-upgrade-2.0.xml @@ -101,7 +101,7 @@ <execute-stage title="Update stack to {{version}}"> <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> + <script>scripts/stack_select_set_all.py</script> <function>actionexecute</function> </task> </execute-stage> diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/upgrades/upgrade-2.0.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/upgrades/upgrade-2.0.xml index 9c9cebb..62fcc54 100644 --- a/ambari-server/src/main/resources/stacks/PERF/1.0/upgrades/upgrade-2.0.xml +++ b/ambari-server/src/main/resources/stacks/PERF/1.0/upgrades/upgrade-2.0.xml @@ -147,7 +147,7 @@ <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts"> <execute-stage title="Update remaining HDP stack to {{version}}"> <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> + <script>scripts/stack_select_set_all.py</script> <function>actionexecute</function> </task> </execute-stage> diff --git a/ambari-server/src/test/python/TestStackFeature.py b/ambari-server/src/test/python/TestStackFeature.py index 09d2d8c..8e584b1 100644 --- a/ambari-server/src/test/python/TestStackFeature.py +++ b/ambari-server/src/test/python/TestStackFeature.py @@ -196,6 +196,8 @@ class TestStackFeature(TestCase): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", + "associatedStackId":"HDP-2.5", + "associatedVersion":"2.5.9.9-9999", "isDowngradeAllowed": True, "isSwitchBits": False } @@ -235,6 +237,8 @@ class TestStackFeature(TestCase): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", + "associatedStackId":"HDP-2.5", + "associatedVersion":"2.5.9.9-9999", "isDowngradeAllowed": True, "isSwitchBits": False } @@ -275,6 +279,8 @@ class TestStackFeature(TestCase): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", + "associatedStackId":"HDP-2.5", + "associatedVersion":"2.5.9.9-9999", "isDowngradeAllowed": True, "isSwitchBits": False } @@ -314,7 +320,9 @@ class TestStackFeature(TestCase): "direction":"DOWNGRADE", "type":"rolling_upgrade", "isRevert":False, - "orchestration":"STANDARD" + "orchestration":"STANDARD", + "associatedStackId":"HDP-2.5", + "associatedVersion":"2.5.9.9-9999" } } diff --git a/ambari-server/src/test/python/TestStackSelect.py b/ambari-server/src/test/python/TestStackSelect.py index f8c5b8b..462d3a0 100644 --- a/ambari-server/src/test/python/TestStackSelect.py +++ b/ambari-server/src/test/python/TestStackSelect.py @@ -161,6 +161,8 @@ class TestStackSelect(TestCase): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", + "associatedStackId":"HDP-2.5", + "associatedVersion":"2.5.9.9-9999", "isDowngradeAllowed": True, "isSwitchBits": False } @@ -201,6 +203,8 @@ class TestStackSelect(TestCase): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", + "associatedStackId":"HDP-2.5", + "associatedVersion":"2.5.9.9-9999", "isDowngradeAllowed": True, "isSwitchBits": False } diff --git a/ambari-server/src/test/python/TestUpgradeSummary.py b/ambari-server/src/test/python/TestUpgradeSummary.py index a117f1a..e2bc2c5 100644 --- a/ambari-server/src/test/python/TestUpgradeSummary.py +++ b/ambari-server/src/test/python/TestUpgradeSummary.py @@ -97,6 +97,8 @@ class TestUpgradeSummary(TestCase): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", + "associatedStackId":"HDP-2.5", + "associatedVersion":"2.5.9.9-9999", "isDowngradeAllowed": True, "isSwitchBits": False } @@ -135,6 +137,8 @@ class TestUpgradeSummary(TestCase): "type":"rolling_upgrade", "isRevert":False, "orchestration":"STANDARD", + "associatedStackId":"HDP-2.5", + "associatedVersion":"2.5.9.9-9999", "isDowngradeAllowed": True, "isSwitchBits": False } diff --git a/ambari-server/src/test/python/custom_actions/test_ru_set_all.py b/ambari-server/src/test/python/custom_actions/test_stack_select_set_all.py similarity index 64% rename from ambari-server/src/test/python/custom_actions/test_ru_set_all.py rename to ambari-server/src/test/python/custom_actions/test_stack_select_set_all.py index 6421397..b2b10c6 100644 --- a/ambari-server/src/test/python/custom_actions/test_ru_set_all.py +++ b/ambari-server/src/test/python/custom_actions/test_stack_select_set_all.py @@ -46,7 +46,7 @@ def fake_call(command, **kwargs): """ return (0, str(command)) -class TestRUSetAll(RMFTestCase): +class TestStackSelectSetAll(RMFTestCase): def get_custom_actions_dir(self): return os.path.join(self.get_src_folder(), "test/resources/custom_actions/") @@ -58,10 +58,8 @@ class TestRUSetAll(RMFTestCase): # Import the class under test. This is done here as opposed to the rest of the imports because the get_os_type() # method needs to be patched first. - from ru_set_all import UpgradeSetAll + from stack_select_set_all import UpgradeSetAll global UpgradeSetAll - from ru_set_all import link_config - global link_config def tearDown(self): Logger.logger = None @@ -80,6 +78,7 @@ class TestRUSetAll(RMFTestCase): json_payload["configurations"]["cluster-env"]["stack_tools"] = self.get_stack_tools() json_payload["configurations"]["cluster-env"]["stack_features"] = self.get_stack_features() + json_payload["upgradeSummary"] = TestStackSelectSetAll._get_upgrade_summary_no_downgrade()["upgradeSummary"] config_dict = ConfigDictionary(json_payload) @@ -101,62 +100,69 @@ class TestRUSetAll(RMFTestCase): ru_execute = UpgradeSetAll() ru_execute.actionexecute(None) - call_mock.assert_called_with(('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'all', u'2.2.1.0-2260'), sudo=True) + call_mock.assert_called_with(('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'all', u'2.5.9.9-9999'), sudo=True) + @patch("os.path.exists") @patch("resource_management.core.shell.call") @patch.object(Script, 'get_config') @patch.object(OSCheck, 'is_redhat_family') - @patch("ru_set_all.link_config") - def test_execution_23(self, link_mock, family_mock, get_config_mock, call_mock, exists_mock): + def test_skippable_hosts(self, family_mock, get_config_mock, call_mock, exists_mock): + """ + Tests that hosts are skippable if they don't have stack components installed + :return: + """ # Mock the config objects - json_file_path = os.path.join(self.get_custom_actions_dir(), "ru_execute_tasks_namenode_prepare.json") + json_file_path = os.path.join(self.get_custom_actions_dir(), + "ru_execute_tasks_namenode_prepare.json") self.assertTrue(os.path.isfile(json_file_path)) + with open(json_file_path, "r") as json_file: json_payload = json.load(json_file) - json_payload['clusterLevelParams']['stack_name'] = "HDP" - json_payload['clusterLevelParams']['stack_version'] = "2.3" - json_payload['commandParams']['version'] = "2.3.0.0-1234" json_payload["configurations"]["cluster-env"]["stack_tools"] = self.get_stack_tools() json_payload["configurations"]["cluster-env"]["stack_features"] = self.get_stack_features() - json_payload["configurations"]["cluster-env"]["stack_packages"] = self.get_stack_packages() + json_payload["upgradeSummary"] = TestStackSelectSetAll._get_upgrade_summary_no_downgrade()["upgradeSummary"] config_dict = ConfigDictionary(json_payload) - family_mock.return_value = True + family_mock.return_value = False get_config_mock.return_value = config_dict - call_mock.side_effect = fake_call # echo the command exists_mock.return_value = True + def hdp_select_call(command, **kwargs): + # return no versions + if "versions" in command: + return (0,"") + + return (0,command) + + call_mock.side_effect = hdp_select_call + # Ensure that the json file was actually read. stack_name = default("/clusterLevelParams/stack_name", None) stack_version = default("/clusterLevelParams/stack_version", None) service_package_folder = default('/roleParams/service_package_folder', None) self.assertEqual(stack_name, "HDP") - self.assertEqual(stack_version, '2.3') + self.assertEqual(stack_version, '2.2') self.assertEqual(service_package_folder, "common-services/HDFS/2.1.0.2.0/package") # Begin the test ru_execute = UpgradeSetAll() ru_execute.actionexecute(None) - self.assertTrue(link_mock.called) - call_mock.assert_called_with(('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'all', '2.3.0.0-1234'), sudo=True) + call_mock.assert_called_with(('ambari-python-wrap', u'/usr/bin/hdp-select', 'versions'), sudo = True) + self.assertEqual(call_mock.call_count, 1) + @patch("os.path.exists") @patch("resource_management.core.shell.call") @patch.object(Script, 'get_config') @patch.object(OSCheck, 'is_redhat_family') - def test_skippable_hosts(self, family_mock, get_config_mock, call_mock, exists_mock): - """ - Tests that hosts are skippable if they don't have stack components installed - :return: - """ + def test_execution_with_downgrade_allowed(self, family_mock, get_config_mock, call_mock, exists_mock): # Mock the config objects - json_file_path = os.path.join(self.get_custom_actions_dir(), - "ru_execute_tasks_namenode_prepare.json") + json_file_path = os.path.join(self.get_custom_actions_dir(), "ru_execute_tasks_namenode_prepare.json") self.assertTrue(os.path.isfile(json_file_path)) with open(json_file_path, "r") as json_file: @@ -164,21 +170,53 @@ class TestRUSetAll(RMFTestCase): json_payload["configurations"]["cluster-env"]["stack_tools"] = self.get_stack_tools() json_payload["configurations"]["cluster-env"]["stack_features"] = self.get_stack_features() + json_payload["upgradeSummary"] = TestStackSelectSetAll._get_upgrade_summary_downgrade_allowed()["upgradeSummary"] config_dict = ConfigDictionary(json_payload) - family_mock.return_value = False + family_mock.return_value = True get_config_mock.return_value = config_dict + call_mock.side_effect = fake_call # echo the command exists_mock.return_value = True - def hdp_select_call(command, **kwargs): - # return no versions - if "versions" in command: - return (0,"") + # Ensure that the json file was actually read. + stack_name = default("/clusterLevelParams/stack_name", None) + stack_version = default("/clusterLevelParams/stack_version", None) + service_package_folder = default('/roleParams/service_package_folder', None) - return (0,command) + self.assertEqual(stack_name, "HDP") + self.assertEqual(stack_version, '2.2') + self.assertEqual(service_package_folder, "common-services/HDFS/2.1.0.2.0/package") - call_mock.side_effect = hdp_select_call + # Begin the test + ru_execute = UpgradeSetAll() + ru_execute.actionexecute(None) + + call_mock.assert_not_called() + + + @patch("os.path.exists") + @patch("resource_management.core.shell.call") + @patch.object(Script, 'get_config') + @patch.object(OSCheck, 'is_redhat_family') + def test_execution_with_patch_upgrade(self, family_mock, get_config_mock, call_mock, exists_mock): + # Mock the config objects + json_file_path = os.path.join(self.get_custom_actions_dir(), "ru_execute_tasks_namenode_prepare.json") + self.assertTrue(os.path.isfile(json_file_path)) + + with open(json_file_path, "r") as json_file: + json_payload = json.load(json_file) + + json_payload["configurations"]["cluster-env"]["stack_tools"] = self.get_stack_tools() + json_payload["configurations"]["cluster-env"]["stack_features"] = self.get_stack_features() + json_payload["upgradeSummary"] = TestStackSelectSetAll._get_upgrade_summary_patch_upgrade()["upgradeSummary"] + + config_dict = ConfigDictionary(json_payload) + + family_mock.return_value = True + get_config_mock.return_value = config_dict + call_mock.side_effect = fake_call # echo the command + exists_mock.return_value = True # Ensure that the json file was actually read. stack_name = default("/clusterLevelParams/stack_name", None) @@ -193,80 +231,55 @@ class TestRUSetAll(RMFTestCase): ru_execute = UpgradeSetAll() ru_execute.actionexecute(None) - call_mock.assert_called_with(('ambari-python-wrap', u'/usr/bin/hdp-select', 'versions'), sudo = True) - self.assertEqual(call_mock.call_count, 1) + call_mock.assert_not_called() - @patch("os.path.exists") - @patch("os.path.islink") - @patch("os.path.isdir") - @patch("os.path.isfile") - @patch("os.path.realpath") - @patch("shutil.rmtree") - def test_link_config(self, shutil_rmtree_mock, os_path_realpath_mock, os_path_isfile_mock, - os_path_isdir_mock, os_path_islink_mock, - os_path_exists_mock): - # Test normal flow - os_path_islink_mock.return_value = False - os_path_realpath_mock.return_value = "/some/another/path" - os_path_exists_mock.side_effect = [True, False] - old_config = "/old/config" - link_conf = "/link/config" - - with Environment(test_mode=True) as RMFTestCase.env: - link_config(old_config, link_conf) - self.assertTrue(shutil_rmtree_mock.called) - self.assertEquals(shutil_rmtree_mock.call_args_list[0][0][0], old_config) - self.assertResourceCalled('Execute', ('cp', '-R', '-p', '/old/config', '/old/conf.backup'), - logoutput = True, - sudo = True, - ) - self.assertResourceCalled('Link', '/old/config', - to = '/link/config', - ) - self.assertNoMoreResources() - - # Test case when link exists but is wrong - shutil_rmtree_mock.reset_mock() - os_path_islink_mock.return_value = True - with Environment(test_mode=True) as RMFTestCase.env: - link_config(old_config, link_conf) - self.assertFalse(shutil_rmtree_mock.called) - self.assertResourceCalled('Link', '/old/config', - to = '/link/config', - ) - self.assertNoMoreResources() - - # Test case when link exists and is correct - shutil_rmtree_mock.reset_mock() - os_path_islink_mock.return_value = True - os_path_realpath_mock.return_value = link_conf - - with Environment(test_mode=True) as RMFTestCase.env: - link_config(old_config, link_conf) - self.assertFalse(shutil_rmtree_mock.called) - self.assertNoMoreResources() - - # Test case when old link does not exist at all - shutil_rmtree_mock.reset_mock() - os_path_islink_mock.return_value = False - os_path_exists_mock.side_effect = [False] - - with Environment(test_mode=True) as RMFTestCase.env: - link_config(old_config, link_conf) - self.assertFalse(shutil_rmtree_mock.called) - self.assertNoMoreResources() - - # Test case when backup directory already exists - shutil_rmtree_mock.reset_mock() - os_path_islink_mock.return_value = False - os_path_exists_mock.side_effect = [True, True] - - with Environment(test_mode=True) as RMFTestCase.env: - link_config(old_config, link_conf) - self.assertTrue(shutil_rmtree_mock.called) - self.assertEquals(shutil_rmtree_mock.call_args_list[0][0][0], old_config) - self.assertResourceCalled('Link', '/old/config', - to = '/link/config', - ) - self.assertNoMoreResources() + @staticmethod + def _get_upgrade_summary_no_downgrade(): + """ + A STANDARD UPGRADE that cannot be downgraded + :return: + """ + return { + "upgradeSummary": { + "services":{ + "HDFS":{ + "sourceRepositoryId":1, + "sourceStackId":"HDP-2.4", + "sourceVersion":"2.4.0.0-1234", + "targetRepositoryId":2, + "targetStackId":"HDP-2.5", + "targetVersion":"2.5.9.9-9999" + } + }, + "direction":"UPGRADE", + "type":"rolling_upgrade", + "isRevert":False, + "orchestration":"STANDARD", + "associatedStack": "HDP-2.5", + "associatedVersion":"2.5.9.9-9999", + "isDowngradeAllowed": False, + "isSwitchBits": False + } + } + + @staticmethod + def _get_upgrade_summary_downgrade_allowed(): + """ + A STANDARD UPGRADE that can be downgraded + :return: + """ + upgrade_summary = TestStackSelectSetAll._get_upgrade_summary_no_downgrade() + upgrade_summary["upgradeSummary"]["isDowngradeAllowed"] = True + return upgrade_summary + + + @staticmethod + def _get_upgrade_summary_patch_upgrade(): + """ + A STANDARD UPGRADE that can be downgraded + :return: + """ + upgrade_summary = TestStackSelectSetAll._get_upgrade_summary_no_downgrade() + upgrade_summary["upgradeSummary"]["orchestration"] = "PATCH" + return upgrade_summary \ No newline at end of file diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml index 2a1c889..ea3da69 100644 --- a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml +++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_nonrolling_new_stack.xml @@ -230,7 +230,7 @@ <direction>DOWNGRADE</direction> <execute-stage title="Restore configuration directories and remove HDP 2.3 symlinks"> <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> + <script>scripts/stack_select_set_all.py</script> <function>foo_function</function> </task> </execute-stage> @@ -574,7 +574,7 @@ <execute-stage title="Update stack to {{version}}"> <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> + <script>scripts/stack_select_set_all.py</script> <function>actionexecute</function> </task> </execute-stage> diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_test_nonrolling.xml b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_test_nonrolling.xml index 3dd4bc5..5492c5b 100644 --- a/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_test_nonrolling.xml +++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/upgrades/upgrade_test_nonrolling.xml @@ -118,7 +118,7 @@ <skippable>true</skippable> <execute-stage title="Update stack to {{version}}"> <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> + <script>scripts/stack_select_set_all.py</script> <function>actionexecute</function> </task> </execute-stage> diff --git a/ambari-server/src/test/resources/stacks/HDP/2.2.0/upgrades/upgrade_test.xml b/ambari-server/src/test/resources/stacks/HDP/2.2.0/upgrades/upgrade_test.xml index c819d12..87e534b 100644 --- a/ambari-server/src/test/resources/stacks/HDP/2.2.0/upgrades/upgrade_test.xml +++ b/ambari-server/src/test/resources/stacks/HDP/2.2.0/upgrades/upgrade_test.xml @@ -111,7 +111,7 @@ </execute-stage> <execute-stage title="Update remaining HDP stack to {{version}}"> <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> + <script>scripts/stack_select_set_all.py</script> <function>actionexecute</function> </task> </execute-stage> diff --git a/ambari-server/src/test/resources/stacks/HDP/2.2.0/upgrades/upgrade_test_15388.xml b/ambari-server/src/test/resources/stacks/HDP/2.2.0/upgrades/upgrade_test_15388.xml index 640ea0a..e5bc420 100644 --- a/ambari-server/src/test/resources/stacks/HDP/2.2.0/upgrades/upgrade_test_15388.xml +++ b/ambari-server/src/test/resources/stacks/HDP/2.2.0/upgrades/upgrade_test_15388.xml @@ -122,7 +122,7 @@ </execute-stage> <execute-stage title="Update remaining HDP stack to {{version}}"> <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> + <script>scripts/stack_select_set_all.py</script> <function>actionexecute</function> </task> </execute-stage> diff --git a/ambari-server/src/test/resources/stacks_with_upgrade_cycle/HDP/2.2.0/upgrades/upgrade_test_15388.xml b/ambari-server/src/test/resources/stacks_with_upgrade_cycle/HDP/2.2.0/upgrades/upgrade_test_15388.xml index 8a02781..e093509 100644 --- a/ambari-server/src/test/resources/stacks_with_upgrade_cycle/HDP/2.2.0/upgrades/upgrade_test_15388.xml +++ b/ambari-server/src/test/resources/stacks_with_upgrade_cycle/HDP/2.2.0/upgrades/upgrade_test_15388.xml @@ -122,7 +122,7 @@ </execute-stage> <execute-stage title="Update remaining HDP stack to {{version}}"> <task xsi:type="execute"> - <script>scripts/ru_set_all.py</script> + <script>scripts/stack_select_set_all.py</script> <function>actionexecute</function> </task> </execute-stage> -- To stop receiving notification emails like this one, please contact jonathanhur...@apache.org.