You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2017/01/13 12:54:14 UTC
ambari git commit: AMBARI-19293. Component install and after-install
should not run in parallel (Attila Doroszlai via magyari_sandor)
Repository: ambari
Updated Branches:
refs/heads/trunk f0e829973 -> e5d17bc75
AMBARI-19293. Component install and after-install should not run in parallel (Attila Doroszlai via magyari_sandor)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e5d17bc7
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e5d17bc7
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e5d17bc7
Branch: refs/heads/trunk
Commit: e5d17bc75c3d47b9f2979e26b4a011dd9e494398
Parents: f0e8299
Author: Attila Doroszlai <ad...@hortonworks.com>
Authored: Fri Jan 13 13:46:06 2017 +0100
Committer: Sandor Magyari <sm...@hortonworks.com>
Committed: Fri Jan 13 13:46:06 2017 +0100
----------------------------------------------------------------------
.../libraries/script/script.py | 26 ++++++++++++++++++++
.../2.0.6/hooks/after-INSTALL/scripts/params.py | 3 ++-
.../3.0/hooks/after-INSTALL/scripts/params.py | 3 ++-
3 files changed, 30 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/e5d17bc7/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 ccb09c7..6eec3cc 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
@@ -56,6 +56,7 @@ from contextlib import closing
from resource_management.libraries.functions.stack_features import check_stack_feature
from resource_management.libraries.functions.constants import StackFeature
from resource_management.libraries.functions.show_logs import show_logs
+from resource_management.libraries.functions.fcntl_based_process_lock import FcntlBasedProcessLock
import ambari_simplejson as json # simplejson is much faster comparing to Python 2.6 json module and has the same functions set.
@@ -95,7 +96,32 @@ def get_path_from_configuration(name, configuration):
return configuration
+def get_config_lock_file():
+ return os.path.join(Script.get_tmp_dir(), "link_configs_lock_file")
+
+class LockedConfigureMeta(type):
+ '''
+ This metaclass ensures that Script.configure() is invoked with a fcntl-based process lock
+ if necessary (when Ambari Agent is configured to execute tasks concurrently) for all subclasses.
+ '''
+ def __new__(meta, classname, supers, classdict):
+ if 'configure' in classdict:
+ original_configure = classdict['configure']
+
+ def locking_configure(obj, *args, **kw):
+ # local import to avoid circular dependency (default imports Script)
+ from resource_management.libraries.functions.default import default
+ parallel_execution_enabled = int(default("/agentConfigParams/agent/parallel_execution", 0)) == 1
+ lock = FcntlBasedProcessLock(get_config_lock_file(), skip_fcntl_failures = True, enabled = parallel_execution_enabled)
+ with lock:
+ original_configure(obj, *args, **kw)
+
+ classdict['configure'] = locking_configure
+
+ return type.__new__(meta, classname, supers, classdict)
+
class Script(object):
+ __metaclass__ = LockedConfigureMeta
instance = None
http://git-wip-us.apache.org/repos/asf/ambari/blob/e5d17bc7/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
index ed34217..1782298 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
@@ -21,6 +21,7 @@ import os
from ambari_commons.constants import AMBARI_SUDO_BINARY
from resource_management.libraries.script import Script
+from resource_management.libraries.script.script import get_config_lock_file
from resource_management.libraries.functions import default
from resource_management.libraries.functions import conf_select
from resource_management.libraries.functions import stack_select
@@ -96,7 +97,7 @@ has_namenode = not len(namenode_host) == 0
if has_namenode or dfs_type == 'HCFS':
hadoop_conf_dir = conf_select.get_hadoop_conf_dir(force_latest_on_upgrade=True)
-link_configs_lock_file = os.path.join(tmp_dir, "link_configs_lock_file")
+link_configs_lock_file = get_config_lock_file()
stack_select_lock_file = os.path.join(tmp_dir, "stack_select_lock_file")
upgrade_suspended = default("/roleParams/upgrade_suspended", False)
http://git-wip-us.apache.org/repos/asf/ambari/blob/e5d17bc7/ambari-server/src/main/resources/stacks/HDP/3.0/hooks/after-INSTALL/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/3.0/hooks/after-INSTALL/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/3.0/hooks/after-INSTALL/scripts/params.py
index 566f5b3..5dcd39b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/3.0/hooks/after-INSTALL/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/3.0/hooks/after-INSTALL/scripts/params.py
@@ -21,6 +21,7 @@ import os
from ambari_commons.constants import AMBARI_SUDO_BINARY
from resource_management.libraries.script import Script
+from resource_management.libraries.script.script import get_config_lock_file
from resource_management.libraries.functions import default
from resource_management.libraries.functions import format
from resource_management.libraries.functions import conf_select
@@ -91,7 +92,7 @@ has_namenode = not len(namenode_host) == 0
if has_namenode or dfs_type == 'HCFS':
hadoop_conf_dir = conf_select.get_hadoop_conf_dir(force_latest_on_upgrade=True)
-link_configs_lock_file = os.path.join(tmp_dir, "link_configs_lock_file")
+link_configs_lock_file = get_config_lock_file()
stack_select_lock_file = os.path.join(tmp_dir, "stack_select_lock_file")
upgrade_suspended = default("/roleParams/upgrade_suspended", False)