Skip to content

Commit 119a455

Browse files
authored
concord-server: fix updateWaitConditions when wait condition without processes (#994)
1 parent 3d8bbe4 commit 119a455

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

server/impl/src/main/java/com/walmartlabs/concord/server/process/ProcessResource.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,6 +1028,9 @@ public Response updateMetadata(@PathParam("id") UUID instanceId, Map<String, Obj
10281028
public Response setWaitCondition(@PathParam("id") UUID instanceId, Map<String, Object> waitCondition) {
10291029
ProcessKey processKey = assertProcessKey(instanceId);
10301030
AbstractWaitCondition condition = objectMapper.convertValue(waitCondition, AbstractWaitCondition.class);
1031+
if (condition == null) {
1032+
throw new ConcordApplicationException("Wait condition is required", Status.BAD_REQUEST);
1033+
}
10311034
processWaitManager.addWait(processKey, condition);
10321035
return Response.ok().build();
10331036
}

server/impl/src/main/java/com/walmartlabs/concord/server/process/waits/ProcessWaitWatchdog.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,10 @@ void processWaits(List<WaitingProcess> processes) {
158158

159159
try {
160160
boolean updated = processWaitManager.txResult(tx -> {
161-
boolean isWaiting = !resultWaits.isEmpty() && resumeEvents.isEmpty();
161+
// TODO: better way
162+
// Right now, we have only one result action, and it moves the process to enqueued status.
163+
// If the process moves to enqueued, it means it's no longer waiting for anything, so isWaiting should be false
164+
boolean isWaiting = !resultWaits.isEmpty() && resumeEvents.isEmpty() && resultActions.isEmpty();
162165
boolean up = processWaitManager.setWait(tx, p.processKey(), resultWaits, isWaiting, p.version());
163166
if (up) {
164167
resultActions.forEach(a -> a.execute(tx));

server/impl/src/main/java/com/walmartlabs/concord/server/process/waits/WaitConditionUpdater.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ private static void updateWaitConditions(DSLContext tx, ProcessKey processKey, P
4848
SET wait_conditions =
4949
(SELECT jsonb_agg(
5050
CASE
51-
WHEN obj->>'type' = 'PROCESS_COMPLETION' and obj->>'completeCondition' = 'ALL'
51+
WHEN obj->>'type' = 'PROCESS_COMPLETION' and obj->>'completeCondition' = 'ALL' and obj->>'processes' is not null
5252
THEN jsonb_set(obj, '{processes}', (obj->'processes') - ?)
53-
WHEN obj->>'type' = 'PROCESS_COMPLETION' and obj->>'completeCondition' = 'ONE_OF' and obj->'processes' ?? ?
53+
WHEN obj->>'type' = 'PROCESS_COMPLETION' and obj->>'completeCondition' = 'ONE_OF' and obj->>'processes' is not null and obj->'processes' ?? ?
5454
THEN jsonb_set(obj, '{processes}', '[]')
5555
ELSE obj
5656
END

0 commit comments

Comments
 (0)