You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2015/03/04 19:39:45 UTC

[3/4] ambari git commit: AMBARI-9876. Added Services after RU installed wrong version (dlysnichenko)

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/04d63afd
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/04d63afd
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/04d63afd

Branch: refs/heads/trunk
Commit: 04d63afd1eba9a246031de261cfe9473ec345bb5
Parents: 6549fe8
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Wed Mar 4 20:36:21 2015 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Wed Mar 4 20:39:16 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/04d63afd/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/04d63afd/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/04d63afd/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/04d63afd/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/04d63afd/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/04d63afd/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";