Skip to content

Commit 753356c

Browse files
committed
Convert AbstractSingleCellPipelineStep to use DockerWrapper
1 parent 8157f85 commit 753356c

File tree

1 file changed

+12
-58
lines changed

1 file changed

+12
-58
lines changed

singlecell/api-src/org/labkey/api/singlecell/pipeline/AbstractSingleCellPipelineStep.java

Lines changed: 12 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import org.labkey.api.sequenceanalysis.pipeline.SequenceOutputHandler;
1818
import org.labkey.api.sequenceanalysis.pipeline.SequencePipelineService;
1919
import org.labkey.api.sequenceanalysis.pipeline.ToolParameterDescriptor;
20-
import org.labkey.api.sequenceanalysis.run.SimpleScriptWrapper;
20+
import org.labkey.api.sequenceanalysis.run.DockerWrapper;
2121
import org.labkey.api.util.FileUtil;
2222
import org.labkey.api.writer.PrintWriters;
2323

@@ -301,6 +301,8 @@ protected static SeuratToolParameter getSeuratThreadsParam()
301301

302302
public static void executeR(SequenceOutputHandler.JobContext ctx, String dockerContainerName, String outputPrefix, List<String> lines, @Nullable Integer seuratThreads, @Nullable String dockerHomeDir) throws PipelineJobException
303303
{
304+
DockerWrapper wrapper = new DockerWrapper(dockerContainerName, ctx.getLogger(), ctx);
305+
304306
File localRScript = new File(ctx.getOutputDir(), FileUtil.makeLegalName(outputPrefix + ".R").replaceAll(" ", "_"));
305307
try (PrintWriter writer = PrintWriters.getPrintWriter(localRScript))
306308
{
@@ -311,72 +313,24 @@ public static void executeR(SequenceOutputHandler.JobContext ctx, String dockerC
311313
throw new PipelineJobException(e);
312314
}
313315

314-
File localBashScript = new File(ctx.getOutputDir(), "dockerWrapper.sh");
315-
try (PrintWriter writer = PrintWriters.getPrintWriter(localBashScript))
316+
if (seuratThreads != null)
316317
{
317-
writer.println("#!/bin/bash");
318-
writer.println("set -x");
319-
writer.println("WD=`pwd`");
320-
writer.println("HOME=`echo ~/`");
321-
322-
writer.println("DOCKER='" + SequencePipelineService.get().getDockerCommand() + "'");
323-
writer.println("$DOCKER pull " + dockerContainerName);
324-
writer.println("$DOCKER run --rm=true \\");
325-
326318
Integer maxThreads = SequencePipelineService.get().getMaxThreads(ctx.getLogger());
327-
if (maxThreads != null)
328-
{
329-
writer.println("\t-e SEQUENCEANALYSIS_MAX_THREADS=" + maxThreads + " \\");
330-
}
331-
332-
if (seuratThreads != null)
319+
if (maxThreads != null && maxThreads < seuratThreads)
333320
{
334-
if (maxThreads != null && maxThreads < seuratThreads)
335-
{
336-
seuratThreads = maxThreads;
337-
}
338-
339-
writer.println("\t-e SEURAT_MAX_THREADS=" + seuratThreads + " \\");
321+
seuratThreads = maxThreads;
340322
}
341323

342-
Integer maxRam = SequencePipelineService.get().getMaxRam();
343-
if (maxRam != null)
344-
{
345-
//int swap = 4*maxRam;
346-
writer.println("\t-e SEQUENCEANALYSIS_MAX_RAM=" + maxRam + " \\");
347-
writer.println("\t--memory='" + maxRam + "g' \\");
348-
}
349-
350-
File tmpDir = new File(SequencePipelineService.get().getJavaTempDir());
351-
writer.println("\t-v \"${WD}:/work\" \\");
352-
writer.println("\t-v \"" + tmpDir.getPath() + ":/tmp\" \\");
353-
ctx.getDockerVolumes().forEach(ln -> writer.println(ln + " \\"));
354-
writer.println("\t-v \"${HOME}:/homeDir\" \\");
355-
writer.println("\t-e TMPDIR=/tmp \\");
356-
if (dockerHomeDir != null)
357-
{
358-
writer.println("\t-e HOME=" + dockerHomeDir + " \\");
359-
}
360-
writer.println("\t-w /work \\");
361-
//NOTE: this seems to disrupt packages installed into home
362-
//writer.println("\t-e HOME=/homeDir \\");
363-
writer.println("\t" + dockerContainerName + " \\");
364-
writer.println("\tRscript --vanilla '" + localRScript.getName() + "'");
365-
writer.println("EXIT_CODE=$?");
366-
writer.println("echo 'Bash script complete: '$EXIT_CODE");
367-
writer.println("exit $EXIT_CODE");
368-
}
369-
catch (IOException e)
370-
{
371-
throw new PipelineJobException(e);
324+
wrapper.addToEnvironment("SEURAT_MAX_THREADS", seuratThreads.toString());
372325
}
373326

374-
SimpleScriptWrapper rWrapper = new SimpleScriptWrapper(ctx.getLogger());
375-
rWrapper.setWorkingDir(ctx.getOutputDir());
376-
rWrapper.execute(Arrays.asList("/bin/bash", localBashScript.getName()));
327+
File tmpDir = new File(SequencePipelineService.get().getJavaTempDir());
328+
wrapper.setTmpDir(tmpDir);
329+
330+
wrapper.setWorkingDir(ctx.getOutputDir());
331+
wrapper.executeWithDocker(Arrays.asList("Rscript", "--vanilla", "'" + localRScript.getName() + "'"), ctx.getWorkingDirectory(), ctx.getFileManager());
377332

378333
localRScript.delete();
379-
localBashScript.delete();
380334
}
381335

382336
public String getDockerHomeDir()

0 commit comments

Comments
 (0)