10383: Merge branch 'master' into 10383-arv-put-incremental-upload
[arvados.git] / sdk / cwl / arvados_cwl / arvcontainer.py
index c349839a5d56263f00c0c78bfe9da029f497e13d..08da4ca16efa1185aa40642817329b8b2f18d005 100644 (file)
@@ -62,7 +62,7 @@ class ArvadosContainer(object):
                 }
 
         if self.generatefiles["listing"]:
-            raise UnsupportedRequirement("Generate files not supported")
+            raise UnsupportedRequirement("InitialWorkDirRequirement not supported with --api=containers")
 
         container_request["environment"] = {"TMPDIR": self.tmpdir, "HOME": self.outdir}
         if self.environment:
@@ -148,12 +148,12 @@ class ArvadosContainer(object):
             outputs = {}
 
             if container["output"]:
-                outputs = done.done_outputs(self, container, "/tmp", self.outdir, "/keep")
-            try:
-                self.output_callback(outputs, processStatus)
-            except Exception as e:
-                logger.error("Got error %s" % str(e))
-                self.output_callback({}, "permanentFail")
+                try:
+                    outputs = done.done_outputs(self, container, "/tmp", self.outdir, "/keep")
+                except Exception as e:
+                    logger.error("Got error %s" % str(e))
+                    self.output_callback({}, "permanentFail")
+            self.output_callback(outputs, processStatus)
         finally:
             del self.arvrunner.processes[record["uuid"]]
 
@@ -226,7 +226,7 @@ class RunnerContainer(Runner):
             },
             "runtime_constraints": {
                 "vcpus": 1,
-                "ram": 1024*1024*256,
+                "ram": 1024*1024 * self.submit_runner_ram,
                 "API": True
             }
         }
@@ -241,9 +241,23 @@ class RunnerContainer(Runner):
         ).execute(num_retries=self.arvrunner.num_retries)
 
         self.uuid = response["uuid"]
-        self.arvrunner.processes[response["uuid"]] = response["uuid"]
+        self.arvrunner.processes[response["uuid"]] = self
 
         logger.info("Submitted container %s", response["uuid"])
 
         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"]]