Skip to content

Commit fb04a94

Browse files
Liang Meimfateev
authored andcommitted
Wire workflow id reuse policy in start workflow execution params (#296)
1 parent 33b0302 commit fb04a94

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/main/java/com/uber/cadence/internal/common/StartWorkflowExecutionParameters.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ public static StartWorkflowExecutionParameters fromWorkflowOptions(WorkflowOptio
304304
parameters.setTaskStartToCloseTimeoutSeconds(getSeconds(options.getTaskStartToCloseTimeout()));
305305
parameters.setTaskList(options.getTaskList());
306306
parameters.setChildPolicy(options.getChildPolicy());
307+
parameters.setWorkflowIdReusePolicy(options.getWorkflowIdReusePolicy());
307308
RetryOptions retryOptions = options.getRetryOptions();
308309
if (retryOptions != null) {
309310
RetryParameters rp = new RetryParameters();

src/test/java/com/uber/cadence/workflow/WorkflowTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1293,6 +1293,35 @@ public void testExecute() throws ExecutionException, InterruptedException {
12931293
assertEquals("123456", stubP6.query());
12941294
}
12951295

1296+
@Test
1297+
public void testWorkflowIdResuePolicy() {
1298+
startWorkerFor(TestMultiargsWorkflowsImpl.class);
1299+
1300+
// Without setting WorkflowIdReusePolicy, the semantics is to get result for the previous run.
1301+
String workflowID = UUID.randomUUID().toString();
1302+
WorkflowOptions workflowOptions =
1303+
newWorkflowOptionsBuilder(taskList).setWorkflowId(workflowID).build();
1304+
TestMultiargsWorkflowsFunc1 stubF1_1 =
1305+
workflowClient.newWorkflowStub(TestMultiargsWorkflowsFunc1.class, workflowOptions);
1306+
assertEquals(1, stubF1_1.func1(1));
1307+
TestMultiargsWorkflowsFunc1 stubF1_2 =
1308+
workflowClient.newWorkflowStub(TestMultiargsWorkflowsFunc1.class, workflowOptions);
1309+
assertEquals(1, stubF1_2.func1(2));
1310+
1311+
// Setting WorkflowIdReusePolicy to AllowDuplicate will trigger new run.
1312+
workflowOptions =
1313+
newWorkflowOptionsBuilder(taskList)
1314+
.setWorkflowIdReusePolicy(WorkflowIdReusePolicy.AllowDuplicate)
1315+
.setWorkflowId(workflowID)
1316+
.build();
1317+
TestMultiargsWorkflowsFunc1 stubF1_3 =
1318+
workflowClient.newWorkflowStub(TestMultiargsWorkflowsFunc1.class, workflowOptions);
1319+
assertEquals(2, stubF1_3.func1(2));
1320+
1321+
// Setting WorkflowIdReusePolicy to RejectDuplicate or AllowDuplicateFailedOnly does not work as
1322+
// expected. See https://github.com/uber/cadence-java-client/issues/295.
1323+
}
1324+
12961325
public static class TestChildAsyncWorkflow implements TestWorkflow1 {
12971326

12981327
@Override

0 commit comments

Comments
 (0)