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',

Reply via email to