mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-18 18:51:26 +00:00
Apply suggestions from review
This commit is contained in:
@@ -10,11 +10,11 @@ import javax.inject.Inject;
|
||||
import javafx.concurrent.Task;
|
||||
import java.nio.file.Path;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.BlockingDeque;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.LinkedBlockingDeque;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
@HealthCheckScoped
|
||||
@@ -25,7 +25,7 @@ public class CheckExecutor {
|
||||
private final Masterkey masterkey;
|
||||
private final VaultConfig vaultConfig;
|
||||
private final ExecutorService sequentialExecutor;
|
||||
private final Queue<CheckTask> runningTasks;
|
||||
private final BlockingDeque<CheckTask> tasksToExecute;
|
||||
|
||||
|
||||
@Inject
|
||||
@@ -34,22 +34,23 @@ public class CheckExecutor {
|
||||
this.masterkey = masterkeyRef.get();
|
||||
this.vaultConfig = vaultConfigRef.get();
|
||||
this.csprng = csprng;
|
||||
this.tasksToExecute = new LinkedBlockingDeque<>();
|
||||
this.sequentialExecutor = Executors.newSingleThreadExecutor();
|
||||
this.runningTasks = new ArrayDeque<>();
|
||||
}
|
||||
|
||||
public synchronized void executeBatch(List<Check> checks) {
|
||||
checks.stream().map(c -> {
|
||||
c.setState(Check.CheckState.SCHEDULED);
|
||||
var task = new CheckTask(c);
|
||||
runningTasks.add(task); // we need to use CheckTask and not Futures to set state to CANCEL
|
||||
tasksToExecute.addLast(task);
|
||||
return task;
|
||||
}).forEach(sequentialExecutor::submit);
|
||||
}
|
||||
|
||||
public synchronized void cancel() {
|
||||
while (!runningTasks.isEmpty()) {
|
||||
runningTasks.remove().cancel(true);
|
||||
while (!tasksToExecute.isEmpty()) {
|
||||
var task = (CheckTask) tasksToExecute.removeLast();
|
||||
task.cancel(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,18 +95,21 @@ public class CheckExecutor {
|
||||
@Override
|
||||
protected void cancelled() {
|
||||
c.setState(Check.CheckState.CANCELLED);
|
||||
tasksToExecute.remove(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeeded() {
|
||||
c.setState(Check.CheckState.SUCCEEDED);
|
||||
c.setHighestResultSeverity(highestResultSeverity);
|
||||
tasksToExecute.remove(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void failed() {
|
||||
c.setState(Check.CheckState.ERROR);
|
||||
c.setError(this.getException());
|
||||
tasksToExecute.remove(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user