@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
@@ -126,7 +126,7 @@ describe("recovery", () => {
126
126
  const scheduledId = await makeDummyScheduledFunction(ctx, workId);
127
127
 
128
128
  // Delete the work to simulate it not being found
129
- await ctx.db.delete(workId);
129
+ await ctx.db.delete("work", workId);
130
130
 
131
131
  return [workId, scheduledId];
132
132
  });
@@ -160,9 +160,9 @@ describe("recovery", () => {
160
160
  const scheduledId = await makeDummyScheduledFunction(ctx, workId);
161
161
 
162
162
  // Update the work to have a different attempt number
163
- const work = await ctx.db.get(workId);
163
+ const work = await ctx.db.get("work", workId);
164
164
  if (work) {
165
- await ctx.db.patch(work._id, { attempts: 5 });
165
+ await ctx.db.patch("work", work._id, { attempts: 5 });
166
166
  }
167
167
 
168
168
  return [workId, scheduledId];
@@ -54,7 +54,7 @@ export async function recoveryHandler(
54
54
  console.debug(`${preamble} already in pendingCompletion, skipping`);
55
55
  continue;
56
56
  }
57
- const work = await ctx.db.get(job.workId);
57
+ const work = await ctx.db.get("work", job.workId);
58
58
  if (work === null) {
59
59
  // Completion already executed w/o retries, no need to do anything.
60
60
  console.warn(`${preamble} work not found, skipping`);
@@ -65,7 +65,10 @@ export async function recoveryHandler(
65
65
  console.warn(`${preamble} attempts mismatch, skipping`);
66
66
  continue;
67
67
  }
68
- const scheduled = await ctx.db.system.get(job.scheduledId);
68
+ const scheduled = await ctx.db.system.get(
69
+ "_scheduled_functions",
70
+ job.scheduledId,
71
+ );
69
72
  if (scheduled === null) {
70
73
  console.warn(`${preamble} not found in _scheduled_functions`);
71
74
  completionJobs.push({
@@ -18,6 +18,7 @@ export default defineSchema({
18
18
  internalState: defineTable({
19
19
  // Ensure that only one main is running at a time.
20
20
  generation: v.int64(),
21
+ // Track where we've scanned to, so we skip tombstones on re-scan.
21
22
  segmentCursors: v.object({
22
23
  incoming: segment,
23
24
  completion: segment,
@@ -42,7 +43,7 @@ export default defineSchema({
42
43
  ),
43
44
  }),
44
45
 
45
- // Singleton, written by `updateRunStatus` when running, by client or worker otherwise.
46
+ // Singleton, written by `main` when scheduling, by client or worker otherwise.
46
47
  // Safe to read from kickLoop, since it should update infrequently.
47
48
  runStatus: defineTable({
48
49
  state: v.union(