Skip to content

Commit 5b91385

Browse files
authored
Fix listWorkflows input/output handling (#294)
1 parent e8050c6 commit 5b91385

4 files changed

Lines changed: 58 additions & 9 deletions

File tree

transact/src/main/java/dev/dbos/transact/conductor/protocol/WorkflowsOutput.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public WorkflowsOutput(WorkflowStatus status) {
5353
authenticatedRoles != null && authenticatedRoles.length > 0
5454
? JSONUtil.serializeArray(authenticatedRoles)
5555
: null;
56-
this.Input = input != null ? JSONUtil.serializeArray(input) : null;
56+
this.Input = input != null ? JSONUtil.toJson(input) : null;
5757
this.Output = output != null ? JSONUtil.toJson(output) : null;
5858
this.Request = null; // not used in Java TX
5959
this.Error =

transact/src/main/java/dev/dbos/transact/database/WorkflowDAO.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,6 @@ private static WorkflowStatus resultsToWorkflowStatus(
558558
String serializedOutput = loadOutput ? rs.getString("output") : null;
559559
String serializedError = loadOutput ? rs.getString("error") : null;
560560
String serialization = loadInput || loadOutput ? rs.getString("serialization") : null;
561-
var err = ErrorResult.deserialize(serializedError, serialization, serializer);
562561
WorkflowStatus info =
563562
new WorkflowStatus(
564563
workflow_uuid,
@@ -571,9 +570,14 @@ private static WorkflowStatus resultsToWorkflowStatus(
571570
(authenticatedRolesJson != null)
572571
? (String[]) JSONUtil.deserializeToArray(authenticatedRolesJson)
573572
: null,
574-
SerializationUtil.deserializePositionalArgs(serializedInput, serialization, serializer),
575-
SerializationUtil.deserializeValue(serializedOutput, serialization, serializer),
576-
err,
573+
loadInput
574+
? SerializationUtil.deserializePositionalArgs(
575+
serializedInput, serialization, serializer)
576+
: null,
577+
loadOutput
578+
? SerializationUtil.deserializeValue(serializedOutput, serialization, serializer)
579+
: null,
580+
loadOutput ? ErrorResult.deserialize(serializedError, serialization, serializer) : null,
577581
rs.getString("executor_id"),
578582
rs.getObject("created_at", Long.class),
579583
rs.getObject("updated_at", Long.class),

transact/src/test/java/dev/dbos/transact/workflow/ListWorkflowsTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -596,10 +596,10 @@ public void testLoadInputFalse() throws Exception {
596596
List<WorkflowStatus> wfs = DBOS.listWorkflows(new ListWorkflowsInput().withLoadInput(false));
597597
assertEquals(10, wfs.size());
598598

599-
// inputs column is not fetched; deserializePositionalArgs(null, ...) returns [] not null
599+
// inputs column is not fetched; input is null
600600
wfs.forEach(
601601
wf -> {
602-
assertNotNull(wf.input());
602+
assertNull(wf.input());
603603
});
604604

605605
// Core metadata fields must still be populated
@@ -650,10 +650,10 @@ public void testLoadInputAndOutputBothFalse() throws Exception {
650650

651651
assertEquals(10, wfs.size());
652652

653-
// Payload columns are not fetched; output/error are null, input deserializes to [] not null
653+
// Payload columns are not fetched; input/output/error are null
654654
wfs.forEach(
655655
wf -> {
656-
assertTrue(wf.input() == null || wf.input().length == 0);
656+
assertNull(wf.input());
657657
assertNull(wf.output());
658658
assertNull(wf.error());
659659
});

transact/src/test/java/dev/dbos/transact/workflow/WorkflowMgmtTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ interface MgmtService {
2626
int simpleWorkflow(int input) throws InterruptedException;
2727

2828
void stepTimingWorkflow() throws InterruptedException;
29+
30+
String helloWorkflow(String name);
2931
}
3032

3133
class MgmtServiceImpl implements MgmtService {
@@ -60,6 +62,11 @@ public void stepTimingWorkflow() throws InterruptedException {
6062
DBOS.listWorkflows(new ListWorkflowsInput());
6163
DBOS.recv(null, Duration.ofSeconds(1));
6264
}
65+
66+
@Workflow
67+
public String helloWorkflow(String name) {
68+
return "Hello, %s!".formatted(name);
69+
}
6370
}
6471

6572
@org.junit.jupiter.api.Timeout(value = 2, unit = java.util.concurrent.TimeUnit.MINUTES)
@@ -225,4 +232,42 @@ public void queuedCancelResumeTest() throws Exception {
225232

226233
assertEquals(WorkflowState.SUCCESS.name(), origHandle.getStatus().status());
227234
}
235+
236+
@Test
237+
public void testListWorkflowsDontLoadInputOutput() throws Exception {
238+
var handle = DBOS.startWorkflow(() -> proxy.helloWorkflow("Chuck"));
239+
assertEquals("Hello, Chuck!", handle.getResult());
240+
241+
var input =
242+
new ListWorkflowsInput()
243+
.withWorkflowId(handle.workflowId())
244+
.withLoadInput(false)
245+
.withLoadOutput(false);
246+
var workflows = DBOS.listWorkflows(input);
247+
assertEquals(1, workflows.size());
248+
var workflow = workflows.get(0);
249+
assertEquals(handle.workflowId(), workflow.workflowId());
250+
assertNull(workflow.input());
251+
assertNull(workflow.output());
252+
assertNull(workflow.error());
253+
assertNull(workflow.serialization());
254+
}
255+
256+
@Test
257+
public void testListWorkflowsLoadInputOutput() throws Exception {
258+
var handle = DBOS.startWorkflow(() -> proxy.helloWorkflow("Chuck"));
259+
assertEquals("Hello, Chuck!", handle.getResult());
260+
261+
// loadInput/loadOutput default to true
262+
var input = new ListWorkflowsInput().withWorkflowId(handle.workflowId());
263+
var workflows = DBOS.listWorkflows(input);
264+
assertEquals(1, workflows.size());
265+
var workflow = workflows.get(0);
266+
assertEquals(handle.workflowId(), workflow.workflowId());
267+
assertEquals(1, workflow.input().length);
268+
assertEquals("Chuck", workflow.input()[0]);
269+
assertEquals("Hello, Chuck!", workflow.output());
270+
assertNull(workflow.error());
271+
assertEquals("java_jackson", workflow.serialization());
272+
}
228273
}

0 commit comments

Comments
 (0)