You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by go...@apache.org on 2016/03/16 21:58:29 UTC
[38/50] incubator-slider git commit: SLIDER-1009 Slider stop command doesn’t invoke stop function inside an app package (Jaeboo Jeong via gourksaha)
SLIDER-1009 Slider stop command doesn’t invoke stop function inside an app package (Jaeboo Jeong via gourksaha)
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/51f9ab1c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/51f9ab1c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/51f9ab1c
Branch: refs/heads/feature/SLIDER-906_docker_support
Commit: 51f9ab1c0b25b260167e7a41fc4d6026817c92a3
Parents: 8ae7cd1
Author: Gour Saha <go...@apache.org>
Authored: Wed Feb 10 12:16:15 2016 -0800
Committer: Gour Saha <go...@apache.org>
Committed: Wed Feb 10 12:16:15 2016 -0800
----------------------------------------------------------------------
.../src/main/python/agent/PythonExecutor.py | 28 +++++++++++++++++---
slider-agent/src/main/python/agent/main.py | 12 +++++++++
2 files changed, 36 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51f9ab1c/slider-agent/src/main/python/agent/PythonExecutor.py
----------------------------------------------------------------------
diff --git a/slider-agent/src/main/python/agent/PythonExecutor.py b/slider-agent/src/main/python/agent/PythonExecutor.py
index ac0327d..83fc291 100644
--- a/slider-agent/src/main/python/agent/PythonExecutor.py
+++ b/slider-agent/src/main/python/agent/PythonExecutor.py
@@ -92,7 +92,11 @@ class PythonExecutor:
thread = Thread(target=self.python_watchdog_func, args=(process, timeout))
thread.start()
# Waiting for the process to be either finished or killed
- process.communicate()
+ if self._is_stop_command(pythonCommand):
+ out, err = process.communicate()
+ logger.info("stop command output: " + str(out) + " err: " + str(err))
+ else:
+ process.communicate()
self.event.set()
thread.join()
# Building results
@@ -120,6 +124,13 @@ class PythonExecutor:
self.agentToggleLogger.log("Result: %s" % result)
return result
+ def _is_stop_command(self, command):
+ for cmd in command:
+ if cmd == "STOP":
+ return True
+
+ return False
+
def launch_python_subprocess(self, command, tmpout, tmperr,
environment_vars=None):
@@ -133,9 +144,18 @@ class PythonExecutor:
for k, v in environment_vars:
self.agentToggleLogger.log("Setting env: %s to %s", k, v)
env[k] = v
- return subprocess.Popen(command,
- stdout=tmpout,
- stderr=tmperr, close_fds=close_fds, env=env)
+ if self._is_stop_command(command):
+ command_str = ''
+ for itr in command:
+ command_str = command_str + ' ' + itr
+
+ logger.info("command str: " + command_str)
+ return subprocess.Popen(command_str, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell=True)
+
+ else:
+ return subprocess.Popen(command,
+ stdout=tmpout,
+ stderr=tmperr, close_fds=close_fds, env=env)
def isSuccessfull(self, returncode):
return not self.python_process_has_been_killed and returncode == 0
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51f9ab1c/slider-agent/src/main/python/agent/main.py
----------------------------------------------------------------------
diff --git a/slider-agent/src/main/python/agent/main.py b/slider-agent/src/main/python/agent/main.py
index 68f46b7..36aa4f4 100644
--- a/slider-agent/src/main/python/agent/main.py
+++ b/slider-agent/src/main/python/agent/main.py
@@ -59,8 +59,20 @@ def signal_handler(signum, frame):
docker_mode = controller.actionQueue.docker_mode
if docker_mode:
tmpdir = controller.actionQueue.dockerManager.stop_container()
+
+ if controller is not None and hasattr(controller, 'stopCommand'):
+ controller.stopCommand = _increment_task_id(controller.stopCommand)
+ controller.appGracefulStopQueued = True
+ controller.actionQueue.execute_command(controller.stopCommand)
+
ProcessHelper.stopAgent()
+def _increment_task_id(stored_command):
+ taskId = int(stored_command['taskId'])
+ taskId = taskId + 1
+ stored_command['taskId'] = taskId
+ stored_command['commandId'] = "{0}-1".format(taskId)
+ return stored_command
def debug(sig, frame):
"""Interrupt running process, and provide a python prompt for