@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.
Files changed (49) hide show
  1. package/dist/component/_generated/api.d.ts +2 -0
  2. package/dist/component/_generated/api.d.ts.map +1 -1
  3. package/dist/component/_generated/api.js.map +1 -1
  4. package/dist/component/complete.d.ts.map +1 -1
  5. package/dist/component/complete.js +8 -7
  6. package/dist/component/complete.js.map +1 -1
  7. package/dist/component/danger.js +7 -7
  8. package/dist/component/danger.js.map +1 -1
  9. package/dist/component/future.d.ts +11 -0
  10. package/dist/component/future.d.ts.map +1 -0
  11. package/dist/component/future.js +21 -0
  12. package/dist/component/future.js.map +1 -0
  13. package/dist/component/kick.d.ts +3 -3
  14. package/dist/component/kick.d.ts.map +1 -1
  15. package/dist/component/kick.js +14 -16
  16. package/dist/component/kick.js.map +1 -1
  17. package/dist/component/lib.d.ts.map +1 -1
  18. package/dist/component/lib.js +13 -13
  19. package/dist/component/lib.js.map +1 -1
  20. package/dist/component/loop.d.ts +44 -1
  21. package/dist/component/loop.d.ts.map +1 -1
  22. package/dist/component/loop.js +171 -217
  23. package/dist/component/loop.js.map +1 -1
  24. package/dist/component/recovery.d.ts.map +1 -1
  25. package/dist/component/recovery.js +2 -2
  26. package/dist/component/recovery.js.map +1 -1
  27. package/dist/component/schema.d.ts.map +1 -1
  28. package/dist/component/schema.js +2 -1
  29. package/dist/component/schema.js.map +1 -1
  30. package/dist/component/worker.js +1 -1
  31. package/dist/component/worker.js.map +1 -1
  32. package/package.json +8 -12
  33. package/src/component/_generated/api.ts +2 -0
  34. package/src/component/complete.test.ts +13 -13
  35. package/src/component/complete.ts +13 -7
  36. package/src/component/danger.ts +7 -7
  37. package/src/component/future.ts +38 -0
  38. package/src/component/kick.test.ts +17 -20
  39. package/src/component/kick.ts +20 -17
  40. package/src/component/lib.test.ts +7 -7
  41. package/src/component/lib.ts +12 -15
  42. package/src/component/loop.test.ts +695 -1127
  43. package/src/component/loop.ts +212 -283
  44. package/src/component/recovery.test.ts +3 -3
  45. package/src/component/recovery.ts +5 -2
  46. package/src/component/schema.ts +2 -1
  47. package/src/component/stateMachine.test.ts +1246 -0
  48. package/src/component/stats.test.ts +4 -4
  49. package/src/component/worker.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/component/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAK,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI5E,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;sBAShB,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO;;;;;;;iBAGlB,CAAC;AAGH,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,OAAO,YAAY,CAAC,iBAgErC"}
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/component/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAK,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI5E,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;sBAShB,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO;;;;;;;iBAGlB,CAAC;AAGH,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,OAAO,YAAY,CAAC,iBAmErC"}
@@ -46,7 +46,7 @@ export async function recoveryHandler(ctx, { jobs }) {
46
46
  console.debug(`${preamble} already in pendingCompletion, skipping`);
47
47
  continue;
48
48
  }
49
- const work = await ctx.db.get(job.workId);
49
+ const work = await ctx.db.get("work", job.workId);
50
50
  if (work === null) {
51
51
  // Completion already executed w/o retries, no need to do anything.
52
52
  console.warn(`${preamble} work not found, skipping`);
@@ -57,7 +57,7 @@ export async function recoveryHandler(ctx, { jobs }) {
57
57
  console.warn(`${preamble} attempts mismatch, skipping`);
58
58
  continue;
59
59
  }
60
- const scheduled = await ctx.db.system.get(job.scheduledId);
60
+ const scheduled = await ctx.db.system.get("_scheduled_functions", job.scheduledId);
61
61
  if (scheduled === null) {
62
62
  console.warn(`${preamble} not found in _scheduled_functions`);
63
63
  completionJobs.push({
@@ -1 +1 @@
1
- {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/component/recovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/component/recovery.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,wBA6FG"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,wBA8FG"}
@@ -10,6 +10,7 @@ export default defineSchema({
10
10
  internalState: defineTable({
11
11
  // Ensure that only one main is running at a time.
12
12
  generation: v.int64(),
13
+ // Track where we've scanned to, so we skip tombstones on re-scan.
13
14
  segmentCursors: v.object({
14
15
  incoming: segment,
15
16
  completion: segment,
@@ -31,7 +32,7 @@ export default defineSchema({
31
32
  started: v.number(),
32
33
  })),
33
34
  }),
34
- // Singleton, written by `updateRunStatus` when running, by client or worker otherwise.
35
+ // Singleton, written by `main` when scheduling, by client or worker otherwise.
35
36
  // Safe to read from kickLoop, since it should update infrequently.
36
37
  runStatus: defineTable({
37
38
  state: v.union(v.object({ kind: v.literal("running") }), v.object({
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ export const runMutationWrapper = internalMutation({
18
18
  let fnArgs = args.fnArgs;
19
19
  if (!fnArgs) {
20
20
  assert(args.payloadId);
21
- const payload = await ctx.db.get(args.payloadId);
21
+ const payload = await ctx.db.get("payload", args.payloadId);
22
22
  assert(payload?.args);
23
23
  fnArgs = payload.args;
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/component/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/component/worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "email": "support@convex.dev",
8
8
  "url": "https://github.com/get-convex/workpool/issues"
9
9
  },
10
- "version": "0.4.6",
10
+ "version": "0.4.7-alpha.0",
11
11
  "license": "Apache-2.0",
12
12
  "keywords": [
13
13
  "convex",
@@ -19,11 +19,10 @@
19
19
  ],
20
20
  "type": "module",
21
21
  "scripts": {
22
- "dev": "run-p -r 'dev:*'",
23
- "dev:backend": "convex dev --typecheck-components",
22
+ "dev": "convex dev --start 'npm run dev:build'",
24
23
  "dev:frontend": "cd example && vite --clearScreen false",
25
24
  "dev:build": "chokidar 'tsconfig*.json' 'src/**/*.ts' -i '**/*.test.ts' -c 'npm run build:codegen' --initial",
26
- "predev": "path-exists .env.local || (npm run build && convex dev --once)",
25
+ "predev": "convex init && npm run build:codegen",
27
26
  "build": "tsc --project ./tsconfig.build.json",
28
27
  "build:codegen": "npx convex codegen --component-dir ./src/component && npm run build",
29
28
  "build:clean": "rm -rf dist *.tsbuildinfo && npm run build:codegen",
@@ -31,12 +30,11 @@
31
30
  "lint": "eslint .",
32
31
  "format": "prettier --write .",
33
32
  "format:check": "prettier --check .",
34
- "all": "run-p -r 'dev:*' 'test:watch'",
35
33
  "test": "vitest run --typecheck",
36
34
  "test:watch": "vitest --typecheck --clearScreen false",
37
35
  "test:debug": "vitest --inspect-brk --no-file-parallelism",
38
36
  "test:coverage": "vitest run --coverage --coverage.reporter=text",
39
- "preversion": "npm ci && npm run build:clean && run-p test lint typecheck",
37
+ "preversion": "npm ci && npm run build:clean && npm run test && npm run lint && npm run typecheck",
40
38
  "alpha": "npm version prerelease --preid alpha && npm publish --tag alpha && git push --follow-tags",
41
39
  "release": "npm version patch && npm publish && git push --follow-tags",
42
40
  "version": "(npm whoami || npm login) && vim -c 'normal o' -c 'normal o## '$npm_package_version CHANGELOG.md && prettier -w CHANGELOG.md && git add CHANGELOG.md"
@@ -69,6 +67,7 @@
69
67
  "convex-helpers": "^0.1.94"
70
68
  },
71
69
  "devDependencies": {
70
+ "@convex-dev/eslint-plugin": "^2.0.0",
72
71
  "@edge-runtime/vm": "5.0.0",
73
72
  "@eslint/eslintrc": "3.3.3",
74
73
  "@eslint/js": "10.0.1",
@@ -78,23 +77,20 @@
78
77
  "@vitejs/plugin-react": "5.1.3",
79
78
  "@vitest/coverage-v8": "4.0.18",
80
79
  "chokidar-cli": "3.0.0",
81
- "convex": "1.34.0",
80
+ "convex": "1.35.1",
82
81
  "convex-helpers": "0.1.111",
83
- "convex-test": "0.0.41",
84
- "cpy-cli": "7.0.0",
82
+ "convex-test": "0.0.51",
85
83
  "eslint": "10.0.2",
86
84
  "eslint-plugin-react-hooks": "7.1.0-canary-3f0b9e61-20260317",
87
85
  "eslint-plugin-react-refresh": "0.5.0",
88
86
  "globals": "17.3.0",
89
- "npm-run-all2": "8.0.4",
90
- "path-exists-cli": "2.0.0",
91
87
  "pkg-pr-new": "0.0.63",
92
88
  "prettier": "3.8.1",
93
89
  "react": "19.2.4",
94
90
  "react-dom": "19.2.4",
95
91
  "typescript": "5.9.3",
96
92
  "typescript-eslint": "8.56.1",
97
- "vite": "7.3.1",
93
+ "vite": "7.3.2",
98
94
  "vitest": "4.0.18"
99
95
  },
100
96
  "types": "./dist/client/index.d.ts",
@@ -12,6 +12,7 @@ import type * as complete from "../complete.js";
12
12
  import type * as config from "../config.js";
13
13
  import type * as crons from "../crons.js";
14
14
  import type * as danger from "../danger.js";
15
+ import type * as future from "../future.js";
15
16
  import type * as kick from "../kick.js";
16
17
  import type * as lib from "../lib.js";
17
18
  import type * as logging from "../logging.js";
@@ -33,6 +34,7 @@ const fullApi: ApiFromModules<{
33
34
  config: typeof config;
34
35
  crons: typeof crons;
35
36
  danger: typeof danger;
37
+ future: typeof future;
36
38
  kick: typeof kick;
37
39
  lib: typeof lib;
38
40
  logging: typeof logging;
@@ -69,7 +69,7 @@ describe("complete", () => {
69
69
 
70
70
  // Verify work was deleted
71
71
  await t.run(async (ctx) => {
72
- const work = await ctx.db.get(workId);
72
+ const work = await ctx.db.get("work", workId);
73
73
  expect(work).toBeNull();
74
74
  });
75
75
 
@@ -119,7 +119,7 @@ describe("complete", () => {
119
119
 
120
120
  // Verify work was not deleted (since it should be retried)
121
121
  await t.run(async (ctx) => {
122
- const work = await ctx.db.get(workId);
122
+ const work = await ctx.db.get("work", workId);
123
123
  expect(work).not.toBeNull();
124
124
  expect(work?.attempts).toBe(1); // Incremented from 0
125
125
  });
@@ -157,9 +157,9 @@ describe("complete", () => {
157
157
 
158
158
  // Update the work to simulate it's already been attempted once
159
159
  await t.run(async (ctx) => {
160
- const work = await ctx.db.get(workId);
160
+ const work = await ctx.db.get("work", workId);
161
161
  if (work) {
162
- await ctx.db.patch(work._id, { attempts: 1 });
162
+ await ctx.db.patch("work", work._id, { attempts: 1 });
163
163
  }
164
164
  });
165
165
 
@@ -178,7 +178,7 @@ describe("complete", () => {
178
178
 
179
179
  // Verify work was deleted (since max attempts reached)
180
180
  await t.run(async (ctx) => {
181
- const work = await ctx.db.get(workId);
181
+ const work = await ctx.db.get("work", workId);
182
182
  expect(work).toBeNull();
183
183
  });
184
184
 
@@ -223,7 +223,7 @@ describe("complete", () => {
223
223
 
224
224
  // Verify work was deleted
225
225
  await t.run(async (ctx) => {
226
- const work = await ctx.db.get(workId);
226
+ const work = await ctx.db.get("work", workId);
227
227
  expect(work).toBeNull();
228
228
  });
229
229
 
@@ -346,11 +346,11 @@ describe("complete", () => {
346
346
  // Verify both jobs were processed correctly
347
347
  await t.run(async (ctx) => {
348
348
  // First job should be deleted
349
- const work1 = await ctx.db.get(workId1);
349
+ const work1 = await ctx.db.get("work", workId1);
350
350
  expect(work1).toBeNull();
351
351
 
352
352
  // Second job should still exist (for retry)
353
- const work2 = await ctx.db.get(workId2);
353
+ const work2 = await ctx.db.get("work", workId2);
354
354
  expect(work2).not.toBeNull();
355
355
  expect(work2?.attempts).toBe(1);
356
356
 
@@ -378,9 +378,9 @@ describe("complete", () => {
378
378
 
379
379
  // Update the work to have a different attempt number
380
380
  await t.run(async (ctx) => {
381
- const work = await ctx.db.get(workId);
381
+ const work = await ctx.db.get("work", workId);
382
382
  if (work) {
383
- await ctx.db.patch(work._id, { attempts: 5 });
383
+ await ctx.db.patch("work", work._id, { attempts: 5 });
384
384
  }
385
385
  });
386
386
 
@@ -399,7 +399,7 @@ describe("complete", () => {
399
399
 
400
400
  // Verify work was not modified
401
401
  await t.run(async (ctx) => {
402
- const work = await ctx.db.get(workId);
402
+ const work = await ctx.db.get("work", workId);
403
403
  expect(work).not.toBeNull();
404
404
  expect(work?.attempts).toBe(5); // Should remain unchanged
405
405
  });
@@ -449,7 +449,7 @@ describe("complete", () => {
449
449
  // Verify the first call was processed correctly
450
450
  await t.run(async (ctx) => {
451
451
  // Work should still exist (for retry)
452
- const work = await ctx.db.get(workId);
452
+ const work = await ctx.db.get("work", workId);
453
453
  expect(work).not.toBeNull();
454
454
  expect(work?.attempts).toBe(1); // Incremented from 0
455
455
 
@@ -491,7 +491,7 @@ describe("complete", () => {
491
491
  // Verify the second call was not processed
492
492
  await t.run(async (ctx) => {
493
493
  // Work should still have the same attempt count
494
- const work = await ctx.db.get(workId);
494
+ const work = await ctx.db.get("work", workId);
495
495
  expect(work).not.toBeNull();
496
496
  expect(work?.attempts).toBe(1); // Still 1, not incremented again
497
497
 
@@ -5,7 +5,12 @@ import { internal } from "./_generated/api.js";
5
5
  import { internalMutation, type MutationCtx } from "./_generated/server.js";
6
6
  import { kickMainLoop } from "./kick.js";
7
7
  import { createLogger } from "./logging.js";
8
- import { type OnCompleteArgs, type RunResult, vResult } from "./shared.js";
8
+ import {
9
+ getCurrentSegment,
10
+ type OnCompleteArgs,
11
+ type RunResult,
12
+ vResult,
13
+ } from "./shared.js";
9
14
  import { recordCompleted } from "./stats.js";
10
15
  import { assert } from "convex-helpers";
11
16
 
@@ -40,7 +45,7 @@ export async function completeHandler(
40
45
  const jobAndWorks = (
41
46
  await Promise.all(
42
47
  args.jobs.map(async (job) => {
43
- const work = await ctx.db.get(job.workId);
48
+ const work = await ctx.db.get("work", job.workId);
44
49
  if (!work) {
45
50
  console.warn(
46
51
  `[complete] ${job.workId} is done, but its work is gone`,
@@ -103,7 +108,7 @@ export async function completeHandler(
103
108
  await Promise.all(
104
109
  ourBatch.map(async ({ work, job }) => {
105
110
  work.attempts++;
106
- await ctx.db.patch(work._id, { attempts: work.attempts });
111
+ await ctx.db.patch("work", work._id, { attempts: work.attempts });
107
112
  const pendingCompletion = await ctx.db
108
113
  .query("pendingCompletion")
109
114
  .withIndex("workId", (q) => q.eq("workId", job.workId))
@@ -124,7 +129,7 @@ export async function completeHandler(
124
129
  // Retrieve large context if stored separately
125
130
  let context = work.onComplete.context;
126
131
  if (context === undefined && work.payloadId) {
127
- const payload = await ctx.db.get(work.payloadId);
132
+ const payload = await ctx.db.get("payload", work.payloadId);
128
133
  if (payload) {
129
134
  context = payload.context;
130
135
  }
@@ -176,11 +181,11 @@ export async function completeHandler(
176
181
  // Clean up any large data that was stored separately.
177
182
  // TODO: consider async deletion in the future to avoid bandwidth limits.
178
183
  if (work.payloadId) {
179
- await ctx.db.delete(work.payloadId);
184
+ await ctx.db.delete("payload", work.payloadId);
180
185
  }
181
186
 
182
187
  // This is the terminating state for work.
183
- await ctx.db.delete(job.workId);
188
+ await ctx.db.delete("work", job.workId);
184
189
  }
185
190
  if (job.runResult.kind !== "canceled") {
186
191
  pendingCompletions.push({
@@ -192,7 +197,8 @@ export async function completeHandler(
192
197
  }),
193
198
  );
194
199
  if (pendingCompletions.length > 0) {
195
- const segment = await kickMainLoop(ctx, "complete");
200
+ await kickMainLoop(ctx, "complete");
201
+ const segment = getCurrentSegment();
196
202
  await Promise.all(
197
203
  pendingCompletions.map((completion) =>
198
204
  ctx.db.insert("pendingCompletion", {
@@ -24,7 +24,7 @@ export const clearPending = internalMutation({
24
24
  .withIndex("by_creation_time", (q) => q.lte("_creationTime", time))
25
25
  .order("desc")) {
26
26
  i++;
27
- const work = await ctx.db.get(entry.workId);
27
+ const work = await ctx.db.get("work", entry.workId);
28
28
  totalBytes +=
29
29
  getConvexSize(entry) + getConvexSize(work) + (work?.payloadSize ?? 0);
30
30
  if (i > MAX_ROWS_READ || totalBytes > MAX_BYTES_READ) {
@@ -33,7 +33,7 @@ export const clearPending = internalMutation({
33
33
  console.log(`Continuing after ${i} entries, ${totalBytes} bytes`);
34
34
  break;
35
35
  }
36
- await ctx.db.delete(entry._id);
36
+ await ctx.db.delete("pendingStart", entry._id);
37
37
  if (work) {
38
38
  // Clean up any large data stored separately
39
39
  if (work.payloadId) {
@@ -95,17 +95,17 @@ export const clearOldWork = internalMutation({
95
95
  break;
96
96
  }
97
97
  if (pendingStart) {
98
- await ctx.db.delete(pendingStart._id);
98
+ await ctx.db.delete("pendingStart", pendingStart._id);
99
99
  }
100
100
  if (pendingCompletion) {
101
- await ctx.db.delete(pendingCompletion._id);
101
+ await ctx.db.delete("pendingCompletion", pendingCompletion._id);
102
102
  }
103
103
  if (pendingCancelation) {
104
- await ctx.db.delete(pendingCancelation._id);
104
+ await ctx.db.delete("pendingCancelation", pendingCancelation._id);
105
105
  }
106
106
  // Clean up any large data stored separately
107
107
  if (entry.payloadId) {
108
- await ctx.db.delete(entry.payloadId);
108
+ await ctx.db.delete("payload", entry.payloadId);
109
109
  }
110
110
  console.debug(
111
111
  `cleared ${entry.fnName}: ${entry.fnArgs} (${Object.entries({
@@ -117,7 +117,7 @@ export const clearOldWork = internalMutation({
117
117
  .map(([name]) => name)
118
118
  .join(", ")})`,
119
119
  );
120
- await ctx.db.delete(entry._id);
120
+ await ctx.db.delete("work", entry._id);
121
121
  }
122
122
  if (hasMore) {
123
123
  await ctx.scheduler.runAfter(0, internal.danger.clearOldWork, {
@@ -0,0 +1,38 @@
1
+ import {
2
+ type FunctionReference,
3
+ type FunctionReturnType,
4
+ type OptionalRestArgs,
5
+ getFunctionAddress,
6
+ } from "convex/server";
7
+ import { convexToJson, jsonToConvex } from "convex/values";
8
+
9
+ declare const Convex: {
10
+ asyncSyscall: (op: string, jsonArgs: string) => Promise<string>;
11
+ };
12
+
13
+ /**
14
+ * Run a query without creating a read dependency. Concurrent writes to the
15
+ * data the query reads will NOT cause the calling mutation to retry via OCC.
16
+ *
17
+ * Tradeoff: a concurrent transaction that hasn't yet committed at snapshot
18
+ * time may insert data this query won't see. If missing such inserts could
19
+ * break correctness, use ctx.runQuery (which takes a dependency) instead.
20
+ */
21
+ export async function runSnapshotQuery<
22
+ Query extends FunctionReference<"query", "public" | "internal">,
23
+ >(
24
+ query: Query,
25
+ ...args: OptionalRestArgs<Query>
26
+ ): Promise<FunctionReturnType<Query>> {
27
+ const queryArgs = (args[0] ?? {}) as Record<string, unknown>;
28
+ const syscallArgs = {
29
+ udfType: "snapshotQuery",
30
+ args: convexToJson(queryArgs as never),
31
+ ...getFunctionAddress(query),
32
+ };
33
+ const resultStr = await Convex.asyncSyscall(
34
+ "1.0/runUdf",
35
+ JSON.stringify(syscallArgs),
36
+ );
37
+ return jsonToConvex(JSON.parse(resultStr)) as FunctionReturnType<Query>;
38
+ }
@@ -16,7 +16,6 @@ import { modules } from "./setup.test.js";
16
16
  import {
17
17
  DEFAULT_MAX_PARALLELISM,
18
18
  fromSegment,
19
- getCurrentSegment,
20
19
  getNextSegment,
21
20
  toSegment,
22
21
  } from "./shared.js";
@@ -58,12 +57,11 @@ describe("kickMainLoop", () => {
58
57
  expect(runStatus.state.kind).toBe("running");
59
58
 
60
59
  // Second kick should not change state
61
- const segment = await kickMainLoop(ctx, "enqueue");
60
+ await kickMainLoop(ctx, "enqueue");
62
61
  const afterStatus = await ctx.db.query("runStatus").unique();
63
62
  assert(afterStatus);
64
63
  expect(afterStatus.state.kind).toBe("running");
65
64
  expect(afterStatus._id).toBe(runStatus._id);
66
- expect(segment).toBe(getNextSegment());
67
65
  });
68
66
  });
69
67
 
@@ -89,7 +87,7 @@ describe("kickMainLoop", () => {
89
87
  segment: futureSegment,
90
88
  },
91
89
  );
92
- await ctx.db.patch(runStatus._id, {
90
+ await ctx.db.patch("runStatus", runStatus._id, {
93
91
  state: {
94
92
  kind: "scheduled",
95
93
  scheduledId,
@@ -100,8 +98,7 @@ describe("kickMainLoop", () => {
100
98
  });
101
99
 
102
100
  // Kick should reschedule to run sooner
103
- const segment = await kickMainLoop(ctx, "enqueue");
104
- expect(segment).toBe(getCurrentSegment());
101
+ await kickMainLoop(ctx, "enqueue");
105
102
 
106
103
  const afterStatus = await ctx.db.query("runStatus").unique();
107
104
  assert(afterStatus);
@@ -131,7 +128,7 @@ describe("kickMainLoop", () => {
131
128
  segment: nearFutureSegment,
132
129
  },
133
130
  );
134
- await ctx.db.patch(runStatus._id, {
131
+ await ctx.db.patch("runStatus", runStatus._id, {
135
132
  state: {
136
133
  kind: "scheduled",
137
134
  scheduledId,
@@ -142,8 +139,7 @@ describe("kickMainLoop", () => {
142
139
  });
143
140
 
144
141
  // Kick should not change state when saturated
145
- const segment = await kickMainLoop(ctx, "enqueue");
146
- expect(segment).toBe(getNextSegment());
142
+ await kickMainLoop(ctx, "enqueue");
147
143
  const afterStatus = await ctx.db.query("runStatus").unique();
148
144
  assert(afterStatus);
149
145
  expect(afterStatus.state.kind).toBe("scheduled");
@@ -161,7 +157,7 @@ describe("kickMainLoop", () => {
161
157
  // Delete runStatus
162
158
  const runStatus = await ctx.db.query("runStatus").unique();
163
159
  assert(runStatus);
164
- await ctx.db.delete(runStatus._id);
160
+ await ctx.db.delete("runStatus", runStatus._id);
165
161
 
166
162
  // Kick should recreate runStatus
167
163
  await kickMainLoop(ctx, "complete");
@@ -181,7 +177,7 @@ describe("kickMainLoop", () => {
181
177
  // Delete globals
182
178
  const globals = await ctx.db.query("globals").unique();
183
179
  assert(globals);
184
- await ctx.db.delete(globals._id);
180
+ await ctx.db.delete("globals", globals._id);
185
181
 
186
182
  // Kick should recreate globals
187
183
  await kickMainLoop(ctx, "complete");
@@ -195,16 +191,14 @@ describe("kickMainLoop", () => {
195
191
 
196
192
  test("handles race conditions between multiple kicks", async () => {
197
193
  const t = convexTest(schema, modules);
198
- // Run kicks in separate transactions to simulate concurrent access
199
- const segments = await Promise.all(
194
+ // Run kicks in separate transactions to simulate concurrent access.
195
+ // None should throw; the loser transactions just observe the winner's
196
+ // running state and return early.
197
+ await Promise.all(
200
198
  Array.from({ length: 10 }, () =>
201
- t.run(async (ctx) => {
202
- const segment = await kickMainLoop(ctx, "enqueue");
203
- return segment;
204
- }),
199
+ t.mutation((ctx) => kickMainLoop(ctx, "enqueue")),
205
200
  ),
206
201
  );
207
- expect(segments.filter((s) => s === getCurrentSegment())).toHaveLength(1);
208
202
 
209
203
  // Check final state in a new transaction
210
204
  await t.run(async (ctx) => {
@@ -259,7 +253,7 @@ describe("kickMainLoop", () => {
259
253
  internal.loop.main,
260
254
  { generation: 0n, segment },
261
255
  );
262
- await ctx.db.patch(runStatus._id, {
256
+ await ctx.db.patch("runStatus", runStatus._id, {
263
257
  state: {
264
258
  generation: 0n,
265
259
  saturated: false,
@@ -274,7 +268,10 @@ describe("kickMainLoop", () => {
274
268
  assert(afterStatus);
275
269
  expect(afterStatus.state.kind).toBe("running");
276
270
  assert(afterStatus.state.kind === "running");
277
- const scheduledJob = await ctx.db.system.get(scheduledId);
271
+ const scheduledJob = await ctx.db.system.get(
272
+ "_scheduled_functions",
273
+ scheduledId,
274
+ );
278
275
  assert(scheduledJob);
279
276
  expect(scheduledJob.state.kind).toBe("canceled");
280
277
  });