1717import org .labkey .api .sequenceanalysis .pipeline .SequenceOutputHandler ;
1818import org .labkey .api .sequenceanalysis .pipeline .SequencePipelineService ;
1919import org .labkey .api .sequenceanalysis .pipeline .ToolParameterDescriptor ;
20- import org .labkey .api .sequenceanalysis .run .SimpleScriptWrapper ;
20+ import org .labkey .api .sequenceanalysis .run .DockerWrapper ;
2121import org .labkey .api .util .FileUtil ;
2222import 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 ("\t Rscript --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