Skip to content

Commit 5a1b4ef

Browse files
committed
Allow nimble to resume on job restart
1 parent 778ef90 commit 5a1b4ef

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

singlecell/src/org/labkey/singlecell/run/NimbleHelper.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ private File prepareReference(File genomeCsv, File genomeFasta, NimbleGenome gen
171171
genomeFasta = ensureLocalCopy(genomeFasta, output);
172172

173173
File nimbleJson = new File(getPipelineCtx().getWorkingDirectory(), FileUtil.getBaseName(genomeFasta) + ".json");
174-
runUsingDocker(Arrays.asList("generate", "/work/" + genomeFasta.getName(), "/work/" + genomeCsv.getName(), "/work/" + nimbleJson.getName()), output);
174+
runUsingDocker(Arrays.asList("generate", "/work/" + genomeFasta.getName(), "/work/" + genomeCsv.getName(), "/work/" + nimbleJson.getName()), output, "generate-" + genome.genomeId);
175175
if (!nimbleJson.exists())
176176
{
177177
throw new PipelineJobException("Unable to find expected file: " + nimbleJson.getPath());
@@ -271,7 +271,7 @@ private File doAlignment(NimbleGenome genome, File refJson, File bam, PipelineSt
271271
alignArgs.add("/work/" + resultsTsv.getName());
272272
alignArgs.add("/work/" + localBam.getName());
273273

274-
runUsingDocker(alignArgs, output);
274+
runUsingDocker(alignArgs, output, "align-" + genome.genomeId);
275275
if (!resultsTsv.exists())
276276
{
277277
throw new PipelineJobException("Expected to find file: " + resultsTsv.getPath());
@@ -302,9 +302,14 @@ private File doAlignment(NimbleGenome genome, File refJson, File bam, PipelineSt
302302
return resultsTsv;
303303
}
304304

305+
private File getNimbleDoneFile(File parentDir, String resumeString)
306+
{
307+
return new File(parentDir, "nimble." + resumeString + ".done");
308+
}
309+
305310
public static String DOCKER_CONTAINER_NAME = "ghcr.io/bimberlab/nimble:latest";
306311

307-
private void runUsingDocker(List<String> nimbleArgs, PipelineStepOutput output) throws PipelineJobException
312+
private void runUsingDocker(List<String> nimbleArgs, PipelineStepOutput output, String resumeString) throws PipelineJobException
308313
{
309314
File localBashScript = new File(getPipelineCtx().getWorkingDirectory(), "docker.sh");
310315
output.addIntermediateFile(localBashScript);
@@ -345,9 +350,28 @@ private void runUsingDocker(List<String> nimbleArgs, PipelineStepOutput output)
345350
throw new PipelineJobException(e);
346351
}
347352

348-
SimpleScriptWrapper rWrapper = new SimpleScriptWrapper(getPipelineCtx().getLogger());
349-
rWrapper.setWorkingDir(getPipelineCtx().getWorkingDirectory());
350-
rWrapper.execute(Arrays.asList("/bin/bash", localBashScript.getName()));
353+
File doneFile = getNimbleDoneFile(getPipelineCtx().getWorkingDirectory(), resumeString);
354+
output.addIntermediateFile(doneFile);
355+
356+
if (doneFile.exists())
357+
{
358+
getPipelineCtx().getLogger().info("Nimble already completed, resuming: " + resumeString);
359+
}
360+
else
361+
{
362+
SimpleScriptWrapper rWrapper = new SimpleScriptWrapper(getPipelineCtx().getLogger());
363+
rWrapper.setWorkingDir(getPipelineCtx().getWorkingDirectory());
364+
rWrapper.execute(Arrays.asList("/bin/bash", localBashScript.getName()));
365+
366+
try
367+
{
368+
FileUtils.touch(doneFile);
369+
}
370+
catch (IOException e)
371+
{
372+
throw new PipelineJobException(e);
373+
}
374+
}
351375
}
352376

353377
private File ensureLocalCopy(File input, PipelineStepOutput output) throws PipelineJobException

0 commit comments

Comments
 (0)