@convex-dev/workpool 0.4.6 → 0.4.7-alpha.0
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.
- package/dist/component/_generated/api.d.ts +2 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/complete.d.ts.map +1 -1
- package/dist/component/complete.js +8 -7
- package/dist/component/complete.js.map +1 -1
- package/dist/component/danger.js +7 -7
- package/dist/component/danger.js.map +1 -1
- package/dist/component/future.d.ts +11 -0
- package/dist/component/future.d.ts.map +1 -0
- package/dist/component/future.js +21 -0
- package/dist/component/future.js.map +1 -0
- package/dist/component/kick.d.ts +3 -3
- package/dist/component/kick.d.ts.map +1 -1
- package/dist/component/kick.js +14 -16
- package/dist/component/kick.js.map +1 -1
- package/dist/component/lib.d.ts.map +1 -1
- package/dist/component/lib.js +13 -13
- package/dist/component/lib.js.map +1 -1
- package/dist/component/loop.d.ts +44 -1
- package/dist/component/loop.d.ts.map +1 -1
- package/dist/component/loop.js +171 -217
- package/dist/component/loop.js.map +1 -1
- package/dist/component/recovery.d.ts.map +1 -1
- package/dist/component/recovery.js +2 -2
- package/dist/component/recovery.js.map +1 -1
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +2 -1
- package/dist/component/schema.js.map +1 -1
- package/dist/component/worker.js +1 -1
- package/dist/component/worker.js.map +1 -1
- package/package.json +8 -12
- package/src/component/_generated/api.ts +2 -0
- package/src/component/complete.test.ts +13 -13
- package/src/component/complete.ts +13 -7
- package/src/component/danger.ts +7 -7
- package/src/component/future.ts +38 -0
- package/src/component/kick.test.ts +17 -20
- package/src/component/kick.ts +20 -17
- package/src/component/lib.test.ts +7 -7
- package/src/component/lib.ts +12 -15
- package/src/component/loop.test.ts +695 -1127
- package/src/component/loop.ts +212 -283
- package/src/component/recovery.test.ts +3 -3
- package/src/component/recovery.ts +5 -2
- package/src/component/schema.ts +2 -1
- package/src/component/stateMachine.test.ts +1246 -0
- package/src/component/stats.test.ts +4 -4
- package/src/component/worker.ts +1 -1
package/dist/component/loop.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { v } from "convex/values";
|
|
2
|
+
import { runSnapshotQuery } from "./future.js";
|
|
2
3
|
import { internal } from "./_generated/api.js";
|
|
3
|
-
import { internalMutation } from "./_generated/server.js";
|
|
4
|
+
import { internalMutation, internalQuery, } from "./_generated/server.js";
|
|
4
5
|
import { createLogger, DEFAULT_LOG_LEVEL, } from "./logging.js";
|
|
5
|
-
import { boundScheduledTime, DEFAULT_MAX_PARALLELISM, fromSegment, getCurrentSegment,
|
|
6
|
+
import { boundScheduledTime, DEFAULT_MAX_PARALLELISM, fromSegment, getCurrentSegment, max, min, toSegment, } from "./shared.js";
|
|
6
7
|
import { generateReport, recordCompleted, recordStarted } from "./stats.js";
|
|
7
8
|
const CANCELLATION_BATCH_SIZE = 64; // the only queue that can get unbounded.
|
|
8
9
|
const RECOVERY_BATCH_SIZE = 32;
|
|
@@ -13,7 +14,10 @@ const RECOVERY_THRESHOLD_MS = 5 * MINUTE; // attempt to recover jobs this old.
|
|
|
13
14
|
export const RECOVERY_PERIOD_SEGMENTS = toSegment(1 * MINUTE); // how often to check.
|
|
14
15
|
export const STATUS_COOLDOWN = 2 * SECOND;
|
|
15
16
|
export const COOLDOWN_CHECK_INTERVAL = 200 * MS;
|
|
16
|
-
|
|
17
|
+
// Buffer applied when querying with cursors. Transactions that started
|
|
18
|
+
// before ours may still be running and commit inserts at segments behind
|
|
19
|
+
// a previously advanced cursor — the buffer lets us pick those up.
|
|
20
|
+
const CURSOR_BUFFER_SEGMENTS = toSegment(30 * SECOND);
|
|
17
21
|
export const INITIAL_STATE = {
|
|
18
22
|
generation: 0n,
|
|
19
23
|
segmentCursors: { incoming: 0n, completion: 0n, cancelation: 0n },
|
|
@@ -28,10 +32,50 @@ export const INITIAL_STATE = {
|
|
|
28
32
|
},
|
|
29
33
|
running: [],
|
|
30
34
|
};
|
|
35
|
+
/**
|
|
36
|
+
* Single query that returns everything the main loop needs to process.
|
|
37
|
+
*/
|
|
38
|
+
export const getPending = internalQuery({
|
|
39
|
+
args: {
|
|
40
|
+
completionCursor: v.int64(),
|
|
41
|
+
cancelationCursor: v.int64(),
|
|
42
|
+
incomingCursor: v.int64(),
|
|
43
|
+
maxParallelism: v.number(),
|
|
44
|
+
runningCount: v.number(),
|
|
45
|
+
},
|
|
46
|
+
handler: async (ctx, { completionCursor, cancelationCursor, incomingCursor, maxParallelism, runningCount, }) => {
|
|
47
|
+
const completions = await ctx.db
|
|
48
|
+
.query("pendingCompletion")
|
|
49
|
+
.withIndex("segment", (q) => q.gte("segment", completionCursor))
|
|
50
|
+
.take(maxParallelism);
|
|
51
|
+
const cancelations = await ctx.db
|
|
52
|
+
.query("pendingCancelation")
|
|
53
|
+
.withIndex("segment", (q) => q.gte("segment", cancelationCursor))
|
|
54
|
+
.take(CANCELLATION_BATCH_SIZE);
|
|
55
|
+
// Available slots after we process this batch's completions, plus 1
|
|
56
|
+
// for the +1 trick (detect overflow vs. a future-scheduled retry).
|
|
57
|
+
const startLimit = Math.max(0, maxParallelism - runningCount + completions.length);
|
|
58
|
+
const excludedIds = [
|
|
59
|
+
...completions.map((c) => c.workId),
|
|
60
|
+
...cancelations.map((c) => c.workId),
|
|
61
|
+
];
|
|
62
|
+
const allStarts = startLimit === 0
|
|
63
|
+
? []
|
|
64
|
+
: await ctx.db
|
|
65
|
+
.query("pendingStart")
|
|
66
|
+
.withIndex("segment", (q) => q.gte("segment", incomingCursor))
|
|
67
|
+
// eslint-disable-next-line @convex-dev/no-filter-in-query
|
|
68
|
+
.filter((q) => q.and(...excludedIds.map((id) => q.neq(q.field("workId"), id))))
|
|
69
|
+
.take(startLimit + 1);
|
|
70
|
+
return { completions, cancelations, allStarts };
|
|
71
|
+
},
|
|
72
|
+
});
|
|
31
73
|
// There should only ever be at most one of these scheduled or running.
|
|
32
74
|
export const main = internalMutation({
|
|
33
|
-
|
|
34
|
-
|
|
75
|
+
// `segment` is kept for backwards compatibility with in-flight scheduled
|
|
76
|
+
// calls from before the upgrade — it's no longer used internally.
|
|
77
|
+
args: { generation: v.int64(), segment: v.optional(v.int64()) },
|
|
78
|
+
handler: async (ctx, { generation }) => {
|
|
35
79
|
// State will be modified and patched at the end of the function.
|
|
36
80
|
const state = await getOrCreateState(ctx);
|
|
37
81
|
if (generation !== state.generation) {
|
|
@@ -40,21 +84,34 @@ export const main = internalMutation({
|
|
|
40
84
|
state.generation++;
|
|
41
85
|
const runStatus = await getOrCreateRunningStatus(ctx);
|
|
42
86
|
if (runStatus.state.kind !== "running") {
|
|
43
|
-
await ctx.db.patch(runStatus._id, {
|
|
87
|
+
await ctx.db.patch("runStatus", runStatus._id, {
|
|
44
88
|
state: { kind: "running" },
|
|
45
89
|
});
|
|
46
90
|
}
|
|
47
91
|
const globals = await getGlobals(ctx);
|
|
48
92
|
const console = createLogger(globals.logLevel);
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
//
|
|
93
|
+
const segment = getCurrentSegment();
|
|
94
|
+
// Pass maxParallelism + runningCount so the query bounds each batch to
|
|
95
|
+
// what we can actually consume this iteration. Apply CURSOR_BUFFER_SEGMENTS
|
|
96
|
+
// so we still pick up out-of-order inserts that landed behind the cursor
|
|
97
|
+
// since our last scan.
|
|
98
|
+
const queryArgs = {
|
|
99
|
+
completionCursor: state.segmentCursors.completion - CURSOR_BUFFER_SEGMENTS,
|
|
100
|
+
cancelationCursor: state.segmentCursors.cancelation - CURSOR_BUFFER_SEGMENTS,
|
|
101
|
+
incomingCursor: state.segmentCursors.incoming - CURSOR_BUFFER_SEGMENTS,
|
|
102
|
+
maxParallelism: globals.maxParallelism,
|
|
103
|
+
runningCount: state.running.length,
|
|
104
|
+
};
|
|
105
|
+
// Snapshot read — no read dependency, no OCC conflicts.
|
|
106
|
+
console.time("[main] getPending");
|
|
107
|
+
const { allStarts, cancelations, completions } = await runSnapshotQuery(internal.loop.getPending, queryArgs);
|
|
108
|
+
const toStart = allStarts.filter((s) => s.segment <= segment);
|
|
109
|
+
console.timeEnd("[main] getPending");
|
|
52
110
|
console.time("[main] pendingCompletion");
|
|
53
|
-
const toCancel = await handleCompletions(ctx, state,
|
|
111
|
+
const toCancel = await handleCompletions(ctx, state, completions, console);
|
|
54
112
|
console.timeEnd("[main] pendingCompletion");
|
|
55
|
-
// Read pendingCancelation, deleting from pendingStart. If it's still running, queue to cancel.
|
|
56
113
|
console.time("[main] pendingCancelation");
|
|
57
|
-
await handleCancelation(ctx, state,
|
|
114
|
+
await handleCancelation(ctx, state, cancelations, console, toCancel);
|
|
58
115
|
console.timeEnd("[main] pendingCancelation");
|
|
59
116
|
if (state.running.length === 0) {
|
|
60
117
|
// If there's nothing active, reset lastRecovery.
|
|
@@ -65,9 +122,13 @@ export const main = internalMutation({
|
|
|
65
122
|
await handleRecovery(ctx, state, console);
|
|
66
123
|
state.lastRecovery = segment;
|
|
67
124
|
}
|
|
68
|
-
//
|
|
125
|
+
// ── Start new work ──
|
|
126
|
+
// Slice to actual available capacity (completions may have freed slots).
|
|
127
|
+
// Guard against negative numbers in case running.length > maxParallelism.
|
|
128
|
+
const actualCapacity = globals.maxParallelism - state.running.length;
|
|
129
|
+
const pending = actualCapacity > 0 ? toStart.slice(0, actualCapacity) : [];
|
|
69
130
|
console.time("[main] pendingStart");
|
|
70
|
-
await handleStart(ctx, state,
|
|
131
|
+
await handleStart(ctx, state, pending, console, globals);
|
|
71
132
|
console.timeEnd("[main] pendingStart");
|
|
72
133
|
if (Date.now() - state.report.lastReportTs >= MINUTE) {
|
|
73
134
|
// If minute rollover since last report, log report.
|
|
@@ -87,197 +148,100 @@ export const main = internalMutation({
|
|
|
87
148
|
lastReportTs,
|
|
88
149
|
};
|
|
89
150
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (generation !== state.generation) {
|
|
106
|
-
throw new Error(`generation mismatch: ${generation} !== ${state.generation}`);
|
|
151
|
+
// Advance cursors to skip tombstones on next scan. Only do this when
|
|
152
|
+
// we actually did work — the cursor doubles as the cooldown signal
|
|
153
|
+
// ("how long since we last processed something").
|
|
154
|
+
const didWork = completions.length > 0 || cancelations.length > 0 || pending.length > 0;
|
|
155
|
+
if (didWork) {
|
|
156
|
+
state.segmentCursors.completion = completions.at(-1)?.segment ?? segment;
|
|
157
|
+
state.segmentCursors.cancelation =
|
|
158
|
+
cancelations.at(-1)?.segment ?? segment;
|
|
159
|
+
if (pending.length > 0) {
|
|
160
|
+
state.segmentCursors.incoming = pending.at(-1).segment;
|
|
161
|
+
}
|
|
162
|
+
else if (actualCapacity > 0) {
|
|
163
|
+
// We have no more pending work, update to now
|
|
164
|
+
state.segmentCursors.incoming = segment;
|
|
165
|
+
}
|
|
107
166
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
});
|
|
113
|
-
console.timeEnd("[updateRunStatus] outstandingCancelations");
|
|
114
|
-
if (outstandingCancelations) {
|
|
167
|
+
await ctx.db.replace("internalState", state._id, state);
|
|
168
|
+
// ── Schedule next iteration ──
|
|
169
|
+
if (didWork) {
|
|
170
|
+
// More work might have arrived while we were processing. Check again.
|
|
115
171
|
await ctx.scheduler.runAfter(0, internal.loop.main, {
|
|
116
|
-
generation,
|
|
117
|
-
segment,
|
|
172
|
+
generation: state.generation,
|
|
118
173
|
});
|
|
119
174
|
return;
|
|
120
175
|
}
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
console.time("[updateRunStatus] oldSegmentIsActionable");
|
|
134
|
-
const [oldIsActionable, cursors] = await oldSegmentIsActionable(ctx, state, maxParallelism);
|
|
135
|
-
console.timeEnd("[updateRunStatus] oldSegmentIsActionable");
|
|
136
|
-
if (oldIsActionable) {
|
|
137
|
-
await ctx.db.patch(state._id, {
|
|
138
|
-
segmentCursors: {
|
|
139
|
-
...state.segmentCursors,
|
|
140
|
-
...cursors,
|
|
141
|
-
},
|
|
142
|
-
});
|
|
176
|
+
// Nothing found in snapshot. Re-read with a real dependency (same args
|
|
177
|
+
// for cache-hit efficiency) so a concurrent insert forces an OCC retry.
|
|
178
|
+
console.debug("[main] no work — confirming with read dependency");
|
|
179
|
+
const confirm = await ctx.runQuery(internal.loop.getPending, queryArgs);
|
|
180
|
+
const confirmStarts = confirm.allStarts;
|
|
181
|
+
const confirmStartsNow = confirmStarts.filter((s) => s.segment <= segment);
|
|
182
|
+
const confirmFuture = confirmStarts.find((s) => s.segment > segment);
|
|
183
|
+
if (confirm.completions.length > 0 ||
|
|
184
|
+
confirm.cancelations.length > 0 ||
|
|
185
|
+
confirmStartsNow.length > 0) {
|
|
143
186
|
await ctx.scheduler.runAfter(0, internal.loop.main, {
|
|
144
|
-
generation,
|
|
145
|
-
segment: getCurrentSegment(),
|
|
187
|
+
generation: state.generation,
|
|
146
188
|
});
|
|
147
189
|
return;
|
|
148
190
|
}
|
|
149
|
-
// Cooldown: if any cursor was active within
|
|
191
|
+
// Cooldown: if any cursor was active within STATUS_COOLDOWN, stay running.
|
|
150
192
|
const { incoming, completion, cancelation } = state.segmentCursors;
|
|
151
193
|
const latestCursor = fromSegment(max(incoming, max(completion, cancelation)));
|
|
152
194
|
if (Date.now() - latestCursor < STATUS_COOLDOWN) {
|
|
153
195
|
const remaining = STATUS_COOLDOWN - (Date.now() - latestCursor);
|
|
154
|
-
console.debug(`[
|
|
155
|
-
|
|
156
|
-
const checkSegment = toSegment(checkAt);
|
|
157
|
-
await ctx.scheduler.runAt(boundScheduledTime(checkAt, console), internal.loop.updateRunStatus, { generation, segment: checkSegment });
|
|
196
|
+
console.debug(`[main] cooldown: ${remaining}ms remaining, checking again in ${COOLDOWN_CHECK_INTERVAL}ms`);
|
|
197
|
+
await ctx.scheduler.runAt(Date.now() + COOLDOWN_CHECK_INTERVAL, internal.loop.main, { generation: state.generation });
|
|
158
198
|
return;
|
|
159
199
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (state.running.length < maxParallelism) {
|
|
164
|
-
actionableTables.push("pendingStart");
|
|
165
|
-
}
|
|
166
|
-
const docs = await Promise.all(actionableTables.map(async (tableName) => getNextUp(ctx, tableName, { start: nextSegment })));
|
|
167
|
-
console.timeEnd("[updateRunStatus] findNextSegment");
|
|
168
|
-
let targetSegment = docs.map((d) => d?.segment).sort()[0];
|
|
169
|
-
const runStatus = await getOrCreateRunningStatus(ctx);
|
|
170
|
-
const saturated = state.running.length >= maxParallelism;
|
|
171
|
-
if (targetSegment !== undefined || state.running.length > 0) {
|
|
172
|
-
// If there's something to do, schedule for next actionable segment.
|
|
173
|
-
// Or the next recovery, whichever comes first.
|
|
200
|
+
if (state.running.length > 0 || confirmFuture) {
|
|
201
|
+
// Jobs are running and/or there's future-scheduled work.
|
|
202
|
+
// Schedule for the future start or next recovery, whichever is sooner.
|
|
174
203
|
const nextRecoverySegment = state.lastRecovery + RECOVERY_PERIOD_SEGMENTS;
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
const scheduledId = await ctx.scheduler.runAt(boundScheduledTime(fromSegment(
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
console.debug(`[updateRunStatus] staying running because it's the next segment`);
|
|
192
|
-
}
|
|
204
|
+
const target = confirmFuture
|
|
205
|
+
? min(confirmFuture.segment, nextRecoverySegment)
|
|
206
|
+
: nextRecoverySegment;
|
|
207
|
+
const scheduledId = await ctx.scheduler.runAt(boundScheduledTime(fromSegment(target), console), internal.loop.main, { generation: state.generation });
|
|
208
|
+
await ctx.db.patch("runStatus", runStatus._id, {
|
|
209
|
+
state: {
|
|
210
|
+
kind: "scheduled",
|
|
211
|
+
scheduledId,
|
|
212
|
+
saturated: state.running.length >= globals.maxParallelism,
|
|
213
|
+
generation: state.generation,
|
|
214
|
+
segment: target,
|
|
215
|
+
},
|
|
216
|
+
});
|
|
193
217
|
return;
|
|
194
218
|
}
|
|
195
|
-
//
|
|
196
|
-
await ctx.db.patch(runStatus._id, {
|
|
197
|
-
state: { kind: "idle", generation },
|
|
219
|
+
// Nothing to do — go idle.
|
|
220
|
+
await ctx.db.patch("runStatus", runStatus._id, {
|
|
221
|
+
state: { kind: "idle", generation: state.generation },
|
|
198
222
|
});
|
|
199
223
|
},
|
|
200
224
|
});
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
end,
|
|
212
|
-
})) {
|
|
213
|
-
return true;
|
|
214
|
-
}
|
|
215
|
-
if (state.running.length < maxParallelism) {
|
|
216
|
-
if (await getNextUp(ctx, "pendingStart", {
|
|
217
|
-
start: state.segmentCursors.incoming,
|
|
218
|
-
end,
|
|
219
|
-
})) {
|
|
220
|
-
return true;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
async function oldSegmentIsActionable(ctx, state, maxParallelism) {
|
|
226
|
-
// Next, we look for out-of-order additions we may have missed.
|
|
227
|
-
const oldCompletion = await getNextUp(ctx, "pendingCompletion", {
|
|
228
|
-
end: state.segmentCursors.completion,
|
|
229
|
-
});
|
|
230
|
-
if (oldCompletion) {
|
|
231
|
-
return [true, { completion: oldCompletion.segment }];
|
|
232
|
-
}
|
|
233
|
-
const oldCancelation = await getNextUp(ctx, "pendingCancelation", {
|
|
234
|
-
end: state.segmentCursors.cancelation,
|
|
235
|
-
});
|
|
236
|
-
if (oldCancelation) {
|
|
237
|
-
return [true, { cancelation: oldCancelation.segment }];
|
|
238
|
-
}
|
|
239
|
-
if (state.running.length < maxParallelism) {
|
|
240
|
-
const oldStart = await getNextUp(ctx, "pendingStart", {
|
|
241
|
-
end: state.segmentCursors.incoming,
|
|
242
|
-
});
|
|
243
|
-
if (oldStart) {
|
|
244
|
-
return [true, { incoming: oldStart.segment }];
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
return [false, {}];
|
|
248
|
-
}
|
|
249
|
-
// Fetch the next item. If only one of start & end are provided, it's exclusive.
|
|
250
|
-
async function getNextUp(ctx, table, range) {
|
|
251
|
-
return ctx.db
|
|
252
|
-
.query(table)
|
|
253
|
-
.withIndex("segment", (q) => range.start !== undefined
|
|
254
|
-
? range.end !== undefined
|
|
255
|
-
? q
|
|
256
|
-
.gte("segment", range.start - CURSOR_BUFFER_SEGMENTS)
|
|
257
|
-
.lte("segment", range.end)
|
|
258
|
-
: q.gt("segment", range.start - CURSOR_BUFFER_SEGMENTS)
|
|
259
|
-
: range.end !== undefined
|
|
260
|
-
? q.lt("segment", range.end)
|
|
261
|
-
: q)
|
|
262
|
-
.first();
|
|
263
|
-
}
|
|
225
|
+
/**
|
|
226
|
+
* @deprecated Forwarder for in-flight scheduled calls from before the
|
|
227
|
+
* upgrade. The scheduling logic has been merged into `main`.
|
|
228
|
+
*/
|
|
229
|
+
export const updateRunStatus = internalMutation({
|
|
230
|
+
args: { generation: v.int64(), segment: v.int64() },
|
|
231
|
+
handler: async (ctx, { generation }) => {
|
|
232
|
+
await ctx.scheduler.runAfter(0, internal.loop.main, { generation });
|
|
233
|
+
},
|
|
234
|
+
});
|
|
264
235
|
/**
|
|
265
236
|
* Handles the completion of pending completions.
|
|
266
237
|
* This only processes work that succeeded or failed, not canceled.
|
|
238
|
+
* Accepts pre-fetched completion docs (from snapshot query).
|
|
267
239
|
*/
|
|
268
|
-
async function handleCompletions(ctx, state,
|
|
269
|
-
const startSegment = state.segmentCursors.completion - CURSOR_BUFFER_SEGMENTS;
|
|
270
|
-
// This won't be too many because the jobs all correspond to being scheduled
|
|
271
|
-
// by a single main (the previous one), so they're limited by MAX_PARALLELISM.
|
|
272
|
-
const completed = await ctx.db
|
|
273
|
-
.query("pendingCompletion")
|
|
274
|
-
.withIndex("segment", (q) => q.gte("segment", startSegment).lte("segment", segment))
|
|
275
|
-
.collect();
|
|
276
|
-
state.segmentCursors.completion = segment;
|
|
240
|
+
async function handleCompletions(ctx, state, completed, console) {
|
|
277
241
|
// Completions that were going to be retried but have since been canceled.
|
|
278
242
|
const toCancel = [];
|
|
279
243
|
await Promise.all(completed.map(async (c) => {
|
|
280
|
-
await ctx.db.delete(c._id);
|
|
244
|
+
await ctx.db.delete("pendingCompletion", c._id);
|
|
281
245
|
const running = state.running.find((r) => r.workId === c.workId);
|
|
282
246
|
if (!running) {
|
|
283
247
|
console.error(`[main] completing ${c.workId} but it's not in "running"`);
|
|
@@ -285,7 +249,7 @@ async function handleCompletions(ctx, state, segment, console) {
|
|
|
285
249
|
}
|
|
286
250
|
if (c.retry) {
|
|
287
251
|
// Only check for work if it's going to be retried.
|
|
288
|
-
const work = await ctx.db.get(c.workId);
|
|
252
|
+
const work = await ctx.db.get("work", c.workId);
|
|
289
253
|
if (!work) {
|
|
290
254
|
console.warn(`[main] ${c.workId} is gone, but trying to complete`);
|
|
291
255
|
return;
|
|
@@ -322,32 +286,29 @@ async function handleCompletions(ctx, state, segment, console) {
|
|
|
322
286
|
console.debug(`[main] completed ${numCompleted} work`);
|
|
323
287
|
return toCancel;
|
|
324
288
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
.withIndex("segment", (q) => q.gte("segment", start).lte("segment", segment))
|
|
330
|
-
.take(CANCELLATION_BATCH_SIZE);
|
|
331
|
-
state.segmentCursors.cancelation = canceled.at(-1)?.segment ?? segment;
|
|
289
|
+
/**
|
|
290
|
+
* Handles cancelation. Accepts pre-fetched cancelation docs.
|
|
291
|
+
*/
|
|
292
|
+
async function handleCancelation(ctx, state, canceled, console, toCancel) {
|
|
332
293
|
if (canceled.length) {
|
|
333
294
|
console.debug(`[main] attempting to cancel ${canceled.length}`);
|
|
334
295
|
}
|
|
335
296
|
const canceledWork = new Set();
|
|
336
297
|
const runResult = { kind: "canceled" };
|
|
337
|
-
const jobs = toCancel.concat(...(await Promise.all(canceled.map(async ({ _id,
|
|
338
|
-
await ctx.db.delete(_id);
|
|
298
|
+
const jobs = toCancel.concat(...(await Promise.all(canceled.map(async ({ _id, workId }) => {
|
|
299
|
+
await ctx.db.delete("pendingCancelation", _id);
|
|
339
300
|
if (canceledWork.has(workId)) {
|
|
340
301
|
// We shouldn't have multiple pending cancelations for the same work.
|
|
341
302
|
console.error(`[main] ${workId} already canceled`);
|
|
342
303
|
return null;
|
|
343
304
|
}
|
|
344
|
-
const work = await ctx.db.get(workId);
|
|
305
|
+
const work = await ctx.db.get("work", workId);
|
|
345
306
|
if (!work) {
|
|
346
307
|
console.warn(`[main] ${workId} is gone, but trying to cancel`);
|
|
347
308
|
return null;
|
|
348
309
|
}
|
|
349
310
|
// Ensure it doesn't retry.
|
|
350
|
-
await ctx.db.patch(workId, { canceled: true });
|
|
311
|
+
await ctx.db.patch("work", workId, { canceled: true });
|
|
351
312
|
// Ensure it doesn't start.
|
|
352
313
|
const pendingStart = await ctx.db
|
|
353
314
|
.query("pendingStart")
|
|
@@ -355,7 +316,7 @@ async function handleCancelation(ctx, state, segment, console, toCancel) {
|
|
|
355
316
|
.unique();
|
|
356
317
|
if (pendingStart && !canceledWork.has(workId)) {
|
|
357
318
|
state.report.canceled++;
|
|
358
|
-
await ctx.db.delete(pendingStart._id);
|
|
319
|
+
await ctx.db.delete("pendingStart", pendingStart._id);
|
|
359
320
|
canceledWork.add(workId);
|
|
360
321
|
return { workId, runResult, attempt: work.attempts };
|
|
361
322
|
}
|
|
@@ -372,10 +333,19 @@ async function handleRecovery(ctx, state, console) {
|
|
|
372
333
|
if (r.started >= oldEnoughToConsider) {
|
|
373
334
|
return null;
|
|
374
335
|
}
|
|
375
|
-
const work = await ctx.db.get(r.workId);
|
|
336
|
+
const work = await ctx.db.get("work", r.workId);
|
|
376
337
|
if (!work) {
|
|
377
|
-
|
|
378
|
-
|
|
338
|
+
const pendingCompletion = await ctx.db
|
|
339
|
+
.query("pendingCompletion")
|
|
340
|
+
.withIndex("workId", (q) => q.eq("workId", r.workId))
|
|
341
|
+
.first();
|
|
342
|
+
if (!pendingCompletion) {
|
|
343
|
+
missing.add(r.workId);
|
|
344
|
+
console.error(`[main] ${r.workId} already gone (skipping recovery)`);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
console.debug(`[main] ${r.workId} already gone but has pendingCompletion`);
|
|
348
|
+
}
|
|
379
349
|
return null;
|
|
380
350
|
}
|
|
381
351
|
return { ...r, attempt: work.attempts };
|
|
@@ -386,26 +356,10 @@ async function handleRecovery(ctx, state, console) {
|
|
|
386
356
|
await ctx.scheduler.runAfter(0, internal.recovery.recover, { jobs: batch });
|
|
387
357
|
}
|
|
388
358
|
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
? await ctx.db
|
|
394
|
-
.query("pendingStart")
|
|
395
|
-
.withIndex("segment", (q) => q
|
|
396
|
-
.gte("segment", state.segmentCursors.incoming - CURSOR_BUFFER_SEGMENTS)
|
|
397
|
-
.lte("segment", segment))
|
|
398
|
-
.take(toSchedule)
|
|
399
|
-
: [];
|
|
400
|
-
if (pending) {
|
|
401
|
-
if (pending.length > 0) {
|
|
402
|
-
state.segmentCursors.incoming = pending.at(-1).segment;
|
|
403
|
-
}
|
|
404
|
-
else if (toSchedule > 0) {
|
|
405
|
-
// We have no more pending work, update to now
|
|
406
|
-
state.segmentCursors.incoming = segment;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
359
|
+
/**
|
|
360
|
+
* Starts pending work. Accepts pre-fetched pendingStart docs.
|
|
361
|
+
*/
|
|
362
|
+
async function handleStart(ctx, state, pending, console, { logLevel }) {
|
|
409
363
|
console.debug(`[main] scheduling ${pending.length} pending work`);
|
|
410
364
|
// Start new work.
|
|
411
365
|
state.running.push(...(await Promise.all(pending.map(async ({ _id, workId, segment }) => {
|
|
@@ -415,7 +369,7 @@ async function handleStart(ctx, state, segment, console, { maxParallelism, logLe
|
|
|
415
369
|
}
|
|
416
370
|
const lagMs = Date.now() - fromSegment(segment);
|
|
417
371
|
const scheduledId = await beginWork(ctx, workId, logLevel, lagMs);
|
|
418
|
-
await ctx.db.delete(_id);
|
|
372
|
+
await ctx.db.delete("pendingStart", _id);
|
|
419
373
|
if (!scheduledId)
|
|
420
374
|
return null;
|
|
421
375
|
return { scheduledId, workId, started: Date.now() };
|
|
@@ -423,7 +377,7 @@ async function handleStart(ctx, state, segment, console, { maxParallelism, logLe
|
|
|
423
377
|
}
|
|
424
378
|
async function beginWork(ctx, workId, logLevel, lagMs) {
|
|
425
379
|
const console = createLogger(logLevel);
|
|
426
|
-
const work = await ctx.db.get(workId);
|
|
380
|
+
const work = await ctx.db.get("work", workId);
|
|
427
381
|
if (!work) {
|
|
428
382
|
console.error(`Trying to start, but work not found: ${workId}`);
|
|
429
383
|
return null;
|
|
@@ -508,7 +462,7 @@ async function getOrCreateState(ctx) {
|
|
|
508
462
|
const globals = await getGlobals(ctx);
|
|
509
463
|
const console = createLogger(globals.logLevel);
|
|
510
464
|
console.error("No internalState in running loop! Re-creating empty one...");
|
|
511
|
-
return (await ctx.db.get(await ctx.db.insert("internalState", INITIAL_STATE)));
|
|
465
|
+
return (await ctx.db.get("internalState", await ctx.db.insert("internalState", INITIAL_STATE)));
|
|
512
466
|
}
|
|
513
467
|
async function getOrCreateRunningStatus(ctx) {
|
|
514
468
|
const runStatus = await ctx.db.query("runStatus").unique();
|
|
@@ -517,7 +471,7 @@ async function getOrCreateRunningStatus(ctx) {
|
|
|
517
471
|
const globals = await getGlobals(ctx);
|
|
518
472
|
const console = createLogger(globals.logLevel);
|
|
519
473
|
console.error("No runStatus in running loop! Re-creating one...");
|
|
520
|
-
return (await ctx.db.get(await ctx.db.insert("runStatus", { state: { kind: "running" } })));
|
|
474
|
+
return (await ctx.db.get("runStatus", await ctx.db.insert("runStatus", { state: { kind: "running" } })));
|
|
521
475
|
}
|
|
522
476
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
523
477
|
const console = "THIS IS A REMINDER TO USE createLogger";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/component/loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/component/loop.ts"],"names":[],"mappings":"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"}
|