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 08:53:44 UTC

incubator-ariatosca git commit: removed shell=True

Repository: incubator-ariatosca
Updated Branches:
  refs/heads/ARIA-285-Cancel-execution-may-leave-running-processes 3d5efc43f -> 037106396


removed shell=True


Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/03710639
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/03710639
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/03710639

Branch: refs/heads/ARIA-285-Cancel-execution-may-leave-running-processes
Commit: 03710639644503642badc9ec570c9926477b70c1
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 11:53:40 2017 +0300

----------------------------------------------------------------------
 aria/orchestrator/workflows/executor/process.py | 20 +++++++++-----------
 .../workflows/executor/test_process_executor.py | 12 +++++-------
 2 files changed, 14 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/03710639/aria/orchestrator/workflows/executor/process.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/executor/process.py b/aria/orchestrator/workflows/executor/process.py
index 92c83e3..40c0f32 100644
--- a/aria/orchestrator/workflows/executor/process.py
+++ b/aria/orchestrator/workflows/executor/process.py
@@ -125,14 +125,10 @@ 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)
-
+        if task:
+            os.kill(task.proc.pid, signal.SIGINT)
             time.sleep(self._termination_timeout)
-            os.killpg(os.getpgid(task.proc.pid), signal.SIGTERM)
+            os.kill(task.proc.pid, signal.SIGKILL)
 
     def _execute(self, ctx):
         self._check_closed()
@@ -146,10 +142,12 @@ 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),
-            env=env,
-            preexec_fn=os.setsid,
-            shell=True)
+            [
+                sys.executable,
+                os.path.expanduser(os.path.expandvars(__file__)),
+                os.path.expanduser(os.path.expandvars(arguments_json_path))
+            ],
+            env=env)
 
         self._tasks[ctx.task.id] = _Task(ctx=ctx, proc=proc)
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/03710639/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..f58af88 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor.py
@@ -90,15 +90,13 @@ class TestProcessExecutor(object):
 
         executor.execute(ctx)
 
-        while fs_test_holder.get('subproc', None) is None:
+        while fs_test_holder.get('started', False) is False:
             time.sleep(1)
-        pids = [executor._tasks[ctx.task.id].proc.pid, fs_test_holder['subproc']]
-        assert any(p.pid == pid for p in psutil.process_iter() for pid in pids)
+        pid = executor._tasks[ctx.task.id].proc.pid
+        assert any(p.pid == pid for p in psutil.process_iter())
         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)
+                       for p in psutil.process_iter())
 
 
 @pytest.fixture
@@ -136,6 +134,6 @@ def model(tmpdir):
 @operation
 def freezing_task(holder_path, **_):
     holder = FilesystemDataHolder(holder_path)
-    holder['subproc'] = subprocess.Popen('while true; do sleep 5; done', shell=True).pid
+    holder['started'] = True
     while True:
         time.sleep(5)