@convex-dev/workpool 0.2.0 → 0.2.1
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/README.md +81 -3
- package/dist/commonjs/client/index.d.ts +30 -5
- package/dist/commonjs/client/index.d.ts.map +1 -1
- package/dist/commonjs/client/index.js +27 -2
- package/dist/commonjs/client/index.js.map +1 -1
- package/dist/commonjs/component/complete.d.ts.map +1 -1
- package/dist/commonjs/component/complete.js +9 -7
- package/dist/commonjs/component/complete.js.map +1 -1
- package/dist/commonjs/component/kick.d.ts +3 -2
- package/dist/commonjs/component/kick.d.ts.map +1 -1
- package/dist/commonjs/component/kick.js +12 -9
- package/dist/commonjs/component/kick.js.map +1 -1
- package/dist/commonjs/component/lib.d.ts +3 -3
- package/dist/commonjs/component/lib.d.ts.map +1 -1
- package/dist/commonjs/component/lib.js +25 -19
- package/dist/commonjs/component/lib.js.map +1 -1
- package/dist/commonjs/component/logging.d.ts +3 -2
- package/dist/commonjs/component/logging.d.ts.map +1 -1
- package/dist/commonjs/component/logging.js +34 -15
- package/dist/commonjs/component/logging.js.map +1 -1
- package/dist/commonjs/component/loop.js +10 -10
- package/dist/commonjs/component/loop.js.map +1 -1
- package/dist/commonjs/component/recovery.d.ts +29 -0
- package/dist/commonjs/component/recovery.d.ts.map +1 -1
- package/dist/commonjs/component/recovery.js +69 -66
- package/dist/commonjs/component/recovery.js.map +1 -1
- package/dist/commonjs/component/schema.d.ts +11 -11
- package/dist/commonjs/component/shared.d.ts +4 -4
- package/dist/commonjs/component/shared.d.ts.map +1 -1
- package/dist/commonjs/component/shared.js +2 -2
- package/dist/commonjs/component/shared.js.map +1 -1
- package/dist/commonjs/component/stats.d.ts +20 -21
- package/dist/commonjs/component/stats.d.ts.map +1 -1
- package/dist/commonjs/component/stats.js +86 -38
- package/dist/commonjs/component/stats.js.map +1 -1
- package/dist/commonjs/component/worker.d.ts +2 -2
- package/dist/esm/client/index.d.ts +30 -5
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +27 -2
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/component/complete.d.ts.map +1 -1
- package/dist/esm/component/complete.js +9 -7
- package/dist/esm/component/complete.js.map +1 -1
- package/dist/esm/component/kick.d.ts +3 -2
- package/dist/esm/component/kick.d.ts.map +1 -1
- package/dist/esm/component/kick.js +12 -9
- package/dist/esm/component/kick.js.map +1 -1
- package/dist/esm/component/lib.d.ts +3 -3
- package/dist/esm/component/lib.d.ts.map +1 -1
- package/dist/esm/component/lib.js +25 -19
- package/dist/esm/component/lib.js.map +1 -1
- package/dist/esm/component/logging.d.ts +3 -2
- package/dist/esm/component/logging.d.ts.map +1 -1
- package/dist/esm/component/logging.js +34 -15
- package/dist/esm/component/logging.js.map +1 -1
- package/dist/esm/component/loop.js +10 -10
- package/dist/esm/component/loop.js.map +1 -1
- package/dist/esm/component/recovery.d.ts +29 -0
- package/dist/esm/component/recovery.d.ts.map +1 -1
- package/dist/esm/component/recovery.js +69 -66
- package/dist/esm/component/recovery.js.map +1 -1
- package/dist/esm/component/schema.d.ts +11 -11
- package/dist/esm/component/shared.d.ts +4 -4
- package/dist/esm/component/shared.d.ts.map +1 -1
- package/dist/esm/component/shared.js +2 -2
- package/dist/esm/component/shared.js.map +1 -1
- package/dist/esm/component/stats.d.ts +20 -21
- package/dist/esm/component/stats.d.ts.map +1 -1
- package/dist/esm/component/stats.js +86 -38
- package/dist/esm/component/stats.js.map +1 -1
- package/dist/esm/component/worker.d.ts +2 -2
- package/package.json +6 -7
- package/src/client/index.ts +64 -35
- package/src/component/_generated/api.d.ts +6 -6
- package/src/component/complete.ts +18 -7
- package/src/component/kick.test.ts +17 -7
- package/src/component/kick.ts +14 -11
- package/src/component/lib.ts +33 -26
- package/src/component/logging.test.ts +16 -0
- package/src/component/logging.ts +45 -23
- package/src/component/loop.test.ts +12 -12
- package/src/component/loop.ts +11 -11
- package/src/component/recovery.test.ts +6 -11
- package/src/component/recovery.ts +77 -69
- package/src/component/shared.ts +2 -2
- package/src/component/stats.test.ts +345 -0
- package/src/component/stats.ts +111 -41
package/README.md
CHANGED
|
@@ -263,8 +263,8 @@ The retry options work like this:
|
|
|
263
263
|
- If it fails, it will wait _around_ `initialBackoffMs` and then try again.
|
|
264
264
|
- Each subsequent retry waits `initialBackoffMs * base^<retryNumber - 1>`.
|
|
265
265
|
- The standard base is 2.
|
|
266
|
-
- The actual wait time uses "jitter" to avoid all retries happening at once
|
|
267
|
-
if they all
|
|
266
|
+
- The actual wait time uses "jitter" to avoid all retries happening at once
|
|
267
|
+
if they all fail at the same time.
|
|
268
268
|
|
|
269
269
|
You can override the retry behavior per-call with the `retry` option.
|
|
270
270
|
|
|
@@ -307,6 +307,10 @@ The status will be one of:
|
|
|
307
307
|
- `{ kind: "running"; previousAttempts: number }`: The function is currently running.
|
|
308
308
|
- `{ kind: "finished" }`: The function has succeeded, failed, or been canceled.
|
|
309
309
|
|
|
310
|
+
To get the result of your function, you can either write to the database from
|
|
311
|
+
within your function, call or schedule another function from there, or use the
|
|
312
|
+
`onComplete` handler to respond to the job result.
|
|
313
|
+
|
|
310
314
|
## Canceling work
|
|
311
315
|
|
|
312
316
|
You can cancel work by calling `pool.cancel(id)` or all of them with
|
|
@@ -314,8 +318,82 @@ You can cancel work by calling `pool.cancel(id)` or all of them with
|
|
|
314
318
|
|
|
315
319
|
This will avoid starting or retrying, but will not stop in-progress work.
|
|
316
320
|
|
|
317
|
-
|
|
321
|
+
## Monitoring the workpool
|
|
322
|
+
|
|
323
|
+
If you want to know the status of your workpool, here are some queries to use
|
|
324
|
+
for [Axiom](https://axiom.co/docs/send-data/convex).
|
|
325
|
+
Just replace `your-dataset` with your dataset's name (which is also
|
|
326
|
+
what you enter in the log streaming configuration in the Convex dashboard).
|
|
327
|
+
|
|
328
|
+
Note: these are optimized for monitors. For dashboards, you might want to change
|
|
329
|
+
`bin(_time, X)` to `bin_auto(_time)`.
|
|
330
|
+
|
|
331
|
+
### Is it backlogged
|
|
318
332
|
|
|
333
|
+
Reports the current backlog length, where "backlog" is tasks that are past due,
|
|
334
|
+
not including tasks that have been scheduled for the future. This reports the
|
|
335
|
+
max for 1 minute intervals (which is roughly how often the report is generated).
|
|
336
|
+
|
|
337
|
+
```txt
|
|
338
|
+
['your-dataset']
|
|
339
|
+
| extend parsed_message = iff(isnotnull(parse_json(trim("'", tostring(["data.message"])))),
|
|
340
|
+
parse_json(trim("'", tostring(["data.message"]))),
|
|
341
|
+
parse_json('{}') )
|
|
342
|
+
| where parsed_message["component"] == "workpool" and parsed_message["event"] == "report"
|
|
343
|
+
| summarize max_backlog = max(toint(parsed_message["backlog"]))
|
|
344
|
+
by bin(_time, 1m), workpool = tostring(["data.function.component_path"])
|
|
319
345
|
```
|
|
320
346
|
|
|
347
|
+
### Are functions failing (after retries)
|
|
348
|
+
|
|
349
|
+
Reports the overall average failure rate per registered workpool in 5 minute intervals.
|
|
350
|
+
|
|
351
|
+
```txt
|
|
352
|
+
['your-dataset']
|
|
353
|
+
| extend parsed_message = iff(isnotnull(parse_json(trim("'", tostring(["data.message"])))),
|
|
354
|
+
parse_json(trim("'", tostring(["data.message"]))),
|
|
355
|
+
parse_json('{}') )
|
|
356
|
+
| where parsed_message["component"] == "workpool" and parsed_message["event"] == "report"
|
|
357
|
+
| extend permanentFailureRate = parsed_message["permanentFailureRate"]
|
|
358
|
+
| summarize avg(todouble(permanentFailureRate))
|
|
359
|
+
by bin(\_time, 5m), workpool = tostring(["data.function.component_path"])
|
|
321
360
|
```
|
|
361
|
+
|
|
362
|
+
### Are functions retrying a lot
|
|
363
|
+
|
|
364
|
+
Reports the ratio (0 to 1) of failures per function, in 5 minute intervals.
|
|
365
|
+
Note: to get this data, set the workpool `logLevel` to `"INFO"` (or `"DEBUG"`).
|
|
366
|
+
|
|
367
|
+
```txt
|
|
368
|
+
['your-dataset']
|
|
369
|
+
| extend parsed_message = iff( isnotnull(parse_json(trim("'", tostring(["data.message"])))),
|
|
370
|
+
parse_json(trim("'", tostring(["data.message"]))),
|
|
371
|
+
parse_json('{}') )
|
|
372
|
+
| where parsed_message["component"] == "workpool" and (parsed_message["event"] == "completed") and parsed_message["status"] != "canceled"
|
|
373
|
+
| summarize failure_ratio = avg(iff(parsed_message["status"] != "success", 1, 0))
|
|
374
|
+
by bin(_time, 5m), function = tostring(parsed_message["fnName"])
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Is there a big delay between being enqueued and starting
|
|
378
|
+
|
|
379
|
+
Reports the average time between enqueueing work and it actually starting.
|
|
380
|
+
Note: to get this data, set the workpool `logLevel` to `"INFO"` (or `"DEBUG"`).
|
|
381
|
+
|
|
382
|
+
```txt
|
|
383
|
+
['your-dataset']
|
|
384
|
+
| extend parsed_message = iff(isnotnull(parse_json(trim("'", tostring(["data.message"])))),
|
|
385
|
+
parse_json(trim("'", tostring(["data.message"]))),
|
|
386
|
+
parse_json('{}') )
|
|
387
|
+
| where parsed_message["component"] == "workpool" and parsed_message["event"] == "started"
|
|
388
|
+
| summarize start_lag_seconds = avg(todouble(parsed_message["startLag"])/1000)
|
|
389
|
+
by bin(_time, 1m), function = tostring(parsed_message["fnName"])
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
While similar to the backlog size, this is a more concrete value, since the
|
|
393
|
+
events in the backlog may take variable amounts of time. This is a more user-
|
|
394
|
+
visible metric, though it is a "lagging" indicator - this will be high when the
|
|
395
|
+
backlog was large enough to delay the processing of an entry. So alerting on
|
|
396
|
+
the backlog size will give you a faster indicator, while this is a metric of the
|
|
397
|
+
severity of the incident.
|
|
398
|
+
|
|
399
|
+
<!-- END: Include on https://convex.dev/components -->
|
|
@@ -32,17 +32,20 @@ export declare class Workpool {
|
|
|
32
32
|
maxParallelism?: number;
|
|
33
33
|
/** How much to log. This is updated on each call to `enqueue*`,
|
|
34
34
|
* `status`, or `cancel*`.
|
|
35
|
-
* Default is
|
|
36
|
-
* With INFO, you can see events for started and completed work
|
|
37
|
-
* be parsed by tools like
|
|
35
|
+
* Default is REPORT, which logs warnings, errors, and a periodic report.
|
|
36
|
+
* With INFO, you can also see events for started and completed work.
|
|
37
|
+
* Stats generated can be parsed by tools like
|
|
38
|
+
* [Axiom](https://axiom.co) for monitoring.
|
|
38
39
|
* With DEBUG, you can see timers and internal events for work being
|
|
39
40
|
* scheduled.
|
|
40
41
|
*/
|
|
41
42
|
logLevel?: LogLevel;
|
|
42
|
-
/** Default retry behavior for enqueued actions.
|
|
43
|
+
/** Default retry behavior for enqueued actions.
|
|
44
|
+
* See {@link RetryBehavior}.
|
|
45
|
+
*/
|
|
43
46
|
defaultRetryBehavior?: RetryBehavior;
|
|
44
47
|
/** Whether to retry actions that fail by default. Default: false.
|
|
45
|
-
* NOTE: Only
|
|
48
|
+
* NOTE: Only enable this if your actions are idempotent.
|
|
46
49
|
* See the docs (README.md) for more details.
|
|
47
50
|
*/
|
|
48
51
|
retryActionsByDefault?: boolean;
|
|
@@ -79,8 +82,30 @@ export declare class Workpool {
|
|
|
79
82
|
* and scheduling via `runAt` or `runAfter`.
|
|
80
83
|
*/
|
|
81
84
|
enqueueMutation<Args extends DefaultFunctionArgs, ReturnType>(ctx: RunMutationCtx, fn: FunctionReference<"mutation", FunctionVisibility, Args, ReturnType>, fnArgs: Args, options?: CallbackOptions & SchedulerOptions): Promise<WorkId>;
|
|
85
|
+
/**
|
|
86
|
+
* Cancels a work item. If it's already started, it will be allowed to finish
|
|
87
|
+
* but will not be retried.
|
|
88
|
+
*
|
|
89
|
+
* @param ctx - The mutation or action context that can call ctx.runMutation.
|
|
90
|
+
* @param id - The ID of the work to cancel.
|
|
91
|
+
*/
|
|
82
92
|
cancel(ctx: RunMutationCtx, id: WorkId): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Cancels all pending work items. See {@link cancel}.
|
|
95
|
+
*
|
|
96
|
+
* @param ctx - The mutation or action context that can call ctx.runMutation.
|
|
97
|
+
*/
|
|
83
98
|
cancelAll(ctx: RunMutationCtx): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Gets the status of a work item.
|
|
101
|
+
*
|
|
102
|
+
* @param ctx - The query context that can call ctx.runQuery.
|
|
103
|
+
* @param id - The ID of the work to get the status of.
|
|
104
|
+
* @returns The status of the work item. One of:
|
|
105
|
+
* - `{ state: "pending", previousAttempts: number }`
|
|
106
|
+
* - `{ state: "running", previousAttempts: number }`
|
|
107
|
+
* - `{ state: "finished" }`
|
|
108
|
+
*/
|
|
84
109
|
status(ctx: RunQueryCtx, id: WorkId): Promise<Status>;
|
|
85
110
|
}
|
|
86
111
|
export type SchedulerOptions = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAIL,SAAS,IAAI,eAAe,EAC5B,KAAK,aAAa,EAClB,SAAS,EAET,MAAM,EACP,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,CAAC;AAG3C,eAAO,MAAM,sBAAsB,EAAE,aAIpC,CAAC;AACF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAAE,UAAU,EAAE,IAAI,CAAA;CAAE,CAAC;AACnD,eAAO,MAAM,eAAe,6BAAgC,CAAC;AAE7D,qBAAa,QAAQ;IAajB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAbjB;;;;;;;;;;OAUG;gBAEO,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,qCAAqC;IAChE,OAAO,EAAE;QACf;;WAEG;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,21 +86,48 @@ export class Workpool {
|
|
|
86
86
|
});
|
|
87
87
|
return id;
|
|
88
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Cancels a work item. If it's already started, it will be allowed to finish
|
|
91
|
+
* but will not be retried.
|
|
92
|
+
*
|
|
93
|
+
* @param ctx - The mutation or action context that can call ctx.runMutation.
|
|
94
|
+
* @param id - The ID of the work to cancel.
|
|
95
|
+
*/
|
|
89
96
|
async cancel(ctx, id) {
|
|
90
97
|
await ctx.runMutation(this.component.lib.cancel, {
|
|
91
98
|
id,
|
|
92
99
|
logLevel: this.options.logLevel ?? getDefaultLogLevel(),
|
|
93
100
|
});
|
|
94
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Cancels all pending work items. See {@link cancel}.
|
|
104
|
+
*
|
|
105
|
+
* @param ctx - The mutation or action context that can call ctx.runMutation.
|
|
106
|
+
*/
|
|
95
107
|
async cancelAll(ctx) {
|
|
96
108
|
await ctx.runMutation(this.component.lib.cancelAll, {
|
|
97
109
|
logLevel: this.options.logLevel ?? getDefaultLogLevel(),
|
|
98
110
|
});
|
|
99
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Gets the status of a work item.
|
|
114
|
+
*
|
|
115
|
+
* @param ctx - The query context that can call ctx.runQuery.
|
|
116
|
+
* @param id - The ID of the work to get the status of.
|
|
117
|
+
* @returns The status of the work item. One of:
|
|
118
|
+
* - `{ state: "pending", previousAttempts: number }`
|
|
119
|
+
* - `{ state: "running", previousAttempts: number }`
|
|
120
|
+
* - `{ state: "finished" }`
|
|
121
|
+
*/
|
|
100
122
|
async status(ctx, id) {
|
|
101
123
|
return ctx.runQuery(this.component.lib.status, { id });
|
|
102
124
|
}
|
|
103
125
|
}
|
|
126
|
+
// ensure OnCompleteArgs satisfies SharedOnCompleteArgs
|
|
127
|
+
const _ = {};
|
|
128
|
+
//
|
|
129
|
+
// Helper functions
|
|
130
|
+
//
|
|
104
131
|
function getRetryBehavior(defaultRetryBehavior, retryActionsByDefault, retryOverride) {
|
|
105
132
|
const defaultRetry = defaultRetryBehavior ?? DEFAULT_RETRY_BEHAVIOR;
|
|
106
133
|
const retryByDefault = retryActionsByDefault ?? false;
|
|
@@ -122,8 +149,6 @@ async function defaultEnqueueArgs(fn, { logLevel, maxParallelism }) {
|
|
|
122
149
|
},
|
|
123
150
|
};
|
|
124
151
|
}
|
|
125
|
-
// ensure OnCompleteArgs satisfies SharedOnCompleteArgs
|
|
126
|
-
const _ = {};
|
|
127
152
|
function getRunAt(options) {
|
|
128
153
|
if (!options) {
|
|
129
154
|
return Date.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAIpB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,CAAC,EAAW,MAAM,eAAe,CAAC;AAE3C,OAAO,EACL,iBAAiB,EAEjB,QAAQ,GACT,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,uBAAuB,EAEvB,SAAS,IAAI,eAAe,GAK7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAkB,CAAC;AAE3C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,GAAG;IACrB,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAqB,CAAC;AAE7D,MAAM,OAAO,QAAQ;IAaT;IACA;IAbV;;;;;;;;;;OAUG;IACH,YACU,SAAyB,EAAE,qCAAqC;IAChE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../../src/component/complete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAK,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../../src/component/complete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAK,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAoB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMvE,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEzE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAQvB,CAAC;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,KAAK,CAAC,OAAO,YAAY,CAAC,iBAiFjC;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;iBAGnB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { v } from "convex/values";
|
|
|
2
2
|
import { internalMutation } from "./_generated/server.js";
|
|
3
3
|
import { kickMainLoop } from "./kick.js";
|
|
4
4
|
import { createLogger } from "./logging.js";
|
|
5
|
-
import {
|
|
5
|
+
import { runResult } from "./shared.js";
|
|
6
6
|
import { recordCompleted } from "./stats.js";
|
|
7
7
|
export const completeArgs = v.object({
|
|
8
8
|
jobs: v.array(v.object({
|
|
@@ -14,7 +14,7 @@ export const completeArgs = v.object({
|
|
|
14
14
|
export async function completeHandler(ctx, args) {
|
|
15
15
|
const globals = await ctx.db.query("globals").unique();
|
|
16
16
|
const console = createLogger(globals?.logLevel);
|
|
17
|
-
|
|
17
|
+
const pendingCompletions = [];
|
|
18
18
|
await Promise.all(args.jobs.map(async (job) => {
|
|
19
19
|
const work = await ctx.db.get(job.workId);
|
|
20
20
|
if (!work) {
|
|
@@ -60,17 +60,19 @@ export async function completeHandler(ctx, args) {
|
|
|
60
60
|
await ctx.db.delete(job.workId);
|
|
61
61
|
}
|
|
62
62
|
if (job.runResult.kind !== "canceled") {
|
|
63
|
-
|
|
63
|
+
pendingCompletions.push({
|
|
64
64
|
runResult: job.runResult,
|
|
65
65
|
workId: job.workId,
|
|
66
|
-
segment: nextSegment(),
|
|
67
66
|
retry,
|
|
68
67
|
});
|
|
69
|
-
anyPendingCompletions = true;
|
|
70
68
|
}
|
|
71
69
|
}));
|
|
72
|
-
if (
|
|
73
|
-
await kickMainLoop(ctx, "complete");
|
|
70
|
+
if (pendingCompletions.length > 0) {
|
|
71
|
+
const segment = await kickMainLoop(ctx, "complete");
|
|
72
|
+
await Promise.all(pendingCompletions.map((completion) => ctx.db.insert("pendingCompletion", {
|
|
73
|
+
...completion,
|
|
74
|
+
segment,
|
|
75
|
+
})));
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
78
|
export const complete = internalMutation({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/component/complete.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,CAAC,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/component/complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { MutationCtx } from "./_generated/server.js";
|
|
2
2
|
import { Config } from "./shared.js";
|
|
3
3
|
/**
|
|
4
|
-
* Called from outside the loop
|
|
4
|
+
* Called from outside the loop.
|
|
5
|
+
* Returns the soonest segment to enqueue work for the main loop.
|
|
5
6
|
*/
|
|
6
|
-
export declare function kickMainLoop(ctx: MutationCtx, source: "enqueue" | "cancel" | "complete", config?: Partial<Config>): Promise<
|
|
7
|
+
export declare function kickMainLoop(ctx: MutationCtx, source: "enqueue" | "cancel" | "complete", config?: Partial<Config>): Promise<bigint>;
|
|
7
8
|
export declare const forceKick: import("convex/server").RegisteredMutation<"internal", {}, Promise<void>>;
|
|
8
9
|
//# sourceMappingURL=kick.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kick.d.ts","sourceRoot":"","sources":["../../../src/component/kick.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGvE,OAAO,EAEL,MAAM,
|
|
1
|
+
{"version":3,"file":"kick.d.ts","sourceRoot":"","sources":["../../../src/component/kick.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGvE,OAAO,EAEL,MAAM,EAKP,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,EACzC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GACvB,OAAO,CAAC,MAAM,CAAC,CAiDjB;AAED,eAAO,MAAM,SAAS,2EAOpB,CAAC"}
|
|
@@ -2,29 +2,30 @@ import { internal } from "./_generated/api.js";
|
|
|
2
2
|
import { internalMutation } from "./_generated/server.js";
|
|
3
3
|
import { createLogger, DEFAULT_LOG_LEVEL } from "./logging.js";
|
|
4
4
|
import { INITIAL_STATE } from "./loop.js";
|
|
5
|
-
import { boundScheduledTime, DEFAULT_MAX_PARALLELISM, fromSegment,
|
|
5
|
+
import { boundScheduledTime, DEFAULT_MAX_PARALLELISM, fromSegment, getCurrentSegment, getNextSegment, } from "./shared.js";
|
|
6
6
|
/**
|
|
7
|
-
* Called from outside the loop
|
|
7
|
+
* Called from outside the loop.
|
|
8
|
+
* Returns the soonest segment to enqueue work for the main loop.
|
|
8
9
|
*/
|
|
9
10
|
export async function kickMainLoop(ctx, source, config) {
|
|
10
11
|
const globals = await getOrUpdateGlobals(ctx, config);
|
|
11
12
|
const console = createLogger(globals.logLevel);
|
|
12
13
|
const runStatus = await getOrCreateRunStatus(ctx);
|
|
14
|
+
const next = getNextSegment();
|
|
13
15
|
// Only kick to run now if we're scheduled or idle.
|
|
14
16
|
if (runStatus.state.kind === "running") {
|
|
15
17
|
console.debug(`[${source}] main is actively running, so we don't need to kick it`);
|
|
16
|
-
return;
|
|
18
|
+
return next;
|
|
17
19
|
}
|
|
18
|
-
const segment = nextSegment();
|
|
19
20
|
// main is scheduled to run later, so we should cancel it and reschedule.
|
|
20
21
|
if (runStatus.state.kind === "scheduled") {
|
|
21
22
|
if (source === "enqueue" && runStatus.state.saturated) {
|
|
22
23
|
console.debug(`[${source}] main is saturated, so we don't need to kick it`);
|
|
23
|
-
return;
|
|
24
|
+
return next;
|
|
24
25
|
}
|
|
25
|
-
if (runStatus.state.segment <=
|
|
26
|
+
if (runStatus.state.segment <= next) {
|
|
26
27
|
console.debug(`[${source}] main is scheduled to run soon enough, so we don't need to kick it`);
|
|
27
|
-
return;
|
|
28
|
+
return next;
|
|
28
29
|
}
|
|
29
30
|
console.debug(`[${source}] main is scheduled to run later, so reschedule it to run now`);
|
|
30
31
|
const scheduled = await ctx.db.system.get(runStatus.state.scheduledId);
|
|
@@ -39,11 +40,13 @@ export async function kickMainLoop(ctx, source, config) {
|
|
|
39
40
|
console.debug(`[${source}] main was idle, so run it now`);
|
|
40
41
|
}
|
|
41
42
|
await ctx.db.patch(runStatus._id, { state: { kind: "running" } });
|
|
42
|
-
const
|
|
43
|
+
const current = getCurrentSegment();
|
|
44
|
+
const scheduledTime = boundScheduledTime(fromSegment(current), console);
|
|
43
45
|
await ctx.scheduler.runAt(scheduledTime, internal.loop.main, {
|
|
44
46
|
generation: runStatus.state.generation,
|
|
45
|
-
segment,
|
|
47
|
+
segment: current,
|
|
46
48
|
});
|
|
49
|
+
return current;
|
|
47
50
|
}
|
|
48
51
|
export const forceKick = internalMutation({
|
|
49
52
|
args: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kick.js","sourceRoot":"","sources":["../../../src/component/kick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAe,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,kBAAkB,EAElB,uBAAuB,EACvB,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"kick.js","sourceRoot":"","sources":["../../../src/component/kick.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,16 +15,16 @@ export declare const enqueue: import("convex/server").RegisteredMutation<"public
|
|
|
15
15
|
runAt: number;
|
|
16
16
|
config: {
|
|
17
17
|
maxParallelism: number;
|
|
18
|
-
logLevel: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
18
|
+
logLevel: "DEBUG" | "INFO" | "REPORT" | "WARN" | "ERROR";
|
|
19
19
|
};
|
|
20
20
|
}, Promise<import("convex/values").GenericId<"work">>>;
|
|
21
21
|
export declare const cancel: import("convex/server").RegisteredMutation<"public", {
|
|
22
22
|
id: import("convex/values").GenericId<"work">;
|
|
23
|
-
logLevel: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
23
|
+
logLevel: "DEBUG" | "INFO" | "REPORT" | "WARN" | "ERROR";
|
|
24
24
|
}, Promise<void>>;
|
|
25
25
|
export declare const cancelAll: import("convex/server").RegisteredMutation<"public", {
|
|
26
26
|
before?: number | undefined;
|
|
27
|
-
logLevel: "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
27
|
+
logLevel: "DEBUG" | "INFO" | "REPORT" | "WARN" | "ERROR";
|
|
28
28
|
}, Promise<void>>;
|
|
29
29
|
export declare const status: import("convex/server").RegisteredQuery<"public", {
|
|
30
30
|
id: import("convex/values").GenericId<"work">;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../src/component/lib.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../src/component/lib.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;sDAkClB,CAAC;AAEH,eAAO,MAAM,MAAM;;;iBAejB,CAAC;AAGH,eAAO,MAAM,SAAS;;;iBAmCpB,CAAC;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;GAyBjB,CAAC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { v } from "convex/values";
|
|
2
|
+
import { api } from "./_generated/api.js";
|
|
2
3
|
import { mutation, query } from "./_generated/server.js";
|
|
3
|
-
import { nextSegment, onComplete, retryBehavior, config, status as statusValidator, toSegment, boundScheduledTime, max, } from "./shared.js";
|
|
4
|
-
import { logLevel } from "./logging.js";
|
|
5
4
|
import { kickMainLoop } from "./kick.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { createLogger, logLevel } from "./logging.js";
|
|
6
|
+
import { boundScheduledTime, config, getNextSegment, max, onComplete, retryBehavior, status as statusValidator, toSegment, } from "./shared.js";
|
|
8
7
|
import { recordEnqueued } from "./stats.js";
|
|
9
8
|
const MAX_POSSIBLE_PARALLELISM = 100;
|
|
10
9
|
export const enqueue = mutation({
|
|
@@ -33,11 +32,11 @@ export const enqueue = mutation({
|
|
|
33
32
|
...workArgs,
|
|
34
33
|
attempts: 0,
|
|
35
34
|
});
|
|
35
|
+
const limit = await kickMainLoop(ctx, "enqueue", config);
|
|
36
36
|
await ctx.db.insert("pendingStart", {
|
|
37
37
|
workId,
|
|
38
|
-
segment: max(toSegment(runAt),
|
|
38
|
+
segment: max(toSegment(runAt), limit),
|
|
39
39
|
});
|
|
40
|
-
await kickMainLoop(ctx, "enqueue", config);
|
|
41
40
|
recordEnqueued(console, { workId, fnName: workArgs.fnName, runAt });
|
|
42
41
|
return workId;
|
|
43
42
|
},
|
|
@@ -48,11 +47,14 @@ export const cancel = mutation({
|
|
|
48
47
|
logLevel,
|
|
49
48
|
},
|
|
50
49
|
handler: async (ctx, { id, logLevel }) => {
|
|
51
|
-
const
|
|
52
|
-
if (
|
|
53
|
-
await kickMainLoop(ctx, "cancel", { logLevel });
|
|
50
|
+
const shouldCancel = await shouldCancelWorkItem(ctx, id, logLevel);
|
|
51
|
+
if (shouldCancel) {
|
|
52
|
+
const segment = await kickMainLoop(ctx, "cancel", { logLevel });
|
|
53
|
+
await ctx.db.insert("pendingCancelation", {
|
|
54
|
+
workId: id,
|
|
55
|
+
segment,
|
|
56
|
+
});
|
|
54
57
|
}
|
|
55
|
-
// TODO: stats event
|
|
56
58
|
},
|
|
57
59
|
});
|
|
58
60
|
const PAGE_SIZE = 64;
|
|
@@ -60,16 +62,24 @@ export const cancelAll = mutation({
|
|
|
60
62
|
args: { logLevel, before: v.optional(v.number()) },
|
|
61
63
|
handler: async (ctx, { logLevel, before }) => {
|
|
62
64
|
const beforeTime = before ?? Date.now();
|
|
63
|
-
const segment = nextSegment();
|
|
64
65
|
const pageOfWork = await ctx.db
|
|
65
66
|
.query("work")
|
|
66
67
|
.withIndex("by_creation_time", (q) => q.lte("_creationTime", beforeTime))
|
|
67
68
|
.order("desc")
|
|
68
69
|
.take(PAGE_SIZE);
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
const shouldCancel = await Promise.all(pageOfWork.map(async ({ _id }) => shouldCancelWorkItem(ctx, _id, logLevel)));
|
|
71
|
+
let segment = getNextSegment();
|
|
72
|
+
if (shouldCancel.some((c) => c)) {
|
|
73
|
+
segment = await kickMainLoop(ctx, "cancel", { logLevel });
|
|
72
74
|
}
|
|
75
|
+
await Promise.all(pageOfWork.map(({ _id }, index) => {
|
|
76
|
+
if (shouldCancel[index]) {
|
|
77
|
+
return ctx.db.insert("pendingCancelation", {
|
|
78
|
+
workId: _id,
|
|
79
|
+
segment,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}));
|
|
73
83
|
if (pageOfWork.length === PAGE_SIZE) {
|
|
74
84
|
await ctx.scheduler.runAfter(0, api.lib.cancelAll, {
|
|
75
85
|
logLevel,
|
|
@@ -104,7 +114,7 @@ export const status = query({
|
|
|
104
114
|
return { state: "running", previousAttempts: work.attempts };
|
|
105
115
|
},
|
|
106
116
|
});
|
|
107
|
-
async function
|
|
117
|
+
async function shouldCancelWorkItem(ctx, workId, logLevel) {
|
|
108
118
|
const console = createLogger(logLevel);
|
|
109
119
|
// No-op if the work doesn't exist or has completed.
|
|
110
120
|
const work = await ctx.db.get(workId);
|
|
@@ -120,10 +130,6 @@ async function cancelWorkItem(ctx, workId, segment, logLevel) {
|
|
|
120
130
|
console.warn(`[cancel] work ${workId} has already been canceled`);
|
|
121
131
|
return false;
|
|
122
132
|
}
|
|
123
|
-
await ctx.db.insert("pendingCancelation", {
|
|
124
|
-
workId,
|
|
125
|
-
segment,
|
|
126
|
-
});
|
|
127
133
|
return true;
|
|
128
134
|
}
|
|
129
135
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../src/component/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../src/component/lib.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Infer } from "convex/values";
|
|
2
2
|
export declare const DEFAULT_LOG_LEVEL: LogLevel;
|
|
3
|
+
export declare const logLevel: import("convex/values").VUnion<"DEBUG" | "INFO" | "REPORT" | "WARN" | "ERROR", [import("convex/values").VLiteral<"DEBUG", "required">, import("convex/values").VLiteral<"INFO", "required">, import("convex/values").VLiteral<"REPORT", "required">, import("convex/values").VLiteral<"WARN", "required">, import("convex/values").VLiteral<"ERROR", "required">], "required", never>;
|
|
4
|
+
export type LogLevel = Infer<typeof logLevel>;
|
|
3
5
|
export type Logger = {
|
|
4
6
|
debug: (...args: unknown[]) => void;
|
|
5
7
|
info: (...args: unknown[]) => void;
|
|
@@ -9,7 +11,6 @@ export type Logger = {
|
|
|
9
11
|
timeEnd: (label: string) => void;
|
|
10
12
|
event: (event: string, payload: Record<string, unknown>) => void;
|
|
11
13
|
};
|
|
14
|
+
export declare function shouldLog(config: LogLevel, level: LogLevel): boolean;
|
|
12
15
|
export declare function createLogger(level?: LogLevel): Logger;
|
|
13
|
-
export declare const logLevel: import("convex/values").VUnion<"DEBUG" | "INFO" | "WARN" | "ERROR", [import("convex/values").VLiteral<"DEBUG", "required">, import("convex/values").VLiteral<"INFO", "required">, import("convex/values").VLiteral<"WARN", "required">, import("convex/values").VLiteral<"ERROR", "required">], "required", never>;
|
|
14
|
-
export type LogLevel = Infer<typeof logLevel>;
|
|
15
16
|
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/component/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAEzC,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../../src/component/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAEzC,eAAO,MAAM,iBAAiB,EAAE,QAAmB,CAAC;AAIpD,eAAO,MAAM,QAAQ,uXAMpB,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE9C,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAClE,CAAC;AAUF,wBAAgB,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,WAE1D;AAOD,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAiDrD"}
|