Skip to content

Commit c448d6e

Browse files
committed
Merge remote-tracking branch 'origin/master' into 1.2.1-RC1
2 parents 6c44df6 + 23fc5b2 commit c448d6e

File tree

3 files changed

+46
-42
lines changed

3 files changed

+46
-42
lines changed

src/main/java/org/commonwl/view/cwl/CWLToolRunner.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,27 @@
1919

2020
package org.commonwl.view.cwl;
2121

22+
import java.io.IOException;
23+
import java.nio.file.Path;
24+
import java.util.Date;
25+
2226
import org.apache.jena.query.QueryException;
27+
import org.commonwl.view.git.GitDetails;
28+
import org.commonwl.view.git.GitSemaphore;
29+
import org.commonwl.view.git.GitService;
2330
import org.commonwl.view.researchobject.ROBundleFactory;
2431
import org.commonwl.view.workflow.QueuedWorkflow;
2532
import org.commonwl.view.workflow.QueuedWorkflowRepository;
2633
import org.commonwl.view.workflow.Workflow;
2734
import org.commonwl.view.workflow.WorkflowRepository;
35+
import org.eclipse.jgit.api.Git;
2836
import org.slf4j.Logger;
2937
import org.slf4j.LoggerFactory;
3038
import org.springframework.beans.factory.annotation.Autowired;
3139
import org.springframework.scheduling.annotation.Async;
3240
import org.springframework.scheduling.annotation.EnableAsync;
3341
import org.springframework.stereotype.Component;
3442

35-
import java.io.File;
36-
import java.io.IOException;
37-
import java.util.Date;
38-
3943
/**
4044
* Replace existing workflow with the one given by cwltool
4145
*/
@@ -50,31 +54,38 @@ public class CWLToolRunner {
5054
private final CWLService cwlService;
5155
private final ROBundleFactory roBundleFactory;
5256
private final String cwlToolVersion;
57+
private final GitSemaphore gitSemaphore;
58+
private final GitService gitService;
5359

5460
@Autowired
55-
public CWLToolRunner(WorkflowRepository workflowRepository,
56-
QueuedWorkflowRepository queuedWorkflowRepository,
57-
CWLService cwlService,
58-
CWLTool cwlTool,
59-
ROBundleFactory roBundleFactory) {
61+
public CWLToolRunner(WorkflowRepository workflowRepository, QueuedWorkflowRepository queuedWorkflowRepository,
62+
CWLService cwlService, CWLTool cwlTool, ROBundleFactory roBundleFactory, GitSemaphore gitSemaphore,
63+
GitService gitService) {
6064
this.workflowRepository = workflowRepository;
6165
this.queuedWorkflowRepository = queuedWorkflowRepository;
6266
this.cwlService = cwlService;
6367
this.cwlToolVersion = cwlTool.getVersion();
6468
this.roBundleFactory = roBundleFactory;
69+
this.gitSemaphore = gitSemaphore;
70+
this.gitService = gitService;
6571
}
6672

6773
@Async
68-
public void createWorkflowFromQueued(QueuedWorkflow queuedWorkflow, File workflowFile)
74+
public void createWorkflowFromQueued(QueuedWorkflow queuedWorkflow)
6975
throws IOException, InterruptedException {
7076

7177
Workflow tempWorkflow = queuedWorkflow.getTempRepresentation();
72-
78+
GitDetails gitInfo = tempWorkflow.getRetrievedFrom();
79+
final String repoUrl = gitInfo.getRepoUrl();
7380
// Parse using cwltool and replace in database
7481
try {
82+
boolean safeToAccess = gitSemaphore.acquire(repoUrl);
83+
Git repo = gitService.getRepository(gitInfo, safeToAccess);
84+
Path localPath = repo.getRepository().getWorkTree().toPath();
85+
Path workflowFile = localPath.resolve(gitInfo.getPath()).normalize().toAbsolutePath();
7586
Workflow newWorkflow = cwlService.parseWorkflowWithCwltool(
7687
tempWorkflow,
77-
workflowFile);
88+
workflowFile.toFile());
7889

7990
// Success
8091
newWorkflow.setRetrievedFrom(tempWorkflow.getRetrievedFrom());
@@ -105,6 +116,7 @@ public void createWorkflowFromQueued(QueuedWorkflow queuedWorkflow, File workflo
105116
"error occurred in CWLViewer!\n" +
106117
"Help us by reporting it on Gitter or a Github issue\n");
107118
} finally {
119+
gitSemaphore.release(repoUrl);
108120
queuedWorkflowRepository.save(queuedWorkflow);
109121
}
110122

src/main/java/org/commonwl/view/git/GitService.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,16 @@
1919

2020
package org.commonwl.view.git;
2121

22+
import static org.apache.jena.ext.com.google.common.io.Files.createTempDir;
23+
24+
import java.io.IOException;
25+
import java.net.URI;
26+
import java.net.URISyntaxException;
27+
import java.nio.file.Files;
28+
import java.nio.file.Path;
29+
import java.util.HashSet;
30+
import java.util.Set;
31+
2232
import org.apache.commons.codec.digest.DigestUtils;
2333
import org.commonwl.view.researchobject.HashableAgent;
2434
import org.eclipse.jgit.api.Git;
@@ -33,16 +43,6 @@
3343
import org.springframework.beans.factory.annotation.Value;
3444
import org.springframework.stereotype.Service;
3545

36-
import java.io.IOException;
37-
import java.net.URI;
38-
import java.net.URISyntaxException;
39-
import java.nio.file.Files;
40-
import java.nio.file.Path;
41-
import java.util.HashSet;
42-
import java.util.Set;
43-
44-
import static org.apache.jena.ext.com.google.common.io.Files.createTempDir;
45-
4646
/**
4747
* Handles Git related functionality
4848
*/
@@ -82,7 +82,6 @@ public Git getRepository(GitDetails gitDetails, boolean reuseDir)
8282
// Check if folder already exists
8383
Path repoDir = gitStorage.resolve(baseName);
8484
if (Files.isReadable(repoDir) && Files.isDirectory(repoDir)) {
85-
repo = Git.open(repoDir.toFile());
8685
repo.fetch().call();
8786
} else {
8887
// Create a folder and clone repository into it

src/main/java/org/commonwl/view/workflow/WorkflowService.java

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,16 @@
1919

2020
package org.commonwl.view.workflow;
2121

22+
import java.io.File;
23+
import java.io.IOException;
24+
import java.nio.file.Files;
25+
import java.nio.file.Path;
26+
import java.nio.file.Paths;
27+
import java.util.ArrayList;
28+
import java.util.Calendar;
29+
import java.util.Date;
30+
import java.util.List;
31+
2232
import org.commonwl.view.cwl.CWLService;
2333
import org.commonwl.view.cwl.CWLToolRunner;
2434
import org.commonwl.view.cwl.CWLToolStatus;
@@ -38,16 +48,6 @@
3848
import org.springframework.data.domain.Pageable;
3949
import org.springframework.stereotype.Service;
4050

41-
import java.io.File;
42-
import java.io.IOException;
43-
import java.nio.file.Files;
44-
import java.nio.file.Path;
45-
import java.nio.file.Paths;
46-
import java.util.ArrayList;
47-
import java.util.Calendar;
48-
import java.util.Date;
49-
import java.util.List;
50-
5151
@Service
5252
public class WorkflowService {
5353

@@ -320,7 +320,7 @@ public QueuedWorkflow createQueuedWorkflow(GitDetails gitInfo)
320320
// ASYNC OPERATIONS
321321
// Parse with cwltool and update model
322322
try {
323-
cwlToolRunner.createWorkflowFromQueued(queuedWorkflow, workflowFile);
323+
cwlToolRunner.createWorkflowFromQueued(queuedWorkflow);
324324
} catch (Exception e) {
325325
logger.error("Could not update workflow with cwltool", e);
326326
}
@@ -341,17 +341,10 @@ public void retryCwltool(QueuedWorkflow queuedWorkflow) {
341341
queuedWorkflow.setMessage(null);
342342
queuedWorkflow.setCwltoolStatus(CWLToolStatus.RUNNING);
343343
queuedWorkflowRepository.save(queuedWorkflow);
344-
GitDetails gitDetails = queuedWorkflow.getTempRepresentation().getRetrievedFrom();
345-
boolean safeToAccess = gitSemaphore.acquire(gitDetails.getRepoUrl());
346344
try {
347-
Git repo = gitService.getRepository(gitDetails, safeToAccess);
348-
File localPath = repo.getRepository().getWorkTree();
349-
Path pathToWorkflowFile = localPath.toPath().resolve(gitDetails.getPath()).normalize().toAbsolutePath();
350-
cwlToolRunner.createWorkflowFromQueued(queuedWorkflow, new File(pathToWorkflowFile.toString()));
345+
cwlToolRunner.createWorkflowFromQueued(queuedWorkflow);
351346
} catch (Exception e) {
352347
logger.error("Could not update workflow with cwltool", e);
353-
} finally {
354-
gitSemaphore.release(gitDetails.getRepoUrl());
355348
}
356349
}
357350

0 commit comments

Comments
 (0)