X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/e3987b71873a1173cfcf202da45b5b39440030d5..4ad88f00a73da6b4cbe11e2bde8d7a055ba6b60e:/sdk/cwl/arvados_cwl/arvcontainer.py diff --git a/sdk/cwl/arvados_cwl/arvcontainer.py b/sdk/cwl/arvados_cwl/arvcontainer.py index e8e2a51131..9f8382291c 100644 --- a/sdk/cwl/arvados_cwl/arvcontainer.py +++ b/sdk/cwl/arvados_cwl/arvcontainer.py @@ -47,7 +47,7 @@ class ArvadosContainer(object): "name": self.name, "output_path": self.outdir, "cwd": self.outdir, - "priority": 1, + "priority": kwargs.get("priority"), "state": "Committed", "properties": {}, } @@ -105,17 +105,32 @@ class ArvadosContainer(object): generatemapper = NoFollowPathMapper([self.generatefiles], "", "", separateDirs=False) + logger.debug("generatemapper is %s", generatemapper._pathmap) + with Perf(metrics, "createfiles %s" % self.name): for f, p in generatemapper.items(): if not p.target: pass - elif p.type in ("File", "Directory"): - source, path = self.arvrunner.fs_access.get_collection(p.resolved) - vwd.copy(path, p.target, source_collection=source) + elif p.type in ("File", "Directory", "WritableFile", "WritableDirectory"): + if p.resolved.startswith("_:"): + vwd.mkdirs(p.target) + else: + source, path = self.arvrunner.fs_access.get_collection(p.resolved) + vwd.copy(path, p.target, source_collection=source) elif p.type == "CreateFile": with vwd.open(p.target, "w") as n: n.write(p.resolved.encode("utf-8")) + def keepemptydirs(p): + if isinstance(p, arvados.collection.RichCollectionBase): + if len(p) == 0: + p.open(".keep", "w").close() + else: + for c in p: + keepemptydirs(p[c]) + + keepemptydirs(vwd) + with Perf(metrics, "generatefiles.save_new %s" % self.name): vwd.save_new() @@ -126,6 +141,8 @@ class ArvadosContainer(object): mounts[mountpoint] = {"kind": "collection", "portable_data_hash": vwd.portable_data_hash(), "path": p.target} + if p.type.startswith("Writable"): + mounts[mountpoint]["writable"] = True container_request["environment"] = {"TMPDIR": self.tmpdir, "HOME": self.outdir} if self.environment: @@ -294,7 +311,7 @@ class RunnerContainer(Runner): "name": self.name, "output_path": "/var/spool/cwl", "cwd": "/var/spool/cwl", - "priority": 1, + "priority": self.priority, "state": "Committed", "container_image": arvados_jobs_image(self.arvrunner, self.jobs_image), "mounts": { @@ -330,7 +347,7 @@ class RunnerContainer(Runner): "portable_data_hash": "%s" % workflowcollection } else: - packed = packed_workflow(self.arvrunner, self.tool) + packed = packed_workflow(self.arvrunner, self.tool, self.merged_map) workflowpath = "/var/lib/cwl/workflow.json#main" container_req["mounts"]["/var/lib/cwl/workflow.json"] = { "kind": "json", @@ -339,6 +356,7 @@ class RunnerContainer(Runner): if self.tool.tool.get("id", "").startswith("arvwf:"): container_req["properties"]["template_uuid"] = self.tool.tool["id"][6:33] + command = ["arvados-cwl-runner", "--local", "--api=containers", "--no-log-timestamps"] if self.output_name: command.append("--output-name=" + self.output_name) @@ -367,6 +385,8 @@ class RunnerContainer(Runner): if self.arvrunner.project_uuid: command.append("--project-uuid="+self.arvrunner.project_uuid) + command.append("--eval-timeout=%s" % self.arvrunner.eval_timeout) + command.extend([workflowpath, "/var/lib/cwl/cwl.input.json"]) container_req["command"] = command