Repository: ambari
Updated Branches:
  refs/heads/trunk 094245f31 -> 9ad9dcc25


AMBARI-11914 Enable NameNode HA fails while stopping RegionServer (dsen)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9ad9dcc2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9ad9dcc2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9ad9dcc2

Branch: refs/heads/trunk
Commit: 9ad9dcc25cf26a269637db8d3ffc26be205bc5eb
Parents: 094245f
Author: Dmytro Sen <d...@apache.org>
Authored: Sun Jun 14 20:31:49 2015 +0300
Committer: Dmytro Sen <d...@apache.org>
Committed: Sun Jun 14 20:31:49 2015 +0300

----------------------------------------------------------------------
 .../python/resource_management/core/shell.py    | 34 ++++++++++----------
 1 file changed, 17 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/9ad9dcc2/ambari-common/src/main/python/resource_management/core/shell.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/shell.py 
b/ambari-common/src/main/python/resource_management/core/shell.py
index 1ea27f8..75b5fcf 100644
--- a/ambari-common/src/main/python/resource_management/core/shell.py
+++ b/ambari-common/src/main/python/resource_management/core/shell.py
@@ -142,7 +142,7 @@ def _call_wrapper(command, **kwargs):
       except ExecuteTimeoutException as ex:     
         if on_timeout:
           Logger.info("Executing '%s'. Reason: %s" % (on_timeout, str(ex)))
-          checked_call(on_timeout)
+          result = checked_call(on_timeout)
         else:
           raise
     except Fail as ex:
@@ -212,9 +212,9 @@ def _call(command, logoutput=None, throw_on_failure=True, 
stdout=subprocess.PIPE
                             preexec_fn=preexec_fn)
     
     if timeout:
-      timeout_event = threading.Event()
-      t = threading.Timer( timeout, _on_timeout, [proc, timeout_event] )
-      t.start()
+      timeout_happened=False
+      start = time.time()
+      end = start+timeout
       
     if not wait_for_finish:
       return proc
@@ -235,6 +235,10 @@ def _call(command, logoutput=None, throw_on_failure=True, 
stdout=subprocess.PIPE
     all_output = ""
                   
     while read_set:
+      if timeout and time.time()> end:
+        timeout_happened=True
+        proc.kill()
+        break
       ready, _, _ = select.select(read_set, [], [])
       for out_fd in read_set:
         if out_fd in ready:
@@ -258,7 +262,14 @@ def _call(command, logoutput=None, throw_on_failure=True, 
stdout=subprocess.PIPE
           if logoutput:
             _print(line)    
   
-    proc.wait()
+    # Wait for process to terminate
+    while proc.poll() == None:
+      if timeout and time.time()> end:
+        timeout_happened=True
+        proc.kill()
+        break
+      time.sleep(1)
+
   finally:
     for fp in files_to_close:
       fp.close()
@@ -268,10 +279,7 @@ def _call(command, logoutput=None, throw_on_failure=True, 
stdout=subprocess.PIPE
   all_output = all_output.strip('\n')
   
   if timeout: 
-    if not timeout_event.is_set():
-      t.cancel()
-    # timeout occurred
-    else:
+    if timeout_happened:
       err_msg = ("Execution of '%s' was killed due timeout after %d seconds") 
% (command, timeout)
       raise ExecuteTimeoutException(err_msg)
    
@@ -350,14 +358,6 @@ def string_cmd_from_args_list(command, auto_escape=True):
   escape_func = lambda x:quote_bash_args(x) if auto_escape else lambda x:x
   return ' '.join(escape_func(x) for x in command)
 
-def _on_timeout(proc, timeout_event):
-  timeout_event.set()
-  if proc.poll() == None:
-    try:
-      proc.terminate()
-    except:
-      pass
-    
 def _print(line):
   sys.stdout.write(line)
   sys.stdout.flush()
\ No newline at end of file

Reply via email to