Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redesign workflow engine and provisioner API #352

Merged
merged 1 commit into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changes/change_operation_api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Redesign `WorkflowEngine` and `Provisioner` APIs to be fluent rather than callbacks
473 changes: 79 additions & 394 deletions plugin-guide.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ca.on.oicr.gsi.vidarr.cli;

import ca.on.oicr.gsi.vidarr.core.ActiveOperation;
import ca.on.oicr.gsi.vidarr.core.OperationStatus;
import ca.on.oicr.gsi.vidarr.ActiveOperation;
import ca.on.oicr.gsi.vidarr.OperationStatus;
import com.fasterxml.jackson.databind.JsonNode;
import java.lang.System.Logger.Level;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import ca.on.oicr.gsi.vidarr.core.Target;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
Expand All @@ -14,51 +14,52 @@

/** Configuration file format for workflow testing */
public final class TargetConfiguration {
private WorkflowEngine engine;
private List<InputProvisioner> inputs;
private List<OutputProvisioner> outputs;
private List<RuntimeProvisioner> runtimes;
private WorkflowEngine<?, ?> engine;
private List<InputProvisioner<?>> inputs;
private List<OutputProvisioner<?, ?>> outputs;
private List<RuntimeProvisioner<?>> runtimes;

@JsonCreator
public TargetConfiguration(@JsonProperty("engine") WorkflowEngine engine,
@JsonProperty("inputs") List<InputProvisioner> inputs,
@JsonProperty("outputs") List<OutputProvisioner> outputs,
@JsonProperty("runtimes") List<RuntimeProvisioner> runtimes) {
public TargetConfiguration(
@JsonProperty("engine") WorkflowEngine<?, ?> engine,
@JsonProperty("inputs") List<InputProvisioner<?>> inputs,
@JsonProperty("outputs") List<OutputProvisioner<?, ?>> outputs,
@JsonProperty("runtimes") List<RuntimeProvisioner<?>> runtimes) {
this.engine = Objects.requireNonNull(engine, "Engine object missing from config");
this.inputs = Objects.requireNonNull(inputs, "Inputs object missing from config");
this.outputs = Objects.requireNonNull(outputs, "Outputs object missing from config");
this.runtimes = Objects.requireNonNull(runtimes, "Runtimes object missing from config");
}

public WorkflowEngine getEngine() {
public WorkflowEngine<?, ?> getEngine() {
return engine;
}

public List<InputProvisioner> getInputs() {
public List<InputProvisioner<?>> getInputs() {
return inputs;
}

public List<OutputProvisioner> getOutputs() {
public List<OutputProvisioner<?, ?>> getOutputs() {
return outputs;
}

public List<RuntimeProvisioner> getRuntimes() {
public List<RuntimeProvisioner<?>> getRuntimes() {
return runtimes;
}

public void setEngine(WorkflowEngine engine) {
public void setEngine(WorkflowEngine<?, ?> engine) {
this.engine = engine;
}

public void setInputs(List<InputProvisioner> inputs) {
public void setInputs(List<InputProvisioner<?>> inputs) {
this.inputs = inputs;
}

public void setOutputs(List<OutputProvisioner> outputs) {
public void setOutputs(List<OutputProvisioner<?, ?>> outputs) {
this.outputs = outputs;
}

public void setRuntimes(List<RuntimeProvisioner> runtimes) {
public void setRuntimes(List<RuntimeProvisioner<?>> runtimes) {
this.runtimes = runtimes;
}

Expand All @@ -74,7 +75,7 @@ public Target toTarget() {
}
engine.startup();
return new Target() {
final Map<InputProvisionFormat, InputProvisioner> inputs =
final Map<InputProvisionFormat, InputProvisioner<?>> inputs =
TargetConfiguration.this.inputs.stream()
.flatMap(
p ->
Expand All @@ -83,7 +84,7 @@ public Target toTarget() {
.map(f -> new Pair<>(f, p)))
.collect(Collectors.toMap(Pair::first, Pair::second));

final Map<OutputProvisionFormat, OutputProvisioner> outputs =
final Map<OutputProvisionFormat, OutputProvisioner<?, ?>> outputs =
TargetConfiguration.this.outputs.stream()
.flatMap(
p ->
Expand All @@ -92,31 +93,31 @@ public Target toTarget() {
.map(f -> new Pair<>(f, p)))
.collect(Collectors.toMap(Pair::first, Pair::second));

final List<RuntimeProvisioner> runtimes =
TargetConfiguration.this.runtimes.stream().collect(Collectors.toList());
final List<RuntimeProvisioner<?>> runtimes =
new ArrayList<>(TargetConfiguration.this.runtimes);

@Override
public Stream<Pair<String, ConsumableResource>> consumableResources() {
return Stream.empty();
}

@Override
public WorkflowEngine engine() {
public WorkflowEngine<?, ?> engine() {
return engine;
}

@Override
public InputProvisioner provisionerFor(InputProvisionFormat type) {
public InputProvisioner<?> provisionerFor(InputProvisionFormat type) {
return inputs.get(type);
}

@Override
public OutputProvisioner provisionerFor(OutputProvisionFormat type) {
public OutputProvisioner<?, ?> provisionerFor(OutputProvisionFormat type) {
return outputs.get(type);
}

@Override
public Stream<RuntimeProvisioner> runtimeProvisioners() {
public Stream<RuntimeProvisioner<?>> runtimeProvisioners() {
return runtimes.stream();
}
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ca.on.oicr.gsi.vidarr.core;

import ca.on.oicr.gsi.Pair;
import ca.on.oicr.gsi.vidarr.ActiveOperation;
import ca.on.oicr.gsi.vidarr.api.ExternalId;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
Expand Down
Loading
Loading