Repository: ambari Updated Branches: refs/heads/branch-2.2 18aa22966 -> 5edcf8a27
AMBARI-15744. Webhcat Server failed to stop while stopping all the services. (stoader) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5edcf8a2 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5edcf8a2 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5edcf8a2 Branch: refs/heads/branch-2.2 Commit: 5edcf8a275a7ec6f80a6d4456942103e3c8c006c Parents: 18aa229 Author: Toader, Sebastian <[email protected]> Authored: Thu Apr 7 11:56:52 2016 +0200 Committer: Toader, Sebastian <[email protected]> Committed: Thu Apr 7 11:56:52 2016 +0200 ---------------------------------------------------------------------- .../package/scripts/webhcat_service.py | 17 +++++-- .../stacks/2.0.6/HIVE/test_webhcat_server.py | 47 ++++++++++++++++++++ 2 files changed, 60 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/5edcf8a2/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_service.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_service.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_service.py index 2553c70..1d29097 100644 --- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_service.py +++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_service.py @@ -22,6 +22,7 @@ from resource_management import * from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl from ambari_commons import OSConst from resource_management.core.shell import as_user +from resource_management.core.logger import Logger @OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY) def webhcat_service(action='start', rolling_restart=False): @@ -51,10 +52,10 @@ def webhcat_service(action='start', upgrade_type=None): not_if=no_op_test, environment = environ) elif action == 'stop': - daemon_cmd = format('{cmd} stop') - Execute(daemon_cmd, - user = params.webhcat_user, - environment = environ) + try: + graceful_stop(cmd, environ) + except: + Logger.warning("Stopping WebHCat failed !") pid_expression = "`" + as_user(format("cat {webhcat_pid_file}"), user=params.webhcat_user) + "`" process_id_exists_command = format("ls {webhcat_pid_file} >/dev/null 2>&1 && ps -p {pid_expression} >/dev/null 2>&1") @@ -73,3 +74,11 @@ def webhcat_service(action='start', upgrade_type=None): File(params.webhcat_pid_file, action="delete", ) + +def graceful_stop(cmd, environ): + import params + daemon_cmd = format('{cmd} stop') + + Execute(daemon_cmd, + user = params.webhcat_user, + environment = environ) http://git-wip-us.apache.org/repos/asf/ambari/blob/5edcf8a2/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_webhcat_server.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_webhcat_server.py b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_webhcat_server.py index 5d005e0..ea91a62 100644 --- a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_webhcat_server.py +++ b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_webhcat_server.py @@ -95,6 +95,30 @@ class TestWebHCatServer(RMFTestCase): self.assert_configure_secured() self.assertNoMoreResources() + @patch("webhcat_service.graceful_stop", new = MagicMock(side_effect=Exception)) + def test_stop_graceful_stop_failed(self): + self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/webhcat_server.py", + classname = "WebHCatServer", + command = "stop", + config_file="default.json", + hdp_stack_version = self.STACK_VERSION, + target = RMFTestCase.TARGET_COMMON_SERVICES + ) + + self.assertResourceCalled('Execute', 'ambari-sudo.sh kill -9 `ambari-sudo.sh su hcat -l -s /bin/bash -c \'[RMF_EXPORT_PLACEHOLDER]cat /var/run/webhcat/webhcat.pid\'`', + not_if = "! (ls /var/run/webhcat/webhcat.pid >/dev/null 2>&1 && ps -p `ambari-sudo.sh su hcat -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]cat /var/run/webhcat/webhcat.pid'` >/dev/null 2>&1) || ( sleep 10 && ! (ls /var/run/webhcat/webhcat.pid >/dev/null 2>&1 && ps -p `ambari-sudo.sh su hcat -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]cat /var/run/webhcat/webhcat.pid'` >/dev/null 2>&1) )" + ) + + self.assertResourceCalled('Execute', "! (ls /var/run/webhcat/webhcat.pid >/dev/null 2>&1 && ps -p `ambari-sudo.sh su hcat -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]cat /var/run/webhcat/webhcat.pid'` >/dev/null 2>&1)", + tries=20, + try_sleep=3, + ) + + self.assertResourceCalled('File', '/var/run/webhcat/webhcat.pid', + action = ['delete'], + ) + self.assertNoMoreResources() + def test_start_secured(self): self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/webhcat_server.py", classname = "WebHCatServer", @@ -139,6 +163,29 @@ class TestWebHCatServer(RMFTestCase): ) self.assertNoMoreResources() + @patch("webhcat_service.graceful_stop", new = MagicMock(side_effect=Exception)) + def test_stop_secured_graceful_stop_failed(self): + self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/webhcat_server.py", + classname = "WebHCatServer", + command = "stop", + config_file="secured.json", + hdp_stack_version = self.STACK_VERSION, + target = RMFTestCase.TARGET_COMMON_SERVICES + ) + + self.assertResourceCalled('Execute', 'ambari-sudo.sh kill -9 `ambari-sudo.sh su hcat -l -s /bin/bash -c \'[RMF_EXPORT_PLACEHOLDER]cat /var/run/webhcat/webhcat.pid\'`', + not_if = "! (ls /var/run/webhcat/webhcat.pid >/dev/null 2>&1 && ps -p `ambari-sudo.sh su hcat -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]cat /var/run/webhcat/webhcat.pid'` >/dev/null 2>&1) || ( sleep 10 && ! (ls /var/run/webhcat/webhcat.pid >/dev/null 2>&1 && ps -p `ambari-sudo.sh su hcat -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]cat /var/run/webhcat/webhcat.pid'` >/dev/null 2>&1) )" + ) + + self.assertResourceCalled('Execute', "! (ls /var/run/webhcat/webhcat.pid >/dev/null 2>&1 && ps -p `ambari-sudo.sh su hcat -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]cat /var/run/webhcat/webhcat.pid'` >/dev/null 2>&1)", + tries=20, + try_sleep=3, + ) + self.assertResourceCalled('File', '/var/run/webhcat/webhcat.pid', + action = ['delete'], + ) + self.assertNoMoreResources() + def assert_configure_default(self): self.assertResourceCalled('Directory', '/var/run/webhcat', owner = 'hcat',
