Skip to content

Commit 9463cd6

Browse files
authored
Merge pull request #703 from conductor-oss/sync_execution
Implement sync workflow execution (fixes #659), upgrade to JDK 21, remove deprecated DynoQueue
2 parents aa7de92 + 1252d75 commit 9463cd6

File tree

82 files changed

+3065
-914
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+3065
-914
lines changed

.claude/agents/docs-writer.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
---
2+
name: docs-writer
3+
description: Technical documentation specialist for Conductor workflow orchestration features. Creates clear, comprehensive documentation for APIs, workflows, tasks, and system architecture.
4+
tools: Read, Grep, Glob, Write, Edit, Bash
5+
model: inherit
6+
---
7+
8+
You are a technical documentation specialist for Conductor, an open-source workflow orchestration engine built at Netflix.
9+
10+
## Your Role
11+
12+
Create clear, comprehensive, and accurate documentation for Conductor features, including:
13+
- Workflow definitions and task types
14+
- REST API endpoints and payloads
15+
- System architecture and components
16+
- Configuration options and database integrations
17+
- SDK usage examples (Java, Python, JavaScript, Go, C#)
18+
- Developer guides and tutorials
19+
20+
## Documentation Process
21+
22+
1. **Understand the Feature**
23+
- Read relevant source code to understand implementation
24+
- Identify key classes, methods, and APIs
25+
- Test functionality if possible
26+
- Review existing related documentation
27+
28+
2. **Structure Documentation**
29+
- Start with a clear overview/summary
30+
- Include purpose and use cases
31+
- Provide syntax and parameters
32+
- Add practical examples
33+
- Document edge cases and limitations
34+
- Link to related documentation
35+
36+
3. **Follow Conductor Style**
37+
- Use clear, concise language
38+
- Include code examples in relevant languages
39+
- Use Markdown formatting consistently
40+
- Add diagrams or JSON examples for workflows
41+
- Follow existing documentation patterns in `/docs`
42+
43+
4. **Quality Standards**
44+
- Ensure technical accuracy
45+
- Test all code examples
46+
- Use proper terminology (workflows, tasks, workers, etc.)
47+
- Include error handling examples
48+
- Add troubleshooting sections when relevant
49+
50+
## Key Conductor Concepts to Reference
51+
52+
- **Workflows**: JSON-based orchestration definitions
53+
- **Tasks**: Units of work (HTTP, Lambda, Sub-workflow, etc.)
54+
- **Workers**: Services that execute tasks
55+
- **Task Definitions**: Reusable task configurations
56+
- **System Tasks**: Built-in task types
57+
- **Event Handlers**: Trigger workflows from events
58+
59+
## Output Format
60+
61+
Provide documentation in Markdown format suitable for the `/docs` directory, with:
62+
- Clear headings and sections
63+
- Code blocks with proper syntax highlighting
64+
- Tables for parameters and options
65+
- Links to related documentation
66+
- Version information when relevant
67+
68+
Always prioritize clarity and practical usefulness for developers using Conductor.

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ jobs:
1818
fetch-depth: 0
1919
- name: Gradle wrapper validation
2020
uses: gradle/wrapper-validation-action@v3
21-
- name: Set up Zulu JDK 17
21+
- name: Set up Zulu JDK 21
2222
uses: actions/setup-java@v3
2323
with:
2424
distribution: "zulu"
25-
java-version: "17"
25+
java-version: "21"
2626
- name: Cache SonarCloud packages
2727
uses: actions/cache@v4
2828
with:

.github/workflows/publish.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ jobs:
1818
name: Gradle Build and Publish
1919
steps:
2020
- uses: actions/checkout@v5
21-
- name: Set up Zulu JDK 17
21+
- name: Set up Zulu JDK 21
2222
uses: actions/setup-java@v3
2323
with:
2424
distribution: 'zulu'
25-
java-version: '17'
25+
java-version: '21'
2626
- name: Cache Gradle packages
2727
uses: actions/cache@v4
2828
with:

.github/workflows/publish_build.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ jobs:
2020
contents: write
2121
steps:
2222
- uses: actions/checkout@v5
23-
- name: Set up Zulu JDK 17
23+
- name: Set up Zulu JDK 21
2424
uses: actions/setup-java@v3
2525
with:
2626
distribution: 'zulu'
27-
java-version: '17'
27+
java-version: '21'
2828
- name: Cache Gradle packages
2929
uses: actions/cache@v4
3030
with:

build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ allprojects {
4444

4545
java {
4646
toolchain {
47-
languageVersion = JavaLanguageVersion.of(17)
47+
languageVersion = JavaLanguageVersion.of(21)
4848
}
4949
}
5050

51-
sourceCompatibility = JavaVersion.VERSION_17
52-
targetCompatibility = JavaVersion.VERSION_17
51+
sourceCompatibility = JavaVersion.VERSION_21
52+
targetCompatibility = JavaVersion.VERSION_21
5353

5454
group = 'org.conductoross'
5555

@@ -127,7 +127,7 @@ allprojects {
127127
["annotations", "common", "grpc", "grpc-client"].each {
128128
project(":conductor-$it") {
129129
compileJava {
130-
options.release = 17
130+
options.release = 21
131131
}
132132
}
133133
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright 2025 Conductor Authors.
3+
* <p>
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5+
* the License. You may obtain a copy of the License at
6+
* <p>
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
* <p>
9+
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10+
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11+
* specific language governing permissions and limitations under the License.
12+
*/
13+
package org.conductoross.conductor.model;
14+
15+
import java.util.Map;
16+
17+
import lombok.Data;
18+
19+
@Data
20+
public abstract class SignalResponse {
21+
22+
private WorkflowSignalReturnStrategy responseType;
23+
private String targetWorkflowId;
24+
private String targetWorkflowStatus;
25+
26+
private String requestId;
27+
private String workflowId;
28+
private String correlationId;
29+
private Map<String, Object> input;
30+
private Map<String, Object> output;
31+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright 2025 Conductor Authors.
3+
* <p>
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5+
* the License. You may obtain a copy of the License at
6+
* <p>
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
* <p>
9+
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10+
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11+
* specific language governing permissions and limitations under the License.
12+
*/
13+
package org.conductoross.conductor.model;
14+
15+
import java.util.List;
16+
import java.util.Map;
17+
18+
import com.netflix.conductor.common.metadata.tasks.Task;
19+
20+
import lombok.Data;
21+
22+
@Data
23+
public class TaskRun extends SignalResponse {
24+
25+
private String taskType;
26+
private String taskId;
27+
private String referenceTaskName;
28+
private int retryCount;
29+
private String taskDefName;
30+
private String retriedTaskId;
31+
private String workflowType;
32+
private String reasonForIncompletion;
33+
private int priority;
34+
private Map<String, Object> variables;
35+
private List<Task> tasks;
36+
private String createdBy;
37+
private long createTime;
38+
private long updateTime;
39+
private Task.Status status;
40+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright 2025 Conductor Authors.
3+
* <p>
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5+
* the License. You may obtain a copy of the License at
6+
* <p>
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
* <p>
9+
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10+
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11+
* specific language governing permissions and limitations under the License.
12+
*/
13+
package org.conductoross.conductor.model;
14+
15+
import java.util.List;
16+
import java.util.Map;
17+
18+
import com.netflix.conductor.common.metadata.tasks.Task;
19+
import com.netflix.conductor.common.run.Workflow;
20+
21+
import lombok.Data;
22+
23+
@Data
24+
public class WorkflowRun extends SignalResponse {
25+
26+
private int priority;
27+
private Map<String, Object> variables;
28+
private List<Task> tasks;
29+
private String createdBy;
30+
private long createTime;
31+
private Workflow.WorkflowStatus status;
32+
private long updateTime;
33+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright 2025 Conductor Authors.
3+
* <p>
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5+
* the License. You may obtain a copy of the License at
6+
* <p>
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
* <p>
9+
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10+
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11+
* specific language governing permissions and limitations under the License.
12+
*/
13+
package org.conductoross.conductor.model;
14+
15+
public enum WorkflowSignalReturnStrategy {
16+
/**
17+
* The state of the workflow that was specified via workflow (execution) ID is returned, even if
18+
* the currently blocking task belongs to a subworkflow.
19+
*/
20+
TARGET_WORKFLOW,
21+
22+
/**
23+
* The state of the workflow that is currently blocking is returned. This might be a potentially
24+
* deep subworkflow of the workflow specified in the initial API request.
25+
*/
26+
BLOCKING_WORKFLOW,
27+
28+
/**
29+
* The state of the task that is currently blocking is returned. This might be a task in a
30+
* potentially deep subworkflow of the workflow specified in the initial API request.
31+
*/
32+
BLOCKING_TASK,
33+
34+
/**
35+
* The input for the task that is currently blocking is returned. This might be a task in a
36+
* potentially deep subworkflow of the workflow specified in the initial API request.
37+
*/
38+
BLOCKING_TASK_INPUT;
39+
40+
// This unfortunately got much more difficult to implement when the notification service was
41+
// made to notify with
42+
// subworkflow data directly rather than notify the parent.
43+
/// **
44+
// * The state of each task that is currently blocking is returned. This might include tasks in
45+
// potentially deep
46+
// * subworkflows of the workflow specified in the initial API request.
47+
// */
48+
// ALL_BLOCKING_TASKS,
49+
}

0 commit comments

Comments
 (0)