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.