X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/1c40d138c5de3ed5e27437edc5cbb6b84da29fc3..cc095ef1f8c86b05a8e58f15c4086a2caa861ec5:/sdk/cwl/arvados_cwl/arvcontainer.py diff --git a/sdk/cwl/arvados_cwl/arvcontainer.py b/sdk/cwl/arvados_cwl/arvcontainer.py index 57ab7367a3..3703fc6217 100644 --- a/sdk/cwl/arvados_cwl/arvcontainer.py +++ b/sdk/cwl/arvados_cwl/arvcontainer.py @@ -17,7 +17,7 @@ import uuid import math import arvados_cwl.util -import ruamel.yaml as yaml +import ruamel.yaml from cwltool.errors import WorkflowException from cwltool.process import UnsupportedRequirement, shortname @@ -250,11 +250,7 @@ class ArvadosContainer(JobBase): container_request["container_image"] = arv_docker_get_image(self.arvrunner.api, docker_req, runtimeContext.pull_image, - runtimeContext.project_uuid, - runtimeContext.force_docker_pull, - runtimeContext.tmp_outdir_prefix, - runtimeContext.match_local_docker, - runtimeContext.copy_deps) + runtimeContext) network_req, _ = self.get_requirement("NetworkAccess") if network_req: @@ -264,10 +260,22 @@ class ArvadosContainer(JobBase): if api_req: runtime_constraints["API"] = True + use_disk_cache = (self.arvrunner.api.config()["Containers"].get("DefaultKeepCacheRAM", 0) == 0) + + keep_cache_type_req, _ = self.get_requirement("http://arvados.org/cwl#KeepCacheTypeRequirement") + if keep_cache_type_req: + if "keepCacheType" in keep_cache_type_req: + if keep_cache_type_req["keepCacheType"] == "ram_cache": + use_disk_cache = False + runtime_req, _ = self.get_requirement("http://arvados.org/cwl#RuntimeConstraints") if runtime_req: if "keep_cache" in runtime_req: - runtime_constraints["keep_cache_ram"] = math.ceil(runtime_req["keep_cache"] * 2**20) + if use_disk_cache: + # If DefaultKeepCacheRAM is zero it means we should use disk cache. + runtime_constraints["keep_cache_disk"] = math.ceil(runtime_req["keep_cache"] * 2**20) + else: + runtime_constraints["keep_cache_ram"] = math.ceil(runtime_req["keep_cache"] * 2**20) if "outputDirType" in runtime_req: if runtime_req["outputDirType"] == "local_output_dir": # Currently the default behavior. @@ -524,20 +532,23 @@ class RunnerContainer(Runner): "portable_data_hash": "%s" % workflowcollection } elif self.embedded_tool.tool.get("id", "").startswith("arvwf:"): - workflowpath = "/var/lib/cwl/workflow.json#main" - record = self.arvrunner.api.workflows().get(uuid=self.embedded_tool.tool["id"][6:33]).execute(num_retries=self.arvrunner.num_retries) - packed = yaml.safe_load(record["definition"]) + uuid, frg = urllib.parse.urldefrag(self.embedded_tool.tool["id"]) + workflowpath = "/var/lib/cwl/workflow.json#" + frg + packedtxt = self.loadingContext.loader.fetch_text(uuid) + yaml = ruamel.yaml.YAML(typ='safe', pure=True) + packed = yaml.load(packedtxt) container_req["mounts"]["/var/lib/cwl/workflow.json"] = { "kind": "json", "content": packed } container_req["properties"]["template_uuid"] = self.embedded_tool.tool["id"][6:33] else: - packed = packed_workflow(self.arvrunner, self.embedded_tool, self.merged_map, runtimeContext, git_info) + main = self.loadingContext.loader.idx["_:main"] + #print(json.dumps(main, indent=2)) workflowpath = "/var/lib/cwl/workflow.json#main" container_req["mounts"]["/var/lib/cwl/workflow.json"] = { "kind": "json", - "content": packed + "content": main } container_req["properties"].update({k.replace("http://arvados.org/cwl#", "arv:"): v for k, v in git_info.items()}) @@ -604,6 +615,15 @@ class RunnerContainer(Runner): if runtimeContext.enable_preemptible is False: command.append("--disable-preemptible") + if runtimeContext.varying_url_params: + command.append("--varying-url-params="+runtimeContext.varying_url_params) + + if runtimeContext.prefer_cached_downloads: + command.append("--prefer-cached-downloads") + + if self.fast_parser: + command.append("--fast-parser") + command.extend([workflowpath, "/var/lib/cwl/cwl.input.json"]) container_req["command"] = command