Skip to content

Commit

Permalink
Refactor workspace classes
Browse files Browse the repository at this point in the history
  • Loading branch information
lukfor committed Aug 23, 2023
1 parent ab12ce5 commit 1788135
Show file tree
Hide file tree
Showing 16 changed files with 64 additions and 72 deletions.
13 changes: 6 additions & 7 deletions src/main/java/cloudgene/mapred/jobs/AbstractJob.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,8 @@
import cloudgene.mapred.apps.ApplicationRepository;
import cloudgene.mapred.core.User;
import cloudgene.mapred.jobs.queue.PriorityRunnable;
import cloudgene.mapred.jobs.workspace.IExternalWorkspace;
import cloudgene.mapred.jobs.workspace.IWorkspace;
import cloudgene.mapred.util.Settings;
import cloudgene.mapred.wdl.WdlApp;
import cloudgene.mapred.wdl.WdlParameterInputType;
import genepi.io.FileUtil;

Expand Down Expand Up @@ -119,7 +118,7 @@ abstract public class AbstractJob extends PriorityRunnable {

private boolean canceld = false;

protected IExternalWorkspace externalWorkspace;
protected IWorkspace workspace;

private String workspaceSize = null;

Expand Down Expand Up @@ -743,12 +742,12 @@ public void setLocalWorkspace(String localWorkspace) {
this.localWorkspace = localWorkspace;
}

public void setExternalWorkspace(IExternalWorkspace externalWorkspace) {
this.externalWorkspace = externalWorkspace;
public void setWorkspace(IWorkspace workspace) {
this.workspace = workspace;
}

public IExternalWorkspace getExternalWorkspace() {
return externalWorkspace;
public IWorkspace getWorkspace() {
return workspace;
}

public void setApplication(String application) {
Expand Down
19 changes: 7 additions & 12 deletions src/main/java/cloudgene/mapred/jobs/CloudgeneJob.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import cloudgene.mapred.jobs.engine.Planner;
import cloudgene.mapred.jobs.engine.graph.Graph;
import cloudgene.mapred.jobs.engine.graph.GraphNode;
import cloudgene.mapred.jobs.workspace.IExternalWorkspace;
import cloudgene.mapred.jobs.workspace.WorkspaceWrapper;
import cloudgene.mapred.wdl.WdlApp;
import cloudgene.mapred.wdl.WdlParameterInput;
Expand Down Expand Up @@ -104,9 +103,9 @@ public boolean setup() {
FileUtil.createDirectory(context.getLocalTemp());

try {
context.log("Setup External Workspace on " + externalWorkspace.getName());
externalWorkspace.setup(this.getId());
context.setExternalWorkspace(new WorkspaceWrapper(externalWorkspace));
context.log("Setup External Workspace on " + workspace.getName());
workspace.setup(this.getId());
context.setExternalWorkspace(new WorkspaceWrapper(workspace));
} catch (Exception e) {
writeLog(e.toString());
log.info("Error setup external workspace", e);
Expand All @@ -124,12 +123,12 @@ public boolean setup() {
throw new RuntimeException("HDFS support was removed in Cloudgene 3");

case LOCAL_FILE:
String filename = externalWorkspace.createFile(param.getName(), param.getName());
String filename = workspace.createFile(param.getName(), param.getName());
param.setValue(filename);
break;

case LOCAL_FOLDER:
String folder = externalWorkspace.createFolder(param.getName());
String folder = workspace.createFolder(param.getName());
param.setValue(folder);
break;
}
Expand Down Expand Up @@ -293,7 +292,7 @@ public boolean executeFailureStep(WdlStep failedStep) {
public boolean cleanUp() {

try {
externalWorkspace.cleanup(getId());
workspace.cleanup(getId());
} catch (IOException e) {
writeLog("Cleanup failed.");
writeLog(e.getMessage());
Expand Down Expand Up @@ -333,7 +332,7 @@ public boolean exportParameter(CloudgeneParameterOutput out) {

out.setJobId(getId());

List<Download> downloads = externalWorkspace.getDownloads(out.getValue());
List<Download> downloads = workspace.getDownloads(out.getValue());
for (Download download : downloads) {
download.setParameter(out);
download.setCount(MAX_DOWNLOAD);
Expand Down Expand Up @@ -384,8 +383,4 @@ public void updateProgress() {

}

public IExternalWorkspace getExternalWorkspace() {
return externalWorkspace;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import cloudgene.mapred.jobs.Download;

public interface IExternalWorkspace {
public interface IWorkspace {

public void setup(String job) throws IOException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import cloudgene.mapred.util.HashUtil;
import genepi.io.FileUtil;

public class LocalWorkspace implements IExternalWorkspace {
public class LocalWorkspace implements IWorkspace {

private static final String INPUT_DIRECTORY = "input";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import cloudgene.mapred.util.S3Util;
import genepi.io.FileUtil;

public class S3Workspace implements IExternalWorkspace {
public class S3Workspace implements IWorkspace {

private static final String OUTPUT_DIRECTORY = "outputs";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import jakarta.inject.Singleton;

@Singleton
public class ExternalWorkspaceFactory {
public class WorkspaceFactory {

@Inject
protected Application application;

public IExternalWorkspace getDefault() {
public IWorkspace getDefault() {

Settings settings = application.getSettings();

Expand All @@ -31,7 +31,7 @@ public IExternalWorkspace getDefault() {

}

public IExternalWorkspace getByUrl(String url) {
public IWorkspace getByUrl(String url) {

Settings settings = application.getSettings();

Expand All @@ -48,7 +48,7 @@ public IExternalWorkspace getByUrl(String url) {

}

public IExternalWorkspace getByJob(AbstractJob job) {
public IWorkspace getByJob(AbstractJob job) {
return getDefault();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@

public class WorkspaceWrapper implements IExternalWorkspace {

private cloudgene.mapred.jobs.workspace.IExternalWorkspace newWorkspace;
private cloudgene.mapred.jobs.workspace.IWorkspace newWorkspace;

public WorkspaceWrapper(cloudgene.mapred.jobs.workspace.IExternalWorkspace newWorkspace) {
public WorkspaceWrapper(cloudgene.mapred.jobs.workspace.IWorkspace newWorkspace) {
this.newWorkspace = newWorkspace;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
import cloudgene.mapred.jobs.CloudgeneJob;
import cloudgene.mapred.jobs.CloudgeneStep;
import cloudgene.mapred.jobs.Message;
import cloudgene.mapred.jobs.workspace.ExternalWorkspaceFactory;
import cloudgene.mapred.jobs.workspace.IExternalWorkspace;
import cloudgene.mapred.jobs.workspace.WorkspaceFactory;
import cloudgene.mapred.jobs.workspace.IWorkspace;
import cloudgene.mapred.util.HashUtil;
import cloudgene.mapred.wdl.WdlStep;
import genepi.io.FileUtil;
Expand Down Expand Up @@ -88,8 +88,8 @@ public boolean run(WdlStep step, CloudgeneContext context) {
nextflowCommand.add("-w");
nextflowCommand.add(work);
} else {
IExternalWorkspace externalWorkspace = job.getExternalWorkspace();
String workDir = externalWorkspace.createTempFolder("nextflow");
IWorkspace workspace = job.getWorkspace();
String workDir = workspace.createTempFolder("nextflow");
FileUtil.createDirectory(workDir);
nextflowCommand.add("-w");
nextflowCommand.add(workDir);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import cloudgene.mapred.server.services.DownloadService;
import cloudgene.mapred.server.services.JobService;
import genepi.io.FileUtil;
import io.micronaut.http.HttpResponse;
import io.micronaut.http.HttpStatus;
import io.micronaut.http.MutableHttpResponse;
import io.micronaut.http.annotation.Controller;
Expand Down Expand Up @@ -81,7 +80,7 @@ public MutableHttpResponse<InputStream> downloadExternalResults(String jobId, St
@Get("/share/results/{hash}/{filename:.+}")
@Secured(SecurityRule.IS_ANONYMOUS)
public MutableHttpResponse<InputStream> downloadPublicLink(String hash, String filename) throws URISyntaxException, IOException {
System.out.println("------> " + filename);

DownloadDao dao = new DownloadDao(application.getDatabase());
Download download = dao.findByHash(hash);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

import cloudgene.mapred.database.DownloadDao;
import cloudgene.mapred.jobs.Download;
import cloudgene.mapred.jobs.workspace.ExternalWorkspaceFactory;
import cloudgene.mapred.jobs.workspace.IExternalWorkspace;
import cloudgene.mapred.jobs.workspace.WorkspaceFactory;
import cloudgene.mapred.jobs.workspace.IWorkspace;
import cloudgene.mapred.server.Application;
import cloudgene.mapred.server.exceptions.JsonHttpStatusException;
import io.micronaut.http.HttpResponse;
Expand All @@ -22,7 +22,7 @@ public class DownloadService {
protected Application application;

@Inject
protected ExternalWorkspaceFactory workspaceFactory;
protected WorkspaceFactory workspaceFactory;

public MutableHttpResponse<InputStream> download(Download download) throws URISyntaxException, IOException {

Expand All @@ -42,15 +42,15 @@ public MutableHttpResponse<InputStream> download(Download download) throws URISy
dao.update(download);
}

IExternalWorkspace externalWorkspace = workspaceFactory.getByUrl(download.getPath());
IWorkspace workspace = workspaceFactory.getByUrl(download.getPath());

// external workspace found, use link method and create redirect response
String publicUrl = externalWorkspace.createPublicLink(download.getPath());
String publicUrl = workspace.createPublicLink(download.getPath());
if (publicUrl != null) {
URI location = new URI(publicUrl);
return HttpResponse.redirect(location);
} else {
return HttpResponse.ok(externalWorkspace.download(download.getPath()));
return HttpResponse.ok(workspace.download(download.getPath()));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import cloudgene.mapred.database.JobDao;
import cloudgene.mapred.database.util.Database;
import cloudgene.mapred.jobs.AbstractJob;
import cloudgene.mapred.jobs.workspace.ExternalWorkspaceFactory;
import cloudgene.mapred.jobs.workspace.IExternalWorkspace;
import cloudgene.mapred.jobs.workspace.WorkspaceFactory;
import cloudgene.mapred.jobs.workspace.IWorkspace;
import cloudgene.mapred.server.Application;
import cloudgene.mapred.util.MailUtil;
import cloudgene.mapred.util.Settings;
Expand All @@ -27,7 +27,7 @@ public class JobCleanUpService {
protected Application application;

@Inject
protected ExternalWorkspaceFactory workspaceFactory;
protected WorkspaceFactory workspaceFactory;

public int executeRetire() {

Expand All @@ -54,7 +54,7 @@ public int executeRetire() {
log.info("Job " + job.getId() + " retired.");
deleted++;

IExternalWorkspace externalWorkspace = workspaceFactory.getByJob(job);
IWorkspace externalWorkspace = workspaceFactory.getByJob(job);

try {
externalWorkspace.delete(job.getId());
Expand Down
31 changes: 15 additions & 16 deletions src/main/java/cloudgene/mapred/server/services/JobService.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,8 @@
import cloudgene.mapred.jobs.CloudgeneParameterOutput;
import cloudgene.mapred.jobs.Download;
import cloudgene.mapred.jobs.WorkflowEngine;
import cloudgene.mapred.jobs.workspace.ExternalWorkspaceFactory;
import cloudgene.mapred.jobs.workspace.IExternalWorkspace;
import cloudgene.mapred.jobs.workspace.LocalWorkspace;
import cloudgene.mapred.jobs.workspace.IWorkspace;
import cloudgene.mapred.jobs.workspace.WorkspaceFactory;
import cloudgene.mapred.server.Application;
import cloudgene.mapred.server.exceptions.JsonHttpStatusException;
import cloudgene.mapred.util.FormUtil.Parameter;
Expand All @@ -46,7 +45,7 @@ public class JobService {
protected Application application;

@Inject
protected ExternalWorkspaceFactory workspaceFactory;
protected WorkspaceFactory workspaceFactory;

private static final String PARAM_JOB_NAME = "job-name";

Expand Down Expand Up @@ -121,15 +120,15 @@ public AbstractJob submitJob(String appId, List<Parameter> form, User user) {

Map<String, String> inputParams = null;

IExternalWorkspace externalWorkspace = workspaceFactory.getDefault();
IWorkspace workspace = workspaceFactory.getDefault();

try {

// setup workspace
externalWorkspace.setup(id);
workspace.setup(id);

// parse input params
inputParams = parseAndUpdateInputParams(form, app, externalWorkspace);
inputParams = parseAndUpdateInputParams(form, app, workspace);

} catch (Exception e) {
throw new JsonHttpStatusException(HttpStatus.BAD_REQUEST, e.getMessage());
Expand All @@ -148,7 +147,7 @@ public AbstractJob submitJob(String appId, List<Parameter> form, User user) {
job.setId(id);
job.setName(name);
job.setLocalWorkspace(localWorkspace);
job.setExternalWorkspace(externalWorkspace);
job.setWorkspace(workspace);
job.setSettings(settings);
job.setApplication(app.getName() + " " + app.getVersion());
job.setApplicationId(appId);
Expand Down Expand Up @@ -229,9 +228,9 @@ public AbstractJob delete(AbstractJob job) {

// delete all results that are stored on external workspaces

IExternalWorkspace externalWorkspace = workspaceFactory.getByJob(job);
IWorkspace workspace = workspaceFactory.getByJob(job);
try {
externalWorkspace.delete(job.getId());
workspace.delete(job.getId());
} catch (Exception e) {
log.error("Deleteting " + job.getId() + " form workspace failed.", e);
}
Expand Down Expand Up @@ -319,10 +318,10 @@ public String archive(AbstractJob job) {
job.setState(AbstractJob.STATE_RETIRED);
dao.update(job);

IExternalWorkspace externalWorkspace = workspaceFactory.getByJob(job);
IWorkspace workspace = workspaceFactory.getByJob(job);

try {
externalWorkspace.delete(job.getId());
workspace.delete(job.getId());
} catch (Exception e) {
log.error("Deleteting " + job.getId() + " from workspace failed.", e);
}
Expand Down Expand Up @@ -367,8 +366,8 @@ public String createId() {

// TODO: refactore and combine this method with CommandLineUtil.parseArgs...

private Map<String, String> parseAndUpdateInputParams(List<Parameter> form, WdlApp app,
IExternalWorkspace externalWorkspace) throws Exception {
private Map<String, String> parseAndUpdateInputParams(List<Parameter> form, WdlApp app, IWorkspace workspace)
throws Exception {

Map<String, String> props = new HashMap<String, String>();
Map<String, String> params = new HashMap<String, String>();
Expand Down Expand Up @@ -402,10 +401,10 @@ private Map<String, String> parseAndUpdateInputParams(List<Parameter> form, WdlA
}

// copy to workspace in input directory
String target = externalWorkspace.uploadInput(fieldName, inputFile);
String target = workspace.uploadInput(fieldName, inputFile);

if (inputParam.isFolder()) {
props.put(fieldName, externalWorkspace.getParent(target));
props.put(fieldName, workspace.getParent(target));
} else {
// file
props.put(fieldName, target);
Expand Down
Loading

0 comments on commit 1788135

Please sign in to comment.