@atolis-hq/wake 0.3.39 → 0.3.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -4,7 +4,7 @@ import { WorkflowStatus } from '../../orchestration/index.js';
|
|
|
4
4
|
import { WorkStatus } from '../../work/index.js';
|
|
5
5
|
import { ControlStreamKind } from '../contracts/streams.js';
|
|
6
6
|
import { DispatchPolicy } from '../domain/dispatch-policy.js';
|
|
7
|
-
import { findUnresolvedTerminal, isExecutionFailureTerminal } from './execution-reconciliation.js';
|
|
7
|
+
import { findUnresolvedSucceededTerminal, findUnresolvedTerminal, isExecutionFailureTerminal, } from './execution-reconciliation.js';
|
|
8
8
|
export function createAdvanceOnce(orchestration, execution, resources, clock, dependencies) {
|
|
9
9
|
const runnerIneligibility = dependencies.runnerIneligibility ?? (async () => new Set());
|
|
10
10
|
const isDispatchPaused = dependencies.isDispatchPaused ?? (async () => false);
|
|
@@ -84,7 +84,8 @@ export function createAdvanceOnce(orchestration, execution, resources, clock, de
|
|
|
84
84
|
(options.workItemId === undefined || workflow.workItemId === options.workItemId)
|
|
85
85
|
? [{ workflow, activation: workflow.pendingActivation }]
|
|
86
86
|
: []);
|
|
87
|
-
const recovery = await findUnresolvedTerminal(
|
|
87
|
+
const recovery = (await findUnresolvedTerminal(pending, execution)) ??
|
|
88
|
+
(await findUnresolvedSucceededTerminal(blocked, execution));
|
|
88
89
|
if (recovery !== undefined) {
|
|
89
90
|
if (await isDispatchPaused())
|
|
90
91
|
return { kind: 'paused' };
|
|
@@ -8,6 +8,14 @@ export async function findUnresolvedTerminal(pending, execution) {
|
|
|
8
8
|
}
|
|
9
9
|
return undefined;
|
|
10
10
|
}
|
|
11
|
+
export async function findUnresolvedSucceededTerminal(pending, execution) {
|
|
12
|
+
for (const item of pending) {
|
|
13
|
+
const run = (await execution.list(item.activation.activationId)).find((candidate) => candidate.status === RunStatus.Succeeded && candidate.outcome !== undefined);
|
|
14
|
+
if (run !== undefined && !item.workflow.acceptedOutcomes.includes(item.activation.activationId))
|
|
15
|
+
return { item, run };
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
11
19
|
export function isExecutionFailureTerminal(status) {
|
|
12
20
|
return (status === RunStatus.Failed || status === RunStatus.Cancelled || status === RunStatus.Ambiguous);
|
|
13
21
|
}
|