Catch ECHILD from os.waitpid()
authorPeter Amstutz <peter.amstutz@curoverse.com>
Mon, 13 Oct 2014 16:46:15 +0000 (12:46 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Mon, 13 Oct 2014 16:46:15 +0000 (12:46 -0400)
crunch_scripts/run-command
sdk/python/arvados/commands/run.py

index 34419b4de42fb7d908f9a4726fb301a4d3439af9..edc0f5931e87c938aaddf323d5898fe4df10efa8 100755 (executable)
@@ -28,6 +28,7 @@ import crunchutil.vwd as vwd
 import argparse
 import json
 import tempfile
+import errno
 
 parser = argparse.ArgumentParser()
 parser.add_argument('--dry-run', action='store_true')
@@ -309,7 +310,14 @@ try:
 
     active = 1
     while active > 0:
-        os.waitpid(0, 0)
+        try:
+            os.waitpid(0, 0)
+        except OSError as e:
+            if e.errno == errno.ECHILD:
+                # child already exited
+                pass
+            else:
+                raise
         active = sum([1 if s.poll() is None else 0 for s in subprocesses])
 
     # wait for process to complete.
index e27b3df79cc76ada63921495a23db2ab817e6a3e..9df0a84d828774a38c81ffb7cec262321257f51e 100644 (file)
@@ -7,12 +7,15 @@ import re
 import os
 import stat
 import put
-import arvados.events
 import time
+#import arvados.command.ws as ws
+import subprocess
 
 arvrun_parser = argparse.ArgumentParser()
 arvrun_parser.add_argument('--dry-run', action="store_true")
+arvrun_parser.add_argument('--local', action="store_true")
 arvrun_parser.add_argument('--docker-image', type=str, default="arvados/jobs")
+arvrun_parser.add_argument('--git-dir', type=str, default="")
 arvrun_parser.add_argument('command')
 arvrun_parser.add_argument('args', nargs=argparse.REMAINDER)
 
@@ -116,7 +119,7 @@ def main(arguments=None):
 
     component = {
         "script": "run-command",
-        "script_version": "bf243e064a7a2ee4e69a87dc3ba46e949a545150",
+        "script_version": "4f4ad25bf60751a09e316dca8c29cf3628ad7bdc",
         "repository": "arvados",
         "script_parameters": {
             "command": [args.command]+commandargs
@@ -141,21 +144,12 @@ def main(arguments=None):
 
     if args.dry_run:
         print(json.dumps(pipeline, indent=4))
+    elif args.local:
+        subprocess.call(["arv-crunch-job", "--job", json.dumps(component), "--git-dir", args.git_dir])
     else:
         api = arvados.api('v1')
         pi = api.pipeline_instances().create(body=pipeline).execute()
-        ws = None
-        def report(x):
-            if "event_type" in x:
-                print "\n"
-                print x
-                if x["event_type"] == "stderr":
-                    print x["properties"]["text"]
-                elif x["event_type"] == "update" and x["properties"]["new_attributes"]["state"] in ["Complete", "Failed"]:
-                    ws.close_connection()
-
-        ws =  arvados.events.subscribe(api, [["object_uuid", "=", pi["uuid"]], ["event_type", "in", ["stderr", "update"]]], report)
-        ws.run_forever()
+        #ws.main(["--pipeline", pi["uuid"]])
 
 if __name__ == '__main__':
     main()