Repository: ambari Updated Branches: refs/heads/branch-2.0.0 36b4d564d -> 7b128b263 refs/heads/trunk 6549fe874 -> 16a97aace
AMBARI-9876. Added Services after RU installed wrong version (dlysnichenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fbc9f9f5 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fbc9f9f5 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fbc9f9f5 Branch: refs/heads/branch-2.0.0 Commit: fbc9f9f586a0d9db50c9f1fa5f7d021c5d1dfacb Parents: 36b4d56 Author: Lisnichenko Dmitro <[email protected]> Authored: Wed Mar 4 20:36:21 2015 +0200 Committer: Lisnichenko Dmitro <[email protected]> Committed: Wed Mar 4 20:36:21 2015 +0200 ---------------------------------------------------------------------- .../python/resource_management/TestScript.py | 43 ++++++++++++++++++++ .../libraries/script/script.py | 34 ++++++++++++---- .../ambari/server/agent/ExecutionCommand.java | 1 + .../AmbariCustomCommandExecutionHelper.java | 6 +++ .../AmbariManagementControllerImpl.java | 6 +++ .../internal/UpgradeResourceProvider.java | 3 +- 6 files changed, 84 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/fbc9f9f5/ambari-agent/src/test/python/resource_management/TestScript.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/test/python/resource_management/TestScript.py b/ambari-agent/src/test/python/resource_management/TestScript.py index 1d112d8..8463e79 100644 --- a/ambari-agent/src/test/python/resource_management/TestScript.py +++ b/ambari-agent/src/test/python/resource_management/TestScript.py @@ -111,6 +111,49 @@ class TestScript(TestCase): self.assertEqual(Script.structuredOut, {"1": "3", "2": "2"}) + @patch.object(Script, 'get_stack_to_component') + def test_set_version(self, get_stack_to_component_mock): + good_config = { + 'hostLevelParams': { + 'stack_name': "HDP", + 'stack_version': "2.2" + }, + 'commandParams': { + 'version': "2.2.0.0-2041" + } + } + get_stack_to_component_mock.return_value = {"HDP": "kafka-broker"} + + # Testing default workflow + with Environment(".", test_mode=True) as env: + script = Script() + Script.config = good_config + script.set_version() + resource_dump = pprint.pformat(env.resource_list) + self.assertEquals(resource_dump, '[u"Execute[\'/usr/bin/hdp-select set kafka-broker 2.2.0.0-2041\']"]') + + # Component does not provide mapping + get_stack_to_component_mock.return_value = {} + + with Environment(".", test_mode=True) as env: + script = Script() + Script.config = good_config + script.set_version() + resource_dump = pprint.pformat(env.resource_list) + self.assertEquals(resource_dump, '[]') + + # Component provided mapping, but configuration is not complete (testing fallback) + get_stack_to_component_mock.return_value = {"HDP": "kafka-broker"} + bad_config = {} + + with Environment(".", test_mode=True) as env: + script = Script() + Script.config = bad_config + script.set_version() + resource_dump = pprint.pformat(env.resource_list) + self.assertEquals(resource_dump, '[]') + + def tearDown(self): # enable stdout sys.stdout = sys.__stdout__ http://git-wip-us.apache.org/repos/asf/ambari/blob/fbc9f9f5/ambari-common/src/main/python/resource_management/libraries/script/script.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/script/script.py b/ambari-common/src/main/python/resource_management/libraries/script/script.py index 00580c0..5af8706 100644 --- a/ambari-common/src/main/python/resource_management/libraries/script/script.py +++ b/ambari-common/src/main/python/resource_management/libraries/script/script.py @@ -39,6 +39,7 @@ from resource_management.libraries.functions.version_select_util import get_comp from resource_management.libraries.functions.version import compare_versions from resource_management.libraries.functions.version import format_hdp_stack_version from resource_management.libraries.script.config_dictionary import ConfigDictionary, UnknownConfiguration +from resource_management.core.resources.system import Execute if OSCheck.is_windows_family(): from resource_management.libraries.functions.install_hdp_msi import install_windows_msi @@ -60,7 +61,7 @@ USAGE = """Usage: {0} <COMMAND> <JSON_CONFIG> <BASEDIR> <STROUTPUT> <LOGGING_LEV _PASSWORD_MAP = {"/configurations/cluster-env/hadoop.user.name":"/configurations/cluster-env/hadoop.user.password"} -def get_path_form_configuration(name, configuration): +def get_path_from_configuration(name, configuration): subdicts = filter(None, name.split('/')) for x in subdicts: @@ -192,14 +193,14 @@ class Script(object): reload_windows_env() try: - with open(self.command_data_file, "r") as f: + with open(self.command_data_file) as f: pass Script.config = ConfigDictionary(json.load(f)) - #load passwords here(used on windows to impersonate different users) + # load passwords here(used on windows to impersonate different users) Script.passwords = {} for k, v in _PASSWORD_MAP.iteritems(): - if get_path_form_configuration(k,Script.config) and get_path_form_configuration(v, Script.config): - Script.passwords[get_path_form_configuration(k,Script.config)] = get_path_form_configuration(v, Script.config) + if get_path_from_configuration(k, Script.config) and get_path_from_configuration(v, Script.config): + Script.passwords[get_path_from_configuration(k, Script.config)] = get_path_from_configuration(v, Script.config) except IOError: logger.exception("Can not read json file with command parameters: ") @@ -211,6 +212,8 @@ class Script(object): with Environment(self.basedir, tmp_dir=Script.tmp_dir) as env: env.config.download_path = Script.tmp_dir method(env) + if command_name == "install": + self.set_version() except ClientComponentHasNoStatus or ComponentIsNotRunning: # Support of component status checks. # Non-zero exit code is interpreted as an INSTALLED status of a component @@ -293,10 +296,10 @@ class Script(object): config["hostLevelParams"]["agentCacheDir"], "hdp.msi", self.get_password("hadoop"), str(config['hostLevelParams']['stack_version'])) reload_windows_env() - # RepoInstaller.remove_repos(config) pass - def fail_with_error(self, message): + @staticmethod + def fail_with_error(message): """ Prints error message and exits with non-zero exit code """ @@ -331,7 +334,7 @@ class Script(object): """ config = self.get_config() componentCategory = None - try : + try: componentCategory = config['roleParams']['component_category'] except KeyError: pass @@ -462,3 +465,18 @@ class Script(object): archive_dir(output_filename, conf_tmp_dir) finally: Directory(conf_tmp_dir, action="delete") + + def set_version(self): + from resource_management.libraries.functions.default import default + stack_name = default("/hostLevelParams/stack_name", None) + version = default("/commandParams/version", None) + stack_version_unformatted = str(default("/hostLevelParams/stack_version", "")) + hdp_stack_version = format_hdp_stack_version(stack_version_unformatted) + stack_to_component = self.get_stack_to_component() + if stack_to_component: + component_name = stack_to_component[stack_name] if stack_name in stack_to_component else None + if component_name and stack_name and version and \ + compare_versions(format_hdp_stack_version(hdp_stack_version), '2.2.0.0') >= 0: + Execute("/usr/bin/hdp-select set {component_name} {version}".format( + component_name=component_name, version=version)) + http://git-wip-us.apache.org/repos/asf/ambari/blob/fbc9f9f5/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java index 3d2c622..5ccf1ec 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java @@ -303,6 +303,7 @@ public class ExecutionCommand extends AgentCommand { String REFRESH_ADITIONAL_COMPONENT_TAGS = "forceRefreshConfigTags"; String USER_LIST = "user_list"; String GROUP_LIST = "group_list"; + String VERSION = "version"; String SERVICE_CHECK = "SERVICE_CHECK"; // TODO: is it standart command? maybe add it to RoleCommand enum? String CUSTOM_COMMAND = "custom_command"; http://git-wip-us.apache.org/repos/asf/ambari/blob/fbc9f9f5/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java index 2fca2b3..5a15f64 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java @@ -63,6 +63,7 @@ import org.apache.ambari.server.controller.internal.RequestOperationLevel; import org.apache.ambari.server.controller.internal.RequestResourceFilter; import org.apache.ambari.server.controller.spi.Resource; import org.apache.ambari.server.metadata.ActionMetadata; +import org.apache.ambari.server.orm.entities.ClusterVersionEntity; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.CommandScriptDefinition; @@ -372,6 +373,11 @@ public class AmbariCustomCommandExecutionHelper { commandParams.put(HOOKS_FOLDER, stackInfo.getStackHooksFolder()); + ClusterVersionEntity currentClusterVersion = cluster.getCurrentClusterVersion(); + if (currentClusterVersion != null) { + commandParams.put(KeyNames.VERSION, currentClusterVersion.getRepositoryVersion().getVersion()); + } + execCmd.setCommandParams(commandParams); Map<String, String> roleParams = execCmd.getRoleParams(); http://git-wip-us.apache.org/repos/asf/ambari/blob/fbc9f9f5/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 ac91377..731227d 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 @@ -34,6 +34,7 @@ import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SCRIPT_TY import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SERVICE_PACKAGE_FOLDER; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SERVICE_REPO_INFO; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.USER_LIST; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.VERSION; import java.io.File; import java.io.IOException; @@ -85,6 +86,7 @@ import org.apache.ambari.server.customactions.ActionDefinition; import org.apache.ambari.server.metadata.ActionMetadata; import org.apache.ambari.server.metadata.RoleCommandOrder; import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; +import org.apache.ambari.server.orm.entities.ClusterVersionEntity; import org.apache.ambari.server.orm.entities.OperatingSystemEntity; import org.apache.ambari.server.orm.entities.RepositoryEntity; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; @@ -1690,6 +1692,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle if (script != null) { commandParams.put(SCRIPT, script.getScript()); commandParams.put(SCRIPT_TYPE, script.getScriptType().toString()); + ClusterVersionEntity currentClusterVersion = cluster.getCurrentClusterVersion(); + if (currentClusterVersion != null) { + commandParams.put(VERSION, currentClusterVersion.getRepositoryVersion().getVersion()); + } if (script.getTimeout() > 0) { scriptCommandTimeout = String.valueOf(script.getTimeout()); } http://git-wip-us.apache.org/repos/asf/ambari/blob/fbc9f9f5/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java index 4530726..e02b917 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradeResourceProvider.java @@ -20,6 +20,7 @@ package org.apache.ambari.server.controller.internal; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOOKS_FOLDER; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_LOCATION; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.SERVICE_PACKAGE_FOLDER; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.VERSION; import java.util.ArrayList; import java.util.Arrays; @@ -131,7 +132,7 @@ public class UpgradeResourceProvider extends AbstractControllerResourceProvider Arrays.asList(UPGRADE_REQUEST_ID, UPGRADE_CLUSTER_NAME)); private static final Set<String> PROPERTY_IDS = new HashSet<String>(); - private static final String COMMAND_PARAM_VERSION = "version"; + private static final String COMMAND_PARAM_VERSION = VERSION; private static final String COMMAND_PARAM_CLUSTER_NAME = "clusterName"; private static final String COMMAND_PARAM_DIRECTION = "upgrade_direction"; private static final String COMMAND_PARAM_RESTART_TYPE = "restart_type";
