Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

workDir and jobStore now default to (shared) tmp-outdir-prefix #5154

4 changes: 3 additions & 1 deletion docs/running/cliOptions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,9 @@ about the performance of jobs.
directory ``toil-<workflowID>`` within workDir. The
workflowID is generated by Toil and will be reported in
the workflow logs. Default is determined by the
variables (TMPDIR, TEMP, TMP) via mkdtemp. This
variables (TMPDIR, TEMP, TMP) via mkdtemp. For CWL,
the temporary output directory is used instead
(see CWL option ``--tmp-outdir-prefix``). This
directory needs to exist on all machines running jobs;
if capturing standard output and error from batch
system jobs is desired, it will generally need to be on
Expand Down
32 changes: 6 additions & 26 deletions src/toil/cwl/cwltoil.py
Original file line number Diff line number Diff line change
Expand Up @@ -3918,42 +3918,25 @@ def main(args: Optional[list[str]] = None, stdout: TextIO = sys.stdout) -> int:
tmpdir_prefix = options.tmpdir_prefix = (
options.tmpdir_prefix or DEFAULT_TMPDIR_PREFIX
)

# We need a workdir for the CWL runtime contexts.
if tmpdir_prefix != DEFAULT_TMPDIR_PREFIX:
# if tmpdir_prefix is not the default value, move
# workdir and the default job store under it
workdir = cwltool.utils.create_tmp_dir(tmpdir_prefix)
else:
# Use a directory in the default tmpdir
workdir = mkdtemp()
# Make sure workdir doesn't exist so it can be a job store
os.rmdir(workdir)
tmp_outdir_prefix = options.tmp_outdir_prefix or tmpdir_prefix
workdir = options.workDir or tmp_outdir_prefix

if options.jobStore is None:
jobstore = cwltool.utils.create_tmp_dir(tmp_outdir_prefix)
# Make sure directory doesn't exist so it can be a job store
os.rmdir(jobstore)
# Pick a default job store specifier appropriate to our choice of batch
# system and provisioner and installed modules, given this available
# local directory name. Fail if no good default can be used.
options.jobStore = generate_default_job_store(
options.batchSystem, options.provisioner, workdir
options.batchSystem, options.provisioner, jobstore
)

options.doc_cache = True
options.disable_js_validation = False
options.do_validate = True
options.pack = False
options.print_subgraph = False
if tmpdir_prefix != DEFAULT_TMPDIR_PREFIX and options.workDir is None:
# We need to override workDir because by default Toil will pick
# somewhere under the system temp directory if unset, ignoring
# --tmpdir-prefix.
#
# If set, workDir needs to exist, so we directly use the prefix
options.workDir = cwltool.utils.create_tmp_dir(tmpdir_prefix)
if tmpdir_prefix != DEFAULT_TMPDIR_PREFIX and options.coordination_dir is None:
# override coordination_dir as default Toil will pick somewhere else
# ignoring --tmpdir_prefix
options.coordination_dir = cwltool.utils.create_tmp_dir(tmpdir_prefix)

if options.batchSystem == "kubernetes":
# Containers under Kubernetes can only run in Singularity
Expand All @@ -3971,9 +3954,6 @@ def main(args: Optional[list[str]] = None, stdout: TextIO = sys.stdout) -> int:
logger.debug(f"Final job store {options.jobStore} and workDir {options.workDir}")

outdir = os.path.abspath(options.outdir or os.getcwd())
tmp_outdir_prefix = os.path.abspath(
options.tmp_outdir_prefix or DEFAULT_TMPDIR_PREFIX
)
conf_file = getattr(options, "beta_dependency_resolvers_configuration", None)
use_conda_dependencies = getattr(options, "beta_conda_dependencies", None)
job_script_provider = None
Expand Down
Loading