10293: Override workflow runner done() to get container from container request.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 30 Nov 2016 20:52:38 +0000 (15:52 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 30 Nov 2016 21:42:20 +0000 (16:42 -0500)
sdk/cwl/arvados_cwl/arvcontainer.py
sdk/cwl/arvados_cwl/runner.py

index 9da5fcbdebe3468b1c3bab19542eeaa9286dc11b..0c65df4558e9386b682289ecd3c858c6fce54cc7 100644 (file)
@@ -247,3 +247,17 @@ class RunnerContainer(Runner):
 
         if response["state"] == "Final":
             self.done(response)
+
+    def done(self, record):
+        try:
+            container = self.arvrunner.api.containers().get(
+                uuid=record["container_uuid"]
+            ).execute(num_retries=self.arvrunner.num_retries)
+        except Exception as e:
+            logger.exception("While getting runner container: %s", e)
+            self.arvrunner.output_callback({}, "permanentFail")
+            del self.arvrunner.processes[record["uuid"]]
+        else:
+            super(RunnerContainer, self).done(container)
+        finally:
+            del self.arvrunner.processes[record["uuid"]]
index 3bbcb8b091763cd565051c23a65ce13d1069f08f..6b5cd71b167a1346e18f1bbecdb1a9e55651e326 100644 (file)
@@ -215,4 +215,5 @@ class Runner(object):
                 logger.exception("While getting final output object: %s", e)
             self.arvrunner.output_callback(outputs, processStatus)
         finally:
-            del self.arvrunner.processes[record["uuid"]]
+            if record["uuid"] in self.arvrunner.processes:
+                del self.arvrunner.processes[record["uuid"]]