Repository: ambari
Updated Branches:
  refs/heads/trunk 4acfcf20d -> 3508f08f9


AMBARI-10292. Log information on ports and processes on tasks failure (aonishuk)


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

Branch: refs/heads/trunk
Commit: 3508f08f9509ed17e6e650244b2d5934fb1bc2e8
Parents: 4acfcf2
Author: Andrew Onishuk <[email protected]>
Authored: Tue Mar 31 16:05:49 2015 +0300
Committer: Andrew Onishuk <[email protected]>
Committed: Tue Mar 31 16:06:50 2015 +0300

----------------------------------------------------------------------
 .../ambari_agent/CustomServiceOrchestrator.py   |  4 +++-
 .../main/python/ambari_agent/PythonExecutor.py  | 25 +++++++++++++++++---
 2 files changed, 25 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/3508f08f/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git 
a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py 
b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
index 9934d5f..925cfff 100644
--- a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
+++ b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
@@ -54,6 +54,7 @@ class CustomServiceOrchestrator():
   IPV4_ADDRESSES_KEY = "all_ipv4_ips"
 
   AMBARI_SERVER_HOST = "ambari_server_host"
+  DONT_DEBUG_FAILURES_FOR_COMMANDS = [COMMAND_NAME_SECURITY_STATUS, 
COMMAND_NAME_STATUS]
 
   def __init__(self, config, controller):
     self.config = config
@@ -172,11 +173,12 @@ class CustomServiceOrchestrator():
         raise AgentException("Background commands are supported without hooks 
only")
 
       for py_file, current_base_dir in filtered_py_file_list:
+        log_info_on_failure = not command_name in 
self.DONT_DEBUG_FAILURES_FOR_COMMANDS
         script_params = [command_name, json_path, current_base_dir]
         ret = self.python_executor.run_file(py_file, script_params,
                                self.exec_tmp_dir, tmpoutfile, tmperrfile, 
timeout,
                                tmpstrucoutfile, logger_level, 
self.map_task_to_process,
-                               task_id, override_output_files, handle = handle)
+                               task_id, override_output_files, handle = 
handle, log_info_on_failure=log_info_on_failure)
         # Next run_file() invocations should always append to current output
         override_output_files = False
         if ret['exitcode'] != 0:

http://git-wip-us.apache.org/repos/asf/ambari/blob/3508f08f/ambari-agent/src/main/python/ambari_agent/PythonExecutor.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/PythonExecutor.py 
b/ambari-agent/src/main/python/ambari_agent/PythonExecutor.py
index b165857..f215272 100644
--- a/ambari-agent/src/main/python/ambari_agent/PythonExecutor.py
+++ b/ambari-agent/src/main/python/ambari_agent/PythonExecutor.py
@@ -31,6 +31,7 @@ from ambari_commons.os_check import OSConst, OSCheck
 from Grep import Grep
 import sys
 from ambari_commons import shell
+from ambari_commons.shell import shellRunner
 
 
 logger = logging.getLogger()
@@ -63,7 +64,7 @@ class PythonExecutor:
 
   def run_file(self, script, script_params, tmp_dir, tmpoutfile, tmperrfile,
                timeout, tmpstructedoutfile, logger_level, callback, task_id,
-               override_output_files = True, handle = None):
+               override_output_files = True, handle = None, 
log_info_on_failure=True):
     """
     Executes the specified python file in a separate subprocess.
     Method returns only when the subprocess is finished.
@@ -93,14 +94,32 @@ class PythonExecutor:
       process.communicate()
       self.event.set()
       thread.join()
-      return self.prepare_process_result(process, tmpoutfile, tmperrfile, 
tmpstructedoutfile, timeout=timeout)
+      result = self.prepare_process_result(process, tmpoutfile, tmperrfile, 
tmpstructedoutfile, timeout=timeout)
+      
+      if log_info_on_failure and result['exitcode']:
+        self.on_failure(pythonCommand, result)
+      
+      return result
     else:
       holder = Holder(pythonCommand, tmpoutfile, tmperrfile, 
tmpstructedoutfile, handle)
 
       background = BackgroundThread(holder, self)
       background.start()
       return {"exitcode": 777}
-
+    
+  def on_failure(self, pythonCommand, result):
+    """
+    Log some useful information after task failure.
+    """
+    logger.info("Command " + pprint.pformat(pythonCommand) + " failed with 
exitcode=" + str(result['exitcode']))
+    cmd_list = ["ps faux", "netstat -tulpn"]
+    
+    shell_runner = shellRunner()
+    
+    for cmd in cmd_list:
+      ret = shell_runner.run(cmd)
+      logger.info("Command '{0}' returned {1}. {2}{3}".format(cmd, 
ret["exitCode"], ret["error"], ret["output"]))
+    
   def prepare_process_result(self, process, tmpoutfile, tmperrfile, 
tmpstructedoutfile, timeout=None):
     out, error, structured_out = self.read_result_from_files(tmpoutfile, 
tmperrfile, tmpstructedoutfile)
     # Building results

Reply via email to