You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jl...@apache.org on 2018/04/06 19:43:51 UTC

[ambari] branch branch-feature-AMBARI-14714 updated: [AMBARI-23458] Creating component instances shouldn't fail if instance already exists when called from the agent (dsen) (#881)

This is an automated email from the ASF dual-hosted git repository.

jluniya pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/branch-feature-AMBARI-14714 by this push:
     new 0899978  [AMBARI-23458] Creating component instances shouldn't fail if instance already exists when called from the agent (dsen) (#881)
0899978 is described below

commit 0899978e4a679a2f0a142d8398cf0c74d5af2125
Author: Dmitry Sen <ds...@apache.org>
AuthorDate: Fri Apr 6 22:43:49 2018 +0300

    [AMBARI-23458] Creating component instances shouldn't fail if instance already exists when called from the agent (dsen) (#881)
---
 .../libraries/functions/mpack_manager_helper.py    |  4 ++--
 .../python/instance_manager/instance_manager.py    | 25 +++++++++++-----------
 .../instance_manager/test_instance_manager.py      | 16 ++++++++++++--
 3 files changed, 29 insertions(+), 16 deletions(-)

diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/mpack_manager_helper.py b/ambari-common/src/main/python/resource_management/libraries/functions/mpack_manager_helper.py
index 652a9e9..e99ff27 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/mpack_manager_helper.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/mpack_manager_helper.py
@@ -72,13 +72,13 @@ def get_component_home_path(mpack_name, instance_name, module_name, components_i
 
 
 def create_component_instance(mpack_name, mpack_version, instance_name, module_name, components_instance_type,
-                              subgroup_name='default', component_instance_name='default'):
+                              subgroup_name='default', component_instance_name='default', fail_if_exists=False):
   """
   creates the single component instance according to the parameters
   :raises ValueError if the parameters doesn't match the mpack or instances structure
   """
   create_mpack(mpack_name, mpack_version, instance_name, subgroup_name, module_name,
-               None, {components_instance_type: [component_instance_name]})
+               None, {components_instance_type: [component_instance_name]}, fail_if_exists)
 
 
 def set_component_instance_version(mpack_name, mpack_version, instance_name, module_name, components_instance_type,
diff --git a/mpack-instance-manager/src/main/python/instance_manager/instance_manager.py b/mpack-instance-manager/src/main/python/instance_manager/instance_manager.py
index 6f7587c..39e5ea6 100644
--- a/mpack-instance-manager/src/main/python/instance_manager/instance_manager.py
+++ b/mpack-instance-manager/src/main/python/instance_manager/instance_manager.py
@@ -40,7 +40,7 @@ SERVER_CATEGORY = "SERVER"
 
 
 def create_mpack(mpack_name, mpack_version, mpack_instance, subgroup_name=DEFAULT_SUBGROUP_NAME, module_name=None,
-                 components=None, components_map=None):
+                 components=None, components_map=None, fail_if_exists=True):
   """
   Use case 1: Creates an instance of mpack with a new subgroup, new module and one or more component(s)
 
@@ -57,7 +57,7 @@ def create_mpack(mpack_name, mpack_version, mpack_instance, subgroup_name=DEFAUL
   validate_mpack_for_creation_or_changing(mpack_name, mpack_version, module_name, components, components_map)
 
   MpackInstance.create_mpack_instance(mpack_name, mpack_version, mpack_instance, subgroup_name, module_name,
-                                      components, components_map)
+                                      components, components_map, fail_if_exists)
 
 
 def set_mpack_instance(mpack, mpack_version, mpack_instance, subgroup_name=DEFAULT_SUBGROUP_NAME, module_name=None,
@@ -409,10 +409,9 @@ class MpackInstance(Instance):
 
   @staticmethod
   def create_mpack_instance(mpack_name, mpack_version, mpack_instance, subgroup_name, module_name,
-                            components,
-                            components_map):
+                            components, components_map, fail_if_component_instance_exists):
     ModuleInstance.create_module_instance(mpack_name, mpack_version, mpack_instance, subgroup_name,
-                                          module_name, components, components_map)
+                                          module_name, components, components_map, fail_if_component_instance_exists)
 
     default_mpack_instance_symlink = os.path.join(ROOT_FOLDER_PATH, INSTANCES_FOLDER_NAME, mpack_name,
                                                   DEFAULT_MPACK_INSTANCE_NAME)
@@ -511,8 +510,7 @@ class ModuleInstance(Instance):
 
   @staticmethod
   def create_module_instance(mpack_name, mpack_version, mpack_instance, subgroup_name, module_name,
-                             components,
-                             components_map):
+                             components, components_map, fail_if_component_instance_exists):
     meta_mpack = MetaMpack.parse_mpack(
       path=os.path.join(ROOT_FOLDER_PATH, MPACKS_FOLDER_NAME, mpack_name, mpack_version))
 
@@ -523,13 +521,13 @@ class ModuleInstance(Instance):
       for component_type in components:
         ComponentInstance.create_component_instance(mpack_name, mpack_version, mpack_instance, subgroup_name,
                                                     module_name, component_type, DEFAULT_COMPONENT_INSTANCE_NAME,
-                                                    is_client_module)
+                                                    is_client_module, fail_if_component_instance_exists)
     else:
       for component_type in components_map:
         for component_instance_name in components_map[component_type]:
           ComponentInstance.create_component_instance(mpack_name, mpack_version, mpack_instance, subgroup_name,
                                                       module_name, component_type, component_instance_name,
-                                                      is_client_module)
+                                                      is_client_module, fail_if_component_instance_exists)
 
   def set_new_version(self, mpack_name, mpack_version):
     for component_type in self.components_map:
@@ -609,7 +607,7 @@ class ComponentInstance(Instance):
 
   @staticmethod
   def create_component_instance(mpack_name, mpack_version, mpack_instance, subgroup_name, module_name,
-                                component_type, component_instance_name, is_client_module):
+                                component_type, component_instance_name, is_client_module, fail_if_component_instance_exists):
     if is_client_module:
       component_path = os.path.join(ROOT_FOLDER_PATH, INSTANCES_FOLDER_NAME, mpack_name, mpack_instance, subgroup_name,
                                     component_type)
@@ -619,8 +617,11 @@ class ComponentInstance(Instance):
     mpack_path = os.path.join(ROOT_FOLDER_PATH, MPACKS_FOLDER_NAME, mpack_name, mpack_version, component_type)
 
     if os.path.exists(component_path):
-      raise ValueError(
-        "The instance {0} already exist. To change the version use set-mpack-instance command".format(component_path))
+      if fail_if_component_instance_exists:
+        raise ValueError(
+          "The instance {0} already exist. To change the version use set-mpack-instance command".format(component_path))
+      else:
+        return
 
     if not os.path.lexists(mpack_path):
       raise ValueError("Path doesn't exist: " + mpack_path)
diff --git a/mpack-instance-manager/src/test/python/instance_manager/test_instance_manager.py b/mpack-instance-manager/src/test/python/instance_manager/test_instance_manager.py
index 0b2447c..5d359a4 100644
--- a/mpack-instance-manager/src/test/python/instance_manager/test_instance_manager.py
+++ b/mpack-instance-manager/src/test/python/instance_manager/test_instance_manager.py
@@ -413,12 +413,24 @@ class TestInstanceManager(TestCase):
                         " subgroup_name:default, module_name:hdfs, components:None,"
                         " components_map:{'hdfs_server': ['non-existing-instance']}")
 
+  def test_create_mpack_fail_if_exists(self):
+    create_mpack_with_defaults()
+    try:
+      # should throw exception
+      create_mpack_with_defaults()
+      self.assertTrue(False)
+    except ValueError as e:
+      self.assertTrue("already exist" in e.message)
+
+    # this call shouldn't throw exception
+    create_mpack_with_defaults(fail_if_exists=False)
+
 
 def create_mpack_with_defaults(mpack_name=MPACK_NAME, mpack_version=MPACK_VERSION_1, mpack_instance=INSTANCE_NAME_1,
                                subgroup_name=SUBGROUP_NAME, module_name=SERVER_MODULE_NAME, components='*',
-                               components_map=None):
+                               components_map=None, fail_if_exists=True):
   instance_manager.create_mpack(mpack_name, mpack_version, mpack_instance,
-                                subgroup_name, module_name, components, components_map)
+                                subgroup_name, module_name, components, components_map, fail_if_exists)
 
 
 def build_rpm_structure(mpack_name=MPACK_NAME, mpack_version=MPACK_VERSION_1, mpack_json=MPACK_JSON,

-- 
To stop receiving notification emails like this one, please contact
jluniya@apache.org.