Skip to content

Commit 56122dd

Browse files
committed
Switch docker to conditionally mount volumes based on provider
1 parent 91076c9 commit 56122dd

File tree

19 files changed

+243
-21
lines changed

19 files changed

+243
-21
lines changed

SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/pipeline/JobResourceSettings.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.labkey.api.data.Container;
44

5+
import java.util.Collection;
56
import java.util.List;
67

78
/**
@@ -12,4 +13,6 @@ public interface JobResourceSettings
1213
boolean isAvailable(Container c);
1314

1415
List<ToolParameterDescriptor> getParams();
16+
17+
Collection<String> getDockerVolumes(Container c);
1518
}

SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/pipeline/PipelineContext.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
package org.labkey.api.sequenceanalysis.pipeline;
1717

1818
import org.apache.logging.log4j.Logger;
19-
import org.apache.logging.log4j.LogManager;
2019
import org.labkey.api.pipeline.PipelineJob;
2120
import org.labkey.api.pipeline.WorkDirectory;
2221

2322
import java.io.File;
23+
import java.util.Collection;
2424

2525
/**
2626
* User: bimber
@@ -51,4 +51,6 @@ public interface PipelineContext
5151
* This is the directory where the source files were located. In the situation where this is a split job, forceParent=true will return the parent job's sourceDirectory. This can be important if files are written here prior to split.
5252
*/
5353
File getSourceDirectory(boolean forceParent);
54+
55+
Collection<String> getDockerVolumes();
5456
}

SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/pipeline/SequencePipelineService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@
1919
import htsjdk.samtools.SAMFileHeader;
2020
import org.apache.logging.log4j.Logger;
2121
import org.jetbrains.annotations.Nullable;
22+
import org.labkey.api.data.Container;
2223
import org.labkey.api.pipeline.PipelineJob;
2324
import org.labkey.api.pipeline.PipelineJobException;
2425
import org.labkey.api.sequenceanalysis.SequenceOutputFile;
2526
import org.labkey.api.sequenceanalysis.run.CommandWrapper;
2627

2728
import java.io.File;
2829
import java.io.IOException;
30+
import java.util.Collection;
2931
import java.util.List;
3032
import java.util.Map;
3133
import java.util.Set;
@@ -98,6 +100,8 @@ static public void setInstance(SequencePipelineService instance)
98100
*/
99101
abstract public String getDockerCommand();
100102

103+
abstract public Collection<String> getDockerVolumes(Container c);
104+
101105
abstract public List<File> getSequenceJobInputFiles(PipelineJob job);
102106

103107
/**

SequenceAnalysis/api-src/org/labkey/api/sequenceanalysis/run/DockerWrapper.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.apache.commons.lang3.StringUtils;
55
import org.apache.logging.log4j.Logger;
66
import org.labkey.api.pipeline.PipelineJobException;
7+
import org.labkey.api.sequenceanalysis.pipeline.PipelineContext;
78
import org.labkey.api.sequenceanalysis.pipeline.PipelineOutputTracker;
89
import org.labkey.api.sequenceanalysis.pipeline.SequencePipelineService;
910
import org.labkey.api.writer.PrintWriters;
@@ -17,12 +18,14 @@
1718
public class DockerWrapper extends AbstractCommandWrapper
1819
{
1920
private final String _containerName;
21+
private final PipelineContext _ctx;
2022
private File _tmpDir = null;
2123

22-
public DockerWrapper(String containerName, Logger log)
24+
public DockerWrapper(String containerName, Logger log, PipelineContext ctx)
2325
{
2426
super(log);
2527
_containerName = containerName;
28+
_ctx = ctx;
2629
}
2730

2831
public void setTmpDir(File tmpDir)
@@ -49,6 +52,7 @@ public void executeWithDocker(List<String> containerArgs, File workDir, Pipeline
4952
writer.println("sudo $DOCKER run --rm=true \\");
5053
writer.println("\t-v \"${WD}:/work\" \\");
5154
writer.println("\t-v \"${HOME}:/homeDir\" \\");
55+
_ctx.getDockerVolumes().forEach(writer::println);
5256
if (_tmpDir != null)
5357
{
5458
writer.println("\t-v \"" + _tmpDir.getPath() + ":/tmp\" \\");

SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,31 @@
6767
import org.labkey.sequenceanalysis.button.DownloadSraButton;
6868
import org.labkey.sequenceanalysis.button.ReprocessLibraryButton;
6969
import org.labkey.sequenceanalysis.button.RunMultiQCButton;
70-
import org.labkey.sequenceanalysis.pipeline.*;
70+
import org.labkey.sequenceanalysis.pipeline.AlignmentAnalysisJob;
71+
import org.labkey.sequenceanalysis.pipeline.AlignmentImportJob;
72+
import org.labkey.sequenceanalysis.pipeline.CacheGenomePipelineJob;
73+
import org.labkey.sequenceanalysis.pipeline.CacheGenomeTrigger;
74+
import org.labkey.sequenceanalysis.pipeline.ConvertToCramHandler;
75+
import org.labkey.sequenceanalysis.pipeline.IlluminaImportJob;
76+
import org.labkey.sequenceanalysis.pipeline.ImportFastaSequencesPipelineJob;
77+
import org.labkey.sequenceanalysis.pipeline.ImportGenomeTrackPipelineJob;
78+
import org.labkey.sequenceanalysis.pipeline.OrphanFilePipelineProvider;
79+
import org.labkey.sequenceanalysis.pipeline.ProcessVariantsHandler;
80+
import org.labkey.sequenceanalysis.pipeline.ReadsetImportJob;
81+
import org.labkey.sequenceanalysis.pipeline.ReblockGvcfHandler;
82+
import org.labkey.sequenceanalysis.pipeline.ReferenceLibraryPipelineProvider;
83+
import org.labkey.sequenceanalysis.pipeline.SequenceAlignmentJob;
84+
import org.labkey.sequenceanalysis.pipeline.SequenceAlignmentTask;
85+
import org.labkey.sequenceanalysis.pipeline.SequenceJob;
86+
import org.labkey.sequenceanalysis.pipeline.SequenceJobSupportImpl;
87+
import org.labkey.sequenceanalysis.pipeline.SequenceOutputHandlerPipelineProvider;
88+
import org.labkey.sequenceanalysis.pipeline.SequencePipelineProvider;
89+
import org.labkey.sequenceanalysis.pipeline.SequenceReadsetHandlerPipelineProvider;
90+
import org.labkey.sequenceanalysis.pipeline.VariantProcessingJob;
7191
import org.labkey.sequenceanalysis.query.SequenceAnalysisUserSchema;
7292
import org.labkey.sequenceanalysis.query.SequenceTriggerHelper;
7393
import org.labkey.sequenceanalysis.run.RestoreSraDataHandler;
94+
import org.labkey.sequenceanalysis.run.alignment.BWAMem2Wrapper;
7495
import org.labkey.sequenceanalysis.run.alignment.BWAMemWrapper;
7596
import org.labkey.sequenceanalysis.run.alignment.BWASWWrapper;
7697
import org.labkey.sequenceanalysis.run.alignment.BWAWrapper;
@@ -82,7 +103,27 @@
82103
import org.labkey.sequenceanalysis.run.alignment.Pbmm2Wrapper;
83104
import org.labkey.sequenceanalysis.run.alignment.StarWrapper;
84105
import org.labkey.sequenceanalysis.run.alignment.VulcanWrapper;
85-
import org.labkey.sequenceanalysis.run.analysis.*;
106+
import org.labkey.sequenceanalysis.run.analysis.BamIterator;
107+
import org.labkey.sequenceanalysis.run.analysis.BcftoolsFillTagsStep;
108+
import org.labkey.sequenceanalysis.run.analysis.BcftoolsFixploidyStep;
109+
import org.labkey.sequenceanalysis.run.analysis.DeepVariantAnalysis;
110+
import org.labkey.sequenceanalysis.run.analysis.ExportOverlappingReadsAnalysis;
111+
import org.labkey.sequenceanalysis.run.analysis.GenrichStep;
112+
import org.labkey.sequenceanalysis.run.analysis.HaplotypeCallerAnalysis;
113+
import org.labkey.sequenceanalysis.run.analysis.ImmunoGenotypingAnalysis;
114+
import org.labkey.sequenceanalysis.run.analysis.LofreqAnalysis;
115+
import org.labkey.sequenceanalysis.run.analysis.MergeLoFreqVcfHandler;
116+
import org.labkey.sequenceanalysis.run.analysis.NextCladeHandler;
117+
import org.labkey.sequenceanalysis.run.analysis.PARalyzerAnalysis;
118+
import org.labkey.sequenceanalysis.run.analysis.PangolinHandler;
119+
import org.labkey.sequenceanalysis.run.analysis.PbsvAnalysis;
120+
import org.labkey.sequenceanalysis.run.analysis.PbsvJointCallingHandler;
121+
import org.labkey.sequenceanalysis.run.analysis.PindelAnalysis;
122+
import org.labkey.sequenceanalysis.run.analysis.SequenceBasedTypingAnalysis;
123+
import org.labkey.sequenceanalysis.run.analysis.SnpCountAnalysis;
124+
import org.labkey.sequenceanalysis.run.analysis.SubreadAnalysis;
125+
import org.labkey.sequenceanalysis.run.analysis.UnmappedReadExportHandler;
126+
import org.labkey.sequenceanalysis.run.analysis.ViralAnalysis;
86127
import org.labkey.sequenceanalysis.run.assembly.TrinityRunner;
87128
import org.labkey.sequenceanalysis.run.bampostprocessing.AddOrReplaceReadGroupsStep;
88129
import org.labkey.sequenceanalysis.run.bampostprocessing.BaseQualityScoreRecalibrator;
@@ -116,7 +157,27 @@
116157
import org.labkey.sequenceanalysis.run.util.GenomicsDBAppendHandler;
117158
import org.labkey.sequenceanalysis.run.util.GenomicsDBImportHandler;
118159
import org.labkey.sequenceanalysis.run.util.SVAnnotateStep;
119-
import org.labkey.sequenceanalysis.run.variant.*;
160+
import org.labkey.sequenceanalysis.run.variant.DepthOfCoverageHandler;
161+
import org.labkey.sequenceanalysis.run.variant.GenotypeConcordanceStep;
162+
import org.labkey.sequenceanalysis.run.variant.GenotypeFiltrationStep;
163+
import org.labkey.sequenceanalysis.run.variant.KingInferenceStep;
164+
import org.labkey.sequenceanalysis.run.variant.MendelianViolationReportStep;
165+
import org.labkey.sequenceanalysis.run.variant.MergeVcfsAndGenotypesHandler;
166+
import org.labkey.sequenceanalysis.run.variant.MultiAllelicPositionsHandler;
167+
import org.labkey.sequenceanalysis.run.variant.PlinkPcaStep;
168+
import org.labkey.sequenceanalysis.run.variant.SNPEffStep;
169+
import org.labkey.sequenceanalysis.run.variant.SampleRenameStep;
170+
import org.labkey.sequenceanalysis.run.variant.SelectSNVsStep;
171+
import org.labkey.sequenceanalysis.run.variant.SelectSamplesStep;
172+
import org.labkey.sequenceanalysis.run.variant.SelectVariantsStep;
173+
import org.labkey.sequenceanalysis.run.variant.SplitVcfBySamplesStep;
174+
import org.labkey.sequenceanalysis.run.variant.SummarizeGenotypeQualityStep;
175+
import org.labkey.sequenceanalysis.run.variant.VariantAnnotatorStep;
176+
import org.labkey.sequenceanalysis.run.variant.VariantEvalBySampleStep;
177+
import org.labkey.sequenceanalysis.run.variant.VariantEvalStep;
178+
import org.labkey.sequenceanalysis.run.variant.VariantFiltrationStep;
179+
import org.labkey.sequenceanalysis.run.variant.VariantQCStep;
180+
import org.labkey.sequenceanalysis.run.variant.VariantsToTableStep;
120181
import org.labkey.sequenceanalysis.util.Barcoder;
121182
import org.labkey.sequenceanalysis.util.ChainFileValidator;
122183
import org.labkey.sequenceanalysis.util.ScatterGatherUtils;
@@ -237,6 +298,7 @@ public static void registerPipelineSteps()
237298
SequencePipelineService.get().registerPipelineStep(new BowtieWrapper.Provider());
238299
SequencePipelineService.get().registerPipelineStep(new Bowtie2Wrapper.Provider());
239300
SequencePipelineService.get().registerPipelineStep(new BWAMemWrapper.Provider());
301+
SequencePipelineService.get().registerPipelineStep(new BWAMem2Wrapper.Provider());
240302
SequencePipelineService.get().registerPipelineStep(new BWAWrapper.Provider());
241303
SequencePipelineService.get().registerPipelineStep(new BWASWWrapper.Provider());
242304
SequencePipelineService.get().registerPipelineStep(new MosaikWrapper.Provider());

SequenceAnalysis/src/org/labkey/sequenceanalysis/SequencePipelineServiceImpl.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.jetbrains.annotations.Nullable;
99
import org.junit.Assert;
1010
import org.junit.Test;
11+
import org.labkey.api.data.Container;
1112
import org.labkey.api.pipeline.PipelineJob;
1213
import org.labkey.api.pipeline.PipelineJobException;
1314
import org.labkey.api.pipeline.PipelineJobService;
@@ -43,6 +44,7 @@
4344
import java.lang.reflect.ParameterizedType;
4445
import java.util.ArrayList;
4546
import java.util.Arrays;
47+
import java.util.Collection;
4648
import java.util.Collections;
4749
import java.util.HashMap;
4850
import java.util.HashSet;
@@ -457,6 +459,29 @@ public String getDockerCommand()
457459
return "docker";
458460
}
459461

462+
@Override
463+
public Collection<String> getDockerVolumes(Container c)
464+
{
465+
if (PipelineJobService.get().getLocationType() != PipelineJobService.LocationType.WebServer)
466+
{
467+
throw new IllegalArgumentException("SequencePipelineService.getDockerVolumes() should only be called from the webserver!");
468+
}
469+
470+
Set<String> volumeLines = new HashSet<>();
471+
for (JobResourceSettings settings : SequencePipelineServiceImpl.get().getResourceSettings())
472+
{
473+
if (settings.isAvailable(c))
474+
{
475+
for (String volume : settings.getDockerVolumes(c))
476+
{
477+
volumeLines.add("-v '" + volume + "':'" + volume + "'");
478+
}
479+
}
480+
}
481+
482+
return volumeLines;
483+
}
484+
460485
@Override
461486
public List<File> getSequenceJobInputFiles(PipelineJob job)
462487
{

SequenceAnalysis/src/org/labkey/sequenceanalysis/analysis/GLNexusHandler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ else if (genomeIds.isEmpty())
191191
{
192192
ctx.getLogger().debug("Running GLNexus for contig: " + r.getSequenceName());
193193
ctx.getJob().setStatus(PipelineJob.TaskStatus.running, "Processing: " + r.getSequenceName());
194-
new GLNexusWrapper(ctx.getLogger()).execute(inputVcfs, contigVcf, ctx.getFileManager(), binVersion, configType, r);
194+
new GLNexusWrapper(ctx.getLogger()).execute(inputVcfs, contigVcf, ctx.getFileManager(), binVersion, configType, r, ctx);
195195
vcfs.add(contigVcf);
196196
try
197197
{
@@ -261,7 +261,7 @@ private File ensureLocalCopy(File input, File workingDirectory, PipelineOutputTr
261261
}
262262
}
263263

264-
public void execute(List<File> inputGvcfs, File outputVcf, PipelineOutputTracker tracker, String binVersion, String configType, SAMSequenceRecord rec) throws PipelineJobException
264+
public void execute(List<File> inputGvcfs, File outputVcf, PipelineOutputTracker tracker, String binVersion, String configType, SAMSequenceRecord rec, JobContext ctx) throws PipelineJobException
265265
{
266266
File workDir = outputVcf.getParentFile();
267267
tracker.addIntermediateFile(outputVcf);
@@ -291,6 +291,7 @@ public void execute(List<File> inputGvcfs, File outputVcf, PipelineOutputTracker
291291
writer.println("sudo $DOCKER run --rm=true \\");
292292
writer.println("\t-v \"${WD}:/work\" \\");
293293
writer.println("\t-v \"${HOME}:/homeDir\" \\");
294+
ctx.getDockerVolumes().forEach(writer::println);
294295
writer.println("\t -w /work \\");
295296
if (!StringUtils.isEmpty(System.getenv("TMPDIR")))
296297
{

SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/JobContextImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import java.io.File;
1616
import java.util.Arrays;
17+
import java.util.Collection;
1718
import java.util.LinkedHashSet;
1819

1920
/**
@@ -128,4 +129,9 @@ public LinkedHashSet<RecordedAction> getActions()
128129
{
129130
return _actions;
130131
}
132+
133+
public Collection<String> getDockerVolumes()
134+
{
135+
return _job.getDockerVolumes();
136+
}
131137
}

SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/SequenceJob.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.labkey.api.sequenceanalysis.SequenceOutputFile;
3737
import org.labkey.api.sequenceanalysis.pipeline.HasJobParams;
3838
import org.labkey.api.sequenceanalysis.pipeline.SequenceOutputTracker;
39+
import org.labkey.api.sequenceanalysis.pipeline.SequencePipelineService;
3940
import org.labkey.api.settings.AppProps;
4041
import org.labkey.api.util.FileType;
4142
import org.labkey.api.util.FileUtil;
@@ -73,6 +74,7 @@ public class SequenceJob extends PipelineJob implements FileAnalysisJobSupport,
7374
private List<File> _inputFiles;
7475
private List<SequenceOutputFile> _outputsToCreate = new ArrayList<>();
7576
private PipeRoot _folderFileRoot;
77+
private Collection<String> _dockerVolumes;
7678

7779
transient private JSONObject _params;
7880

@@ -104,6 +106,7 @@ protected SequenceJob(SequenceJob parentJob, String jobName, String subdirectory
104106
_folderPrefix = parentJob._folderPrefix;
105107
_inputFiles = parentJob._inputFiles;
106108
_folderFileRoot = parentJob._folderFileRoot;
109+
_dockerVolumes = parentJob._dockerVolumes;
107110

108111
_params = parentJob.getParameterJson();
109112

@@ -133,6 +136,7 @@ public SequenceJob(String providerName, Container c, User u, @Nullable String jo
133136
writeParameters(params);
134137

135138
_folderFileRoot = c.isWorkbook() ? PipelineService.get().findPipelineRoot(c.getParent()) : pipeRoot;
139+
_dockerVolumes = SequencePipelineService.get().getDockerVolumes(c);
136140

137141
setLogFile(_getLogFile());
138142
writeSupportToDisk();
@@ -182,6 +186,16 @@ public void setFolderFileRoot(PipeRoot folderFileRoot)
182186
_folderFileRoot = folderFileRoot;
183187
}
184188

189+
public Collection<String> getDockerVolumes()
190+
{
191+
return Collections.unmodifiableCollection(_dockerVolumes);
192+
}
193+
194+
public void setDockerVolumes(Collection<String> dockerVolumes)
195+
{
196+
_dockerVolumes = dockerVolumes;
197+
}
198+
185199
public void setDescription(String description)
186200
{
187201
_description = description;

SequenceAnalysis/src/org/labkey/sequenceanalysis/pipeline/SequenceTaskHelper.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import java.io.IOException;
5151
import java.net.InetAddress;
5252
import java.net.UnknownHostException;
53+
import java.util.Collection;
5354
import java.util.Collections;
5455
import java.util.List;
5556
import java.util.Map;
@@ -344,4 +345,9 @@ public void cacheExpDatasForParams() throws PipelineJobException
344345
}
345346
}
346347
}
348+
349+
public Collection<String> getDockerVolumes()
350+
{
351+
return _job.getDockerVolumes();
352+
}
347353
}

0 commit comments

Comments
 (0)