@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.
Files changed (87) hide show
  1. package/README.md +81 -3
  2. package/dist/commonjs/client/index.d.ts +30 -5
  3. package/dist/commonjs/client/index.d.ts.map +1 -1
  4. package/dist/commonjs/client/index.js +27 -2
  5. package/dist/commonjs/client/index.js.map +1 -1
  6. package/dist/commonjs/component/complete.d.ts.map +1 -1
  7. package/dist/commonjs/component/complete.js +9 -7
  8. package/dist/commonjs/component/complete.js.map +1 -1
  9. package/dist/commonjs/component/kick.d.ts +3 -2
  10. package/dist/commonjs/component/kick.d.ts.map +1 -1
  11. package/dist/commonjs/component/kick.js +12 -9
  12. package/dist/commonjs/component/kick.js.map +1 -1
  13. package/dist/commonjs/component/lib.d.ts +3 -3
  14. package/dist/commonjs/component/lib.d.ts.map +1 -1
  15. package/dist/commonjs/component/lib.js +25 -19
  16. package/dist/commonjs/component/lib.js.map +1 -1
  17. package/dist/commonjs/component/logging.d.ts +3 -2
  18. package/dist/commonjs/component/logging.d.ts.map +1 -1
  19. package/dist/commonjs/component/logging.js +34 -15
  20. package/dist/commonjs/component/logging.js.map +1 -1
  21. package/dist/commonjs/component/loop.js +10 -10
  22. package/dist/commonjs/component/loop.js.map +1 -1
  23. package/dist/commonjs/component/recovery.d.ts +29 -0
  24. package/dist/commonjs/component/recovery.d.ts.map +1 -1
  25. package/dist/commonjs/component/recovery.js +69 -66
  26. package/dist/commonjs/component/recovery.js.map +1 -1
  27. package/dist/commonjs/component/schema.d.ts +11 -11
  28. package/dist/commonjs/component/shared.d.ts +4 -4
  29. package/dist/commonjs/component/shared.d.ts.map +1 -1
  30. package/dist/commonjs/component/shared.js +2 -2
  31. package/dist/commonjs/component/shared.js.map +1 -1
  32. package/dist/commonjs/component/stats.d.ts +20 -21
  33. package/dist/commonjs/component/stats.d.ts.map +1 -1
  34. package/dist/commonjs/component/stats.js +86 -38
  35. package/dist/commonjs/component/stats.js.map +1 -1
  36. package/dist/commonjs/component/worker.d.ts +2 -2
  37. package/dist/esm/client/index.d.ts +30 -5
  38. package/dist/esm/client/index.d.ts.map +1 -1
  39. package/dist/esm/client/index.js +27 -2
  40. package/dist/esm/client/index.js.map +1 -1
  41. package/dist/esm/component/complete.d.ts.map +1 -1
  42. package/dist/esm/component/complete.js +9 -7
  43. package/dist/esm/component/complete.js.map +1 -1
  44. package/dist/esm/component/kick.d.ts +3 -2
  45. package/dist/esm/component/kick.d.ts.map +1 -1
  46. package/dist/esm/component/kick.js +12 -9
  47. package/dist/esm/component/kick.js.map +1 -1
  48. package/dist/esm/component/lib.d.ts +3 -3
  49. package/dist/esm/component/lib.d.ts.map +1 -1
  50. package/dist/esm/component/lib.js +25 -19
  51. package/dist/esm/component/lib.js.map +1 -1
  52. package/dist/esm/component/logging.d.ts +3 -2
  53. package/dist/esm/component/logging.d.ts.map +1 -1
  54. package/dist/esm/component/logging.js +34 -15
  55. package/dist/esm/component/logging.js.map +1 -1
  56. package/dist/esm/component/loop.js +10 -10
  57. package/dist/esm/component/loop.js.map +1 -1
  58. package/dist/esm/component/recovery.d.ts +29 -0
  59. package/dist/esm/component/recovery.d.ts.map +1 -1
  60. package/dist/esm/component/recovery.js +69 -66
  61. package/dist/esm/component/recovery.js.map +1 -1
  62. package/dist/esm/component/schema.d.ts +11 -11
  63. package/dist/esm/component/shared.d.ts +4 -4
  64. package/dist/esm/component/shared.d.ts.map +1 -1
  65. package/dist/esm/component/shared.js +2 -2
  66. package/dist/esm/component/shared.js.map +1 -1
  67. package/dist/esm/component/stats.d.ts +20 -21
  68. package/dist/esm/component/stats.d.ts.map +1 -1
  69. package/dist/esm/component/stats.js +86 -38
  70. package/dist/esm/component/stats.js.map +1 -1
  71. package/dist/esm/component/worker.d.ts +2 -2
  72. package/package.json +6 -7
  73. package/src/client/index.ts +64 -35
  74. package/src/component/_generated/api.d.ts +6 -6
  75. package/src/component/complete.ts +18 -7
  76. package/src/component/kick.test.ts +17 -7
  77. package/src/component/kick.ts +14 -11
  78. package/src/component/lib.ts +33 -26
  79. package/src/component/logging.test.ts +16 -0
  80. package/src/component/logging.ts +45 -23
  81. package/src/component/loop.test.ts +12 -12
  82. package/src/component/loop.ts +11 -11
  83. package/src/component/recovery.test.ts +6 -11
  84. package/src/component/recovery.ts +77 -69
  85. package/src/component/shared.ts +2 -2
  86. package/src/component/stats.test.ts +345 -0
  87. 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 failed at the same time.
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
- <!-- END: Include on https://convex.dev/components -->
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 WARN.
36
- * With INFO, you can see events for started and completed work, which can
37
- * be parsed by tools like [Axiom](https://axiom.co) for monitoring.
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 do this if your actions are idempotent.
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":"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"}
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":"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"}
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;AACzC,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,iBAuEjC;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;iBAGnB,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 { nextSegment, runResult } from "./shared.js";
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
- let anyPendingCompletions = false;
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
- await ctx.db.insert("pendingCompletion", {
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 (anyPendingCompletions) {
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":"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"}
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<void>;
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,EAIP,MAAM,aAAa,CAAC;AAErB;;GAEG;AAEH,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,IAAI,CAAC,CA+Cf;AAED,eAAO,MAAM,SAAS,2EAOpB,CAAC"}
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, nextSegment, } from "./shared.js";
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 <= 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 scheduledTime = boundScheduledTime(fromSegment(segment), console);
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":"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"}
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":"AAqBA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;sDAkClB,CAAC;AAEH,eAAO,MAAM,MAAM;;;iBAYjB,CAAC;AAGH,eAAO,MAAM,SAAS;;;iBAyBpB,CAAC;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;GAyBjB,CAAC"}
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 { api } from "./_generated/api.js";
7
- import { createLogger } from "./logging.js";
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), nextSegment()),
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 canceled = await cancelWorkItem(ctx, id, nextSegment(), logLevel);
52
- if (canceled) {
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 canceled = await Promise.all(pageOfWork.map(async ({ _id }) => cancelWorkItem(ctx, _id, segment, logLevel)));
70
- if (canceled.some((c) => c)) {
71
- await kickMainLoop(ctx, "cancel", { logLevel });
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 cancelWorkItem(ctx, workId, segment, logLevel) {
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":"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"}
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,QAAiB,CAAC;AAElD,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;AAEF,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAgDrD;AACD,eAAO,MAAM,QAAQ,oTAKpB,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC"}
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"}