You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ariatosca.apache.org by mx...@apache.org on 2017/06/27 09:49:56 UTC
incubator-ariatosca git commit: fixed test waitinge [Forced Update!]
Repository: incubator-ariatosca
Updated Branches:
refs/heads/ARIA-285-Cancel-execution-may-leave-running-processes de0b05d39 -> 1f770c22b (forced update)
fixed test waitinge
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/1f770c22
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/1f770c22
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/1f770c22
Branch: refs/heads/ARIA-285-Cancel-execution-may-leave-running-processes
Commit: 1f770c22bfcbc173131818888712e31f03d9f60f
Parents: 3d5efc4
Author: max-orlov <ma...@gigaspaces.com>
Authored: Tue Jun 27 11:53:40 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Tue Jun 27 12:49:42 2017 +0300
----------------------------------------------------------------------
aria/orchestrator/workflows/executor/process.py | 19 ++++++++-----------
.../workflows/executor/test_process_executor.py | 10 ++++++----
2 files changed, 14 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1f770c22/aria/orchestrator/workflows/executor/process.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/executor/process.py b/aria/orchestrator/workflows/executor/process.py
index 92c83e3..389373b 100644
--- a/aria/orchestrator/workflows/executor/process.py
+++ b/aria/orchestrator/workflows/executor/process.py
@@ -125,14 +125,8 @@ class ProcessExecutor(base.BaseExecutor):
def terminate(self, task_id):
task = self._tasks.get(task_id)
# The process might have managed to finished so it would not be in the tasks list
- if task and os.getsid(os.getpid()) != os.getpgid(task.proc.pid):
- # If the above condition is false, the process group leader is the group leader
- # for the current session of the system, and killing it will kill the the entire
- # os session.
- os.killpg(os.getpgid(task.proc.pid), signal.SIGINT)
-
- time.sleep(self._termination_timeout)
- os.killpg(os.getpgid(task.proc.pid), signal.SIGTERM)
+ if task:
+ os.killpg(os.getpgid(task.proc.pid), signal.SIGKILL)
def _execute(self, ctx):
self._check_closed()
@@ -146,10 +140,13 @@ class ProcessExecutor(base.BaseExecutor):
env = self._construct_subprocess_env(task=ctx.task)
# Asynchronously start the operation in a subprocess
proc = subprocess.Popen(
- '{0} {1} {2}'.format(sys.executable, __file__, arguments_json_path),
+ [
+ sys.executable,
+ os.path.expanduser(os.path.expandvars(__file__)),
+ os.path.expanduser(os.path.expandvars(arguments_json_path))
+ ],
env=env,
- preexec_fn=os.setsid,
- shell=True)
+ preexec_fn=os.setsid)
self._tasks[ctx.task.id] = _Task(ctx=ctx, proc=proc)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/1f770c22/tests/orchestrator/workflows/executor/test_process_executor.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_process_executor.py b/tests/orchestrator/workflows/executor/test_process_executor.py
index be3e833..01aff17 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor.py
@@ -90,12 +90,13 @@ class TestProcessExecutor(object):
executor.execute(ctx)
- while fs_test_holder.get('subproc', None) is None:
- time.sleep(1)
- pids = [executor._tasks[ctx.task.id].proc.pid, fs_test_holder['subproc']]
+ @retrying.retry(retry_on_result=lambda r: r is False, stop_max_delay=10000, wait_fixed=500)
+ def wait_for_extra_process_id():
+ return fs_test_holder.get('subproc', False)
+
+ pids = [executor._tasks[ctx.task.id].proc.pid, wait_for_extra_process_id()]
assert any(p.pid == pid for p in psutil.process_iter() for pid in pids)
executor.terminate(ctx.task.id)
- time.sleep(10)
assert not any(p.pid == pid and p.status() != psutil.STATUS_ZOMBIE
for p in psutil.process_iter()
for pid in pids)
@@ -135,6 +136,7 @@ def model(tmpdir):
@operation
def freezing_task(holder_path, **_):
+ import pydevd; pydevd.settrace('localhost', suspend=False)
holder = FilesystemDataHolder(holder_path)
holder['subproc'] = subprocess.Popen('while true; do sleep 5; done', shell=True).pid
while True: