AMBARI-21532. Namenode restart - PID file delete happens before the call to check status (dlysnichenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d9d58fda Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d9d58fda Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d9d58fda Branch: refs/heads/branch-feature-AMBARI-21450 Commit: d9d58fda7b9942b89dc611486595509ad8df664d Parents: 5e498c6 Author: Lisnichenko Dmitro <dlysniche...@hortonworks.com> Authored: Mon Aug 14 16:28:12 2017 +0300 Committer: Lisnichenko Dmitro <dlysniche...@hortonworks.com> Committed: Mon Aug 14 16:28:12 2017 +0300 ---------------------------------------------------------------------- .../libraries/functions/check_process_status.py | 20 ++++++++++++++++++++ .../libraries/script/script.py | 4 ++-- .../HDFS/2.1.0.2.0/package/scripts/utils.py | 1 + .../0.8/services/HDFS/package/scripts/utils.py | 3 +++ .../4.0/services/HDFS/package/scripts/utils.py | 2 ++ .../4.2/services/HDFS/package/scripts/utils.py | 2 ++ 6 files changed, 30 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/d9d58fda/ambari-common/src/main/python/resource_management/libraries/functions/check_process_status.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/check_process_status.py b/ambari-common/src/main/python/resource_management/libraries/functions/check_process_status.py index 7961f00..ac54bc9 100644 --- a/ambari-common/src/main/python/resource_management/libraries/functions/check_process_status.py +++ b/ambari-common/src/main/python/resource_management/libraries/functions/check_process_status.py @@ -59,3 +59,23 @@ def check_process_status(pid_file): Logger.info("Process with pid {0} is not running. Stale pid file" " at {1}".format(pid, pid_file)) raise ComponentIsNotRunning() + + +def wait_process_stopped(pid_file): + """ + Waits until component is actually stopped (check is performed using + check_process_status() method. + """ + import time + component_is_stopped = False + counter = 0 + while not component_is_stopped: + try: + if counter % 10 == 0: + Logger.logger.info("Waiting for actual component stop") + check_process_status(pid_file) + time.sleep(1) + counter += 1 + except ComponentIsNotRunning, e: + Logger.logger.debug(" reports ComponentIsNotRunning") + component_is_stopped = True http://git-wip-us.apache.org/repos/asf/ambari/blob/d9d58fda/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 abbada4..54a7e6d 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 @@ -387,7 +387,7 @@ class Script(object): status_method = getattr(self, 'status') component_is_stopped = False counter = 0 - while not component_is_stopped : + while not component_is_stopped: try: if counter % 100 == 0: Logger.logger.info("Waiting for actual component stop") @@ -1019,4 +1019,4 @@ class Script(object): def __init__(self): if Script.instance is not None: - raise Fail("An instantiation already exists! Use, get_instance() method.") \ No newline at end of file + raise Fail("An instantiation already exists! Use, get_instance() method.") http://git-wip-us.apache.org/repos/asf/ambari/blob/d9d58fda/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py index e2d60a0..f178d23 100644 --- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py +++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py @@ -25,6 +25,7 @@ import ambari_simplejson as json # simplejson is much faster comparing to Python from resource_management.core.resources.system import Directory, File, Execute from resource_management.libraries.functions.format import format from resource_management.libraries.functions import check_process_status +from resource_management.libraries.functions.check_process_status import wait_process_stopped from resource_management.libraries.functions import StackFeature from resource_management.libraries.functions.stack_features import check_stack_feature from resource_management.core import shell http://git-wip-us.apache.org/repos/asf/ambari/blob/d9d58fda/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/utils.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/utils.py b/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/utils.py index 7dcbca8..b9f5242 100644 --- a/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/utils.py +++ b/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/utils.py @@ -21,6 +21,7 @@ import os from resource_management import * import re +from resource_management.libraries.functions.check_process_status import wait_process_stopped def service(action=None, name=None, user=None, create_pid_dir=False, create_log_dir=False): @@ -123,6 +124,8 @@ def service(action=None, name=None, user=None, create_pid_dir=False, not_if=service_is_up ) if action == "stop": + wait_process_stopped(pid_file) + File(pid_file, action="delete", ) http://git-wip-us.apache.org/repos/asf/ambari/blob/d9d58fda/ambari-server/src/main/resources/stacks/BigInsights/4.0/services/HDFS/package/scripts/utils.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/BigInsights/4.0/services/HDFS/package/scripts/utils.py b/ambari-server/src/main/resources/stacks/BigInsights/4.0/services/HDFS/package/scripts/utils.py index 5cd1735..4eaa676 100755 --- a/ambari-server/src/main/resources/stacks/BigInsights/4.0/services/HDFS/package/scripts/utils.py +++ b/ambari-server/src/main/resources/stacks/BigInsights/4.0/services/HDFS/package/scripts/utils.py @@ -26,6 +26,7 @@ from resource_management.libraries.functions.format import format from resource_management.core.shell import call, checked_call from resource_management.core.exceptions import ComponentIsNotRunning from resource_management.libraries.functions.curl_krb_request import curl_krb_request +from resource_management.libraries.functions.check_process_status import wait_process_stopped from zkfc_slave import ZkfcSlave @@ -251,6 +252,7 @@ def service(action=None, name=None, user=None, options="", create_pid_dir=False, ) if action == "stop": + wait_process_stopped(pid_file) File(pid_file, action="delete", ) http://git-wip-us.apache.org/repos/asf/ambari/blob/d9d58fda/ambari-server/src/main/resources/stacks/BigInsights/4.2/services/HDFS/package/scripts/utils.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/BigInsights/4.2/services/HDFS/package/scripts/utils.py b/ambari-server/src/main/resources/stacks/BigInsights/4.2/services/HDFS/package/scripts/utils.py index 4f5124b..e9a299a 100755 --- a/ambari-server/src/main/resources/stacks/BigInsights/4.2/services/HDFS/package/scripts/utils.py +++ b/ambari-server/src/main/resources/stacks/BigInsights/4.2/services/HDFS/package/scripts/utils.py @@ -22,6 +22,7 @@ import urllib2 import ambari_simplejson as json # simplejson is much faster comparing to Python 2.6 json module and has the same functions set. from resource_management.core.resources.system import Directory, File, Execute +from resource_management.libraries.functions.check_process_status import wait_process_stopped from resource_management.libraries.functions.format import format from resource_management.libraries.functions import check_process_status from resource_management.libraries.functions.version import compare_versions @@ -280,6 +281,7 @@ def service(action=None, name=None, user=None, options="", create_pid_dir=False, elif action == "stop": Execute(daemon_cmd, only_if=process_id_exists_command, environment=hadoop_env_exports) + wait_process_stopped(pid_file) File(pid_file, action="delete")