effect-mq 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +167 -22
- package/dist/Job.d.ts +67 -4
- package/dist/Job.d.ts.map +1 -1
- package/dist/Job.js +76 -3
- package/dist/Job.js.map +1 -1
- package/dist/JobStore.d.ts +174 -3
- package/dist/JobStore.d.ts.map +1 -1
- package/dist/JobStore.js +89 -1
- package/dist/JobStore.js.map +1 -1
- package/dist/MemoryJobStore.d.ts +37 -6
- package/dist/MemoryJobStore.d.ts.map +1 -1
- package/dist/MemoryJobStore.js +201 -25
- package/dist/MemoryJobStore.js.map +1 -1
- package/dist/Worker.d.ts +5 -1
- package/dist/Worker.d.ts.map +1 -1
- package/dist/Worker.js +116 -10
- package/dist/Worker.js.map +1 -1
- package/dist/{drizzle → drizzle-postgres}/DrizzleJobStore.d.ts +18 -2
- package/dist/drizzle-postgres/DrizzleJobStore.d.ts.map +1 -0
- package/dist/{drizzle → drizzle-postgres}/DrizzleJobStore.js +287 -40
- package/dist/drizzle-postgres/DrizzleJobStore.js.map +1 -0
- package/dist/drizzle-postgres/index.d.ts.map +1 -0
- package/dist/drizzle-postgres/index.js.map +1 -0
- package/dist/{drizzle → drizzle-postgres}/schema.d.ts +306 -4
- package/dist/drizzle-postgres/schema.d.ts.map +1 -0
- package/dist/{drizzle → drizzle-postgres}/schema.js +36 -2
- package/dist/drizzle-postgres/schema.js.map +1 -0
- package/dist/redis/RedisJobStore.d.ts +56 -0
- package/dist/redis/RedisJobStore.d.ts.map +1 -0
- package/dist/redis/RedisJobStore.js +385 -0
- package/dist/redis/RedisJobStore.js.map +1 -0
- package/dist/redis/index.d.ts +9 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/redis/index.js +9 -0
- package/dist/redis/index.js.map +1 -0
- package/dist/redis/scripts.d.ts +168 -0
- package/dist/redis/scripts.d.ts.map +1 -0
- package/dist/redis/scripts.js +755 -0
- package/dist/redis/scripts.js.map +1 -0
- package/dist/testing/conformance.d.ts.map +1 -1
- package/dist/testing/conformance.js +332 -3
- package/dist/testing/conformance.js.map +1 -1
- package/package.json +8 -4
- package/src/Job.ts +189 -5
- package/src/JobStore.ts +252 -4
- package/src/MemoryJobStore.ts +273 -26
- package/src/Worker.ts +152 -10
- package/src/{drizzle → drizzle-postgres}/DrizzleJobStore.ts +412 -40
- package/src/{drizzle → drizzle-postgres}/schema.ts +52 -3
- package/src/redis/RedisJobStore.ts +597 -0
- package/src/redis/index.ts +8 -0
- package/src/redis/scripts.ts +862 -0
- package/src/testing/conformance.ts +421 -3
- package/dist/drizzle/DrizzleJobStore.d.ts.map +0 -1
- package/dist/drizzle/DrizzleJobStore.js.map +0 -1
- package/dist/drizzle/index.d.ts.map +0 -1
- package/dist/drizzle/index.js.map +0 -1
- package/dist/drizzle/schema.d.ts.map +0 -1
- package/dist/drizzle/schema.js.map +0 -1
- /package/dist/{drizzle → drizzle-postgres}/index.d.ts +0 -0
- /package/dist/{drizzle → drizzle-postgres}/index.js +0 -0
- /package/src/{drizzle → drizzle-postgres}/index.ts +0 -0
|
@@ -35,6 +35,7 @@ const baseRequest = (
|
|
|
35
35
|
attemptsMax: 1,
|
|
36
36
|
backoff: undefined,
|
|
37
37
|
keep: undefined,
|
|
38
|
+
timeoutMs: undefined,
|
|
38
39
|
delayMs: 0,
|
|
39
40
|
...overrides
|
|
40
41
|
})
|
|
@@ -320,11 +321,12 @@ export const jobStoreConformance = (
|
|
|
320
321
|
)
|
|
321
322
|
assert(claim._tag === "Claimed")
|
|
322
323
|
|
|
323
|
-
const
|
|
324
|
+
const result = yield* store.extendLocks(
|
|
324
325
|
[{ id, token: "t-1" }, { id: JobId("ghost"), token: "t-9" }],
|
|
325
326
|
20_000
|
|
326
327
|
)
|
|
327
|
-
expect(lost).toEqual(["ghost"])
|
|
328
|
+
expect(result.lost).toEqual(["ghost"])
|
|
329
|
+
expect(result.cancelRequested).toEqual([])
|
|
328
330
|
|
|
329
331
|
// The extension outlives the original lock duration.
|
|
330
332
|
yield* TestClock.adjust(15_000)
|
|
@@ -620,7 +622,8 @@ export const jobStoreConformance = (
|
|
|
620
622
|
delayed: 1,
|
|
621
623
|
active: 1,
|
|
622
624
|
completed: 0,
|
|
623
|
-
failed: 0
|
|
625
|
+
failed: 0,
|
|
626
|
+
cancelled: 0
|
|
624
627
|
})
|
|
625
628
|
const other = yield* store.counts(QueueName("other"))
|
|
626
629
|
expect(other.waiting).toBe(1)
|
|
@@ -650,5 +653,420 @@ export const jobStoreConformance = (
|
|
|
650
653
|
expect(yield* store.getAttempts(JobId("nope"))).toEqual([])
|
|
651
654
|
})
|
|
652
655
|
))
|
|
656
|
+
|
|
657
|
+
it.effect("cancel makes waiting and delayed jobs terminal with a ledger entry", () =>
|
|
658
|
+
withStore((store) =>
|
|
659
|
+
Effect.gen(function*() {
|
|
660
|
+
const waiting = yield* store.enqueue(baseRequest())
|
|
661
|
+
const delayed = yield* store.enqueue(baseRequest({ delayMs: 60_000 }))
|
|
662
|
+
yield* store.cancel(waiting.id)
|
|
663
|
+
yield* store.cancel(delayed.id)
|
|
664
|
+
|
|
665
|
+
for (const id of [waiting.id, delayed.id]) {
|
|
666
|
+
const job = yield* store.getJob(id)
|
|
667
|
+
assert(Option.isSome(job))
|
|
668
|
+
expect(job.value.state).toBe("cancelled")
|
|
669
|
+
expect(job.value.finishedAt).toBeDefined()
|
|
670
|
+
const attempts = yield* store.getAttempts(id)
|
|
671
|
+
expect(attempts.map((attempt) => attempt.outcome)).toEqual(["cancelled"])
|
|
672
|
+
}
|
|
673
|
+
const claim = yield* store.claim(claimOptions())
|
|
674
|
+
assert(claim._tag === "Empty")
|
|
675
|
+
|
|
676
|
+
// Terminal jobs cannot be cancelled again; unknown ids are reported.
|
|
677
|
+
const again = yield* Effect.flip(store.cancel(waiting.id))
|
|
678
|
+
expect(again._tag).toBe("JobNotCancellableError")
|
|
679
|
+
const missing = yield* Effect.flip(store.cancel(JobId("nope")))
|
|
680
|
+
expect(missing._tag).toBe("JobNotFoundError")
|
|
681
|
+
})
|
|
682
|
+
))
|
|
683
|
+
|
|
684
|
+
it.effect("cancel on an active job flags it; the heartbeat reports it; ack Cancelled finishes it", () =>
|
|
685
|
+
withStore((store) =>
|
|
686
|
+
Effect.gen(function*() {
|
|
687
|
+
const { id } = yield* store.enqueue(baseRequest())
|
|
688
|
+
const claim = yield* store.claim(claimOptions())
|
|
689
|
+
assert(claim._tag === "Claimed")
|
|
690
|
+
|
|
691
|
+
yield* store.cancel(id)
|
|
692
|
+
const flagged = yield* store.getJob(id)
|
|
693
|
+
assert(Option.isSome(flagged))
|
|
694
|
+
expect(flagged.value.state).toBe("active")
|
|
695
|
+
expect(flagged.value.cancelRequested).toBe(true)
|
|
696
|
+
|
|
697
|
+
// The heartbeat surfaces the request instead of extending the lock.
|
|
698
|
+
const heartbeat = yield* store.extendLocks([{ id, token: "t-1" }], 20_000)
|
|
699
|
+
expect(heartbeat.cancelRequested).toEqual([id])
|
|
700
|
+
expect(heartbeat.lost).toEqual([])
|
|
701
|
+
|
|
702
|
+
yield* store.ack(id, "t-1", { _tag: "Cancelled" })
|
|
703
|
+
const done = yield* store.getJob(id)
|
|
704
|
+
assert(Option.isSome(done))
|
|
705
|
+
expect(done.value.state).toBe("cancelled")
|
|
706
|
+
expect(done.value.cancelRequested).toBe(false)
|
|
707
|
+
const attempts = yield* store.getAttempts(id)
|
|
708
|
+
expect(attempts.map((attempt) => attempt.outcome)).toEqual(["cancelled"])
|
|
709
|
+
})
|
|
710
|
+
))
|
|
711
|
+
|
|
712
|
+
it.effect("release and stall recovery honour a pending cancel request", () =>
|
|
713
|
+
withStore((store) =>
|
|
714
|
+
Effect.gen(function*() {
|
|
715
|
+
// release path
|
|
716
|
+
const first = yield* store.enqueue(baseRequest())
|
|
717
|
+
const claimA = yield* store.claim(claimOptions())
|
|
718
|
+
assert(claimA._tag === "Claimed")
|
|
719
|
+
yield* store.cancel(first.id)
|
|
720
|
+
yield* store.release(first.id, "t-1")
|
|
721
|
+
const released = yield* store.getJob(first.id)
|
|
722
|
+
assert(Option.isSome(released))
|
|
723
|
+
expect(released.value.state).toBe("cancelled")
|
|
724
|
+
|
|
725
|
+
// stall path
|
|
726
|
+
const second = yield* store.enqueue(baseRequest({ payload: { n: 2 } }))
|
|
727
|
+
const claimB = yield* store.claim(claimOptions({ token: "t-2", lockDurationMs: 1_000 }))
|
|
728
|
+
assert(claimB._tag === "Claimed")
|
|
729
|
+
yield* store.cancel(second.id)
|
|
730
|
+
yield* TestClock.adjust(1_000)
|
|
731
|
+
const recovered = yield* store.recoverStalled({ maxStalledCount: 5 })
|
|
732
|
+
// Cancelled-by-recovery jobs are not reported as stalled recoveries.
|
|
733
|
+
expect(recovered).toEqual([])
|
|
734
|
+
const swept = yield* store.getJob(second.id)
|
|
735
|
+
assert(Option.isSome(swept))
|
|
736
|
+
expect(swept.value.state).toBe("cancelled")
|
|
737
|
+
})
|
|
738
|
+
))
|
|
739
|
+
|
|
740
|
+
it.effect("promote runs a delayed job now and rejects other states", () =>
|
|
741
|
+
withStore((store) =>
|
|
742
|
+
Effect.gen(function*() {
|
|
743
|
+
const { id } = yield* store.enqueue(baseRequest({ delayMs: 60_000 }))
|
|
744
|
+
const early = yield* store.claim(claimOptions())
|
|
745
|
+
assert(early._tag === "Empty")
|
|
746
|
+
|
|
747
|
+
yield* store.promote(id)
|
|
748
|
+
const claim = yield* store.claim(claimOptions({ token: "t-2" }))
|
|
749
|
+
assert(claim._tag === "Claimed")
|
|
750
|
+
expect(claim.job.id).toBe(id)
|
|
751
|
+
|
|
752
|
+
const wrongState = yield* Effect.flip(store.promote(id))
|
|
753
|
+
expect(wrongState._tag).toBe("JobNotPromotableError")
|
|
754
|
+
const missing = yield* Effect.flip(store.promote(JobId("nope")))
|
|
755
|
+
expect(missing._tag).toBe("JobNotFoundError")
|
|
756
|
+
})
|
|
757
|
+
))
|
|
758
|
+
|
|
759
|
+
it.effect("pause stops claims for a queue until resume", () =>
|
|
760
|
+
withStore((store) =>
|
|
761
|
+
Effect.gen(function*() {
|
|
762
|
+
yield* store.enqueue(baseRequest())
|
|
763
|
+
yield* store.pause(QueueName("default"))
|
|
764
|
+
expect(yield* store.pausedQueues()).toEqual(["default"])
|
|
765
|
+
|
|
766
|
+
const paused = yield* store.claim(claimOptions())
|
|
767
|
+
assert(paused._tag === "Empty")
|
|
768
|
+
|
|
769
|
+
// Other queues are unaffected.
|
|
770
|
+
yield* store.enqueue(baseRequest({ queue: QueueName("other") }))
|
|
771
|
+
const other = yield* store.claim(claimOptions({ queue: QueueName("other"), token: "t-2" }))
|
|
772
|
+
assert(other._tag === "Claimed")
|
|
773
|
+
|
|
774
|
+
// Resume wakes idle workers and claims flow again.
|
|
775
|
+
const empty = yield* store.claim(claimOptions({ token: "t-3" }))
|
|
776
|
+
assert(empty._tag === "Empty")
|
|
777
|
+
const waiter = yield* Effect.forkChild(
|
|
778
|
+
store.awaitWake([QueueName("default")], empty.wakeToken)
|
|
779
|
+
)
|
|
780
|
+
yield* Effect.yieldNow
|
|
781
|
+
yield* store.resume(QueueName("default"))
|
|
782
|
+
yield* Fiber.join(waiter)
|
|
783
|
+
expect(yield* store.pausedQueues()).toEqual([])
|
|
784
|
+
const resumed = yield* store.claim(claimOptions({ token: "t-4" }))
|
|
785
|
+
assert(resumed._tag === "Claimed")
|
|
786
|
+
})
|
|
787
|
+
))
|
|
788
|
+
|
|
789
|
+
it.effect("schedules: upsert, list, due, conditional advance, remove", () =>
|
|
790
|
+
withStore((store) =>
|
|
791
|
+
Effect.gen(function*() {
|
|
792
|
+
const schedule: JobStore.ScheduleRecord = {
|
|
793
|
+
key: JobStore.ScheduleKey("TestJob/hourly"),
|
|
794
|
+
jobName: "TestJob",
|
|
795
|
+
queue: QueueName("default"),
|
|
796
|
+
cron: "0 * * * *",
|
|
797
|
+
tz: undefined,
|
|
798
|
+
everyMs: undefined,
|
|
799
|
+
payload: { n: 1 },
|
|
800
|
+
metadata: { source: "conformance" },
|
|
801
|
+
priority: 2,
|
|
802
|
+
attemptsMax: 3,
|
|
803
|
+
backoff: { _tag: "fixed", delayMs: 1_000 },
|
|
804
|
+
keep: undefined,
|
|
805
|
+
timeoutMs: 5_000,
|
|
806
|
+
nextRunAt: 60_000
|
|
807
|
+
}
|
|
808
|
+
yield* store.upsertSchedule(schedule)
|
|
809
|
+
expect(yield* store.listSchedules()).toEqual([schedule])
|
|
810
|
+
expect(yield* store.listSchedules({ jobName: "OtherJob" })).toEqual([])
|
|
811
|
+
|
|
812
|
+
// Not due yet (TestClock starts at 0).
|
|
813
|
+
expect(yield* store.dueSchedules()).toEqual([])
|
|
814
|
+
yield* TestClock.adjust(60_000)
|
|
815
|
+
expect(yield* store.dueSchedules()).toEqual([schedule])
|
|
816
|
+
|
|
817
|
+
// Upsert replaces in place.
|
|
818
|
+
yield* store.upsertSchedule({ ...schedule, priority: 9 })
|
|
819
|
+
expect((yield* store.listSchedules())[0]?.priority).toBe(9)
|
|
820
|
+
|
|
821
|
+
// Conditional advance: a stale expectation is a no-op.
|
|
822
|
+
yield* store.advanceSchedule(schedule.key, 999, 120_000)
|
|
823
|
+
expect((yield* store.listSchedules())[0]?.nextRunAt).toBe(60_000)
|
|
824
|
+
yield* store.advanceSchedule(schedule.key, 60_000, 120_000)
|
|
825
|
+
expect((yield* store.listSchedules())[0]?.nextRunAt).toBe(120_000)
|
|
826
|
+
expect(yield* store.dueSchedules()).toEqual([])
|
|
827
|
+
|
|
828
|
+
expect(yield* store.removeSchedule(schedule.key)).toBe(true)
|
|
829
|
+
expect(yield* store.removeSchedule(schedule.key)).toBe(false)
|
|
830
|
+
expect(yield* store.listSchedules()).toEqual([])
|
|
831
|
+
})
|
|
832
|
+
))
|
|
833
|
+
|
|
834
|
+
it.effect("completion wins over a pending cancel request", () =>
|
|
835
|
+
withStore((store) =>
|
|
836
|
+
Effect.gen(function*() {
|
|
837
|
+
const { id } = yield* store.enqueue(baseRequest())
|
|
838
|
+
const claim = yield* store.claim(claimOptions())
|
|
839
|
+
assert(claim._tag === "Claimed")
|
|
840
|
+
yield* store.cancel(id)
|
|
841
|
+
|
|
842
|
+
yield* store.ack(id, "t-1", { _tag: "Complete", exit: { ok: true } })
|
|
843
|
+
const job = yield* store.getJob(id)
|
|
844
|
+
assert(Option.isSome(job))
|
|
845
|
+
expect(job.value.state).toBe("completed")
|
|
846
|
+
expect(job.value.cancelRequested).toBe(false)
|
|
847
|
+
})
|
|
848
|
+
))
|
|
849
|
+
|
|
850
|
+
it.effect("a natural failure racing a cancel is cancelled, not revived", () =>
|
|
851
|
+
withStore((store) =>
|
|
852
|
+
Effect.gen(function*() {
|
|
853
|
+
const { id } = yield* store.enqueue(baseRequest({ attemptsMax: 5 }))
|
|
854
|
+
const claim = yield* store.claim(claimOptions())
|
|
855
|
+
assert(claim._tag === "Claimed")
|
|
856
|
+
yield* store.cancel(id)
|
|
857
|
+
|
|
858
|
+
// The handler failed on its own before the heartbeat could
|
|
859
|
+
// interrupt it; the retry ack must honour the pending cancel.
|
|
860
|
+
yield* store.ack(id, "t-1", { _tag: "Retry", exit: { boom: 1 }, delayMs: 1_000 })
|
|
861
|
+
const job = yield* store.getJob(id)
|
|
862
|
+
assert(Option.isSome(job))
|
|
863
|
+
expect(job.value.state).toBe("cancelled")
|
|
864
|
+
expect(job.value.cancelRequested).toBe(false)
|
|
865
|
+
const attempts = yield* store.getAttempts(id)
|
|
866
|
+
expect(attempts.map((attempt) => attempt.outcome)).toEqual(["cancelled"])
|
|
867
|
+
const nothing = yield* store.claim(claimOptions({ token: "t-2" }))
|
|
868
|
+
assert(nothing._tag === "Empty")
|
|
869
|
+
})
|
|
870
|
+
))
|
|
871
|
+
|
|
872
|
+
it.effect("ack Cancelled with a wrong token fails with LockLostError", () =>
|
|
873
|
+
withStore((store) =>
|
|
874
|
+
Effect.gen(function*() {
|
|
875
|
+
const { id } = yield* store.enqueue(baseRequest())
|
|
876
|
+
const claim = yield* store.claim(claimOptions())
|
|
877
|
+
assert(claim._tag === "Claimed")
|
|
878
|
+
yield* store.cancel(id)
|
|
879
|
+
|
|
880
|
+
const wrong = yield* Effect.flip(store.ack(id, "not-mine", { _tag: "Cancelled" }))
|
|
881
|
+
expect(wrong._tag).toBe("LockLostError")
|
|
882
|
+
const job = yield* store.getJob(id)
|
|
883
|
+
assert(Option.isSome(job))
|
|
884
|
+
expect(job.value.state).toBe("active")
|
|
885
|
+
expect(job.value.cancelRequested).toBe(true)
|
|
886
|
+
})
|
|
887
|
+
))
|
|
888
|
+
|
|
889
|
+
it.effect("cancel applies the keep retention policy", () =>
|
|
890
|
+
withStore((store) =>
|
|
891
|
+
Effect.gen(function*() {
|
|
892
|
+
const keep = { count: 1 }
|
|
893
|
+
const ids: Array<JobStore.JobId> = []
|
|
894
|
+
for (let i = 0; i < 3; i++) {
|
|
895
|
+
const { id } = yield* store.enqueue(baseRequest({ payload: { n: i }, keep }))
|
|
896
|
+
ids.push(id)
|
|
897
|
+
yield* store.cancel(id)
|
|
898
|
+
yield* TestClock.adjust(10)
|
|
899
|
+
}
|
|
900
|
+
const listed = yield* store.list({ states: ["cancelled"] })
|
|
901
|
+
expect(listed.items).toHaveLength(1)
|
|
902
|
+
expect(listed.items[0]?.id).toBe(ids[2])
|
|
903
|
+
})
|
|
904
|
+
))
|
|
905
|
+
|
|
906
|
+
it.effect("upserting an unchanged cadence preserves the next occurrence; a changed one resets it", () =>
|
|
907
|
+
withStore((store) =>
|
|
908
|
+
Effect.gen(function*() {
|
|
909
|
+
const base: JobStore.ScheduleRecord = {
|
|
910
|
+
key: JobStore.ScheduleKey("TestJob/pulse"),
|
|
911
|
+
jobName: "TestJob",
|
|
912
|
+
queue: QueueName("default"),
|
|
913
|
+
cron: undefined,
|
|
914
|
+
tz: undefined,
|
|
915
|
+
everyMs: 60_000,
|
|
916
|
+
payload: {},
|
|
917
|
+
metadata: {},
|
|
918
|
+
priority: 0,
|
|
919
|
+
attemptsMax: 1,
|
|
920
|
+
backoff: undefined,
|
|
921
|
+
keep: undefined,
|
|
922
|
+
timeoutMs: undefined,
|
|
923
|
+
nextRunAt: 60_000
|
|
924
|
+
}
|
|
925
|
+
yield* store.upsertSchedule(base)
|
|
926
|
+
|
|
927
|
+
// A deploy-time re-registration recomputes nextRunAt from "now" —
|
|
928
|
+
// the store must keep the original grid point.
|
|
929
|
+
yield* TestClock.adjust(30_000)
|
|
930
|
+
yield* store.upsertSchedule({ ...base, priority: 5, nextRunAt: 90_000 })
|
|
931
|
+
const preserved = (yield* store.listSchedules())[0]
|
|
932
|
+
expect(preserved?.nextRunAt).toBe(60_000)
|
|
933
|
+
expect(preserved?.priority).toBe(5)
|
|
934
|
+
|
|
935
|
+
// Changing the cadence takes the caller's fresh nextRunAt.
|
|
936
|
+
yield* store.upsertSchedule({ ...base, everyMs: 120_000, nextRunAt: 150_000 })
|
|
937
|
+
expect((yield* store.listSchedules())[0]?.nextRunAt).toBe(150_000)
|
|
938
|
+
})
|
|
939
|
+
))
|
|
940
|
+
|
|
941
|
+
it.effect("schedule records round-trip every/tz fields; due order is by nextRunAt; list filters by queue", () =>
|
|
942
|
+
withStore((store) =>
|
|
943
|
+
Effect.gen(function*() {
|
|
944
|
+
const everySchedule: JobStore.ScheduleRecord = {
|
|
945
|
+
key: JobStore.ScheduleKey("TestJob/every"),
|
|
946
|
+
jobName: "TestJob",
|
|
947
|
+
queue: QueueName("default"),
|
|
948
|
+
cron: undefined,
|
|
949
|
+
tz: undefined,
|
|
950
|
+
everyMs: 90_000,
|
|
951
|
+
payload: { n: 1 },
|
|
952
|
+
metadata: {},
|
|
953
|
+
priority: 0,
|
|
954
|
+
attemptsMax: 1,
|
|
955
|
+
backoff: undefined,
|
|
956
|
+
keep: undefined,
|
|
957
|
+
timeoutMs: undefined,
|
|
958
|
+
nextRunAt: 90_000
|
|
959
|
+
}
|
|
960
|
+
const cronSchedule: JobStore.ScheduleRecord = {
|
|
961
|
+
...everySchedule,
|
|
962
|
+
key: JobStore.ScheduleKey("TestJob/tz"),
|
|
963
|
+
queue: QueueName("other"),
|
|
964
|
+
cron: "0 9 * * *",
|
|
965
|
+
tz: "America/New_York",
|
|
966
|
+
everyMs: undefined,
|
|
967
|
+
nextRunAt: 30_000
|
|
968
|
+
}
|
|
969
|
+
yield* store.upsertSchedule(everySchedule)
|
|
970
|
+
yield* store.upsertSchedule(cronSchedule)
|
|
971
|
+
|
|
972
|
+
const byQueue = yield* store.listSchedules({ queue: QueueName("other") })
|
|
973
|
+
expect(byQueue).toEqual([cronSchedule])
|
|
974
|
+
expect(byQueue[0]?.tz).toBe("America/New_York")
|
|
975
|
+
const roundTripped = (yield* store.listSchedules({ queue: QueueName("default") }))[0]
|
|
976
|
+
expect(roundTripped?.everyMs).toBe(90_000)
|
|
977
|
+
|
|
978
|
+
// Both due: ordered by nextRunAt ascending.
|
|
979
|
+
yield* TestClock.adjust(90_000)
|
|
980
|
+
const due = yield* store.dueSchedules()
|
|
981
|
+
expect(due.map((schedule) => schedule.key)).toEqual([
|
|
982
|
+
"TestJob/tz",
|
|
983
|
+
"TestJob/every"
|
|
984
|
+
])
|
|
985
|
+
})
|
|
986
|
+
))
|
|
987
|
+
|
|
988
|
+
it.effect("counts stay consistent across cancel, retry, keep pruning, and remove", () =>
|
|
989
|
+
withStore((store) =>
|
|
990
|
+
Effect.gen(function*() {
|
|
991
|
+
// Three completions with keep {count: 1}: two get pruned.
|
|
992
|
+
for (let i = 0; i < 3; i++) {
|
|
993
|
+
const { id } = yield* store.enqueue(baseRequest({ payload: { n: i }, keep: { count: 1 } }))
|
|
994
|
+
const claim = yield* store.claim(claimOptions({ token: `t-${i}` }))
|
|
995
|
+
assert(claim._tag === "Claimed")
|
|
996
|
+
yield* store.ack(id, `t-${i}`, { _tag: "Complete", exit: undefined })
|
|
997
|
+
yield* TestClock.adjust(10)
|
|
998
|
+
}
|
|
999
|
+
expect((yield* store.counts()).completed).toBe(1)
|
|
1000
|
+
|
|
1001
|
+
// Cancel a waiting job.
|
|
1002
|
+
const doomed = yield* store.enqueue(baseRequest({ name: "Doomed" }))
|
|
1003
|
+
yield* store.cancel(doomed.id)
|
|
1004
|
+
expect((yield* store.counts()).cancelled).toBe(1)
|
|
1005
|
+
|
|
1006
|
+
// Fail a job, then admin-retry it: failed -> waiting.
|
|
1007
|
+
const flaky = yield* store.enqueue(baseRequest())
|
|
1008
|
+
const claim = yield* store.claim(claimOptions({ token: "t-f" }))
|
|
1009
|
+
assert(claim._tag === "Claimed")
|
|
1010
|
+
yield* store.ack(flaky.id, "t-f", { _tag: "Fail", exit: undefined })
|
|
1011
|
+
expect((yield* store.counts()).failed).toBe(1)
|
|
1012
|
+
yield* store.retry(flaky.id)
|
|
1013
|
+
|
|
1014
|
+
// Remove the surviving completed record.
|
|
1015
|
+
const completed = yield* store.list({ states: ["completed"] })
|
|
1016
|
+
const survivor = completed.items[0]
|
|
1017
|
+
assert(survivor !== undefined)
|
|
1018
|
+
expect(yield* store.remove(survivor.id)).toBe(true)
|
|
1019
|
+
|
|
1020
|
+
expect(yield* store.counts()).toEqual({
|
|
1021
|
+
waiting: 1,
|
|
1022
|
+
delayed: 0,
|
|
1023
|
+
active: 0,
|
|
1024
|
+
completed: 0,
|
|
1025
|
+
failed: 0,
|
|
1026
|
+
cancelled: 1
|
|
1027
|
+
})
|
|
1028
|
+
})
|
|
1029
|
+
))
|
|
1030
|
+
|
|
1031
|
+
it.effect("schedule payloads round-trip high-precision numbers and empty arrays exactly", () =>
|
|
1032
|
+
withStore((store) =>
|
|
1033
|
+
Effect.gen(function*() {
|
|
1034
|
+
const payload = { big: 1234567890123456, third: 1 / 3, empty: [] }
|
|
1035
|
+
const schedule: JobStore.ScheduleRecord = {
|
|
1036
|
+
key: JobStore.ScheduleKey("TestJob/precise"),
|
|
1037
|
+
jobName: "TestJob",
|
|
1038
|
+
queue: QueueName("default"),
|
|
1039
|
+
cron: undefined,
|
|
1040
|
+
tz: undefined,
|
|
1041
|
+
everyMs: 60_000,
|
|
1042
|
+
payload,
|
|
1043
|
+
metadata: {},
|
|
1044
|
+
priority: 0,
|
|
1045
|
+
attemptsMax: 1,
|
|
1046
|
+
backoff: undefined,
|
|
1047
|
+
keep: undefined,
|
|
1048
|
+
timeoutMs: undefined,
|
|
1049
|
+
nextRunAt: 60_000
|
|
1050
|
+
}
|
|
1051
|
+
yield* store.upsertSchedule(schedule)
|
|
1052
|
+
const stored = (yield* store.listSchedules())[0]
|
|
1053
|
+
expect(stored?.payload).toEqual(payload)
|
|
1054
|
+
})
|
|
1055
|
+
))
|
|
1056
|
+
|
|
1057
|
+
it.effect("delayed jobs still promote to waiting while their queue is paused", () =>
|
|
1058
|
+
withStore((store) =>
|
|
1059
|
+
Effect.gen(function*() {
|
|
1060
|
+
const { id } = yield* store.enqueue(baseRequest({ delayMs: 1_000 }))
|
|
1061
|
+
yield* store.pause(QueueName("default"))
|
|
1062
|
+
yield* TestClock.adjust(1_000)
|
|
1063
|
+
|
|
1064
|
+
const claim = yield* store.claim(claimOptions())
|
|
1065
|
+
assert(claim._tag === "Empty")
|
|
1066
|
+
const job = yield* store.getJob(id)
|
|
1067
|
+
assert(Option.isSome(job))
|
|
1068
|
+
expect(job.value.state).toBe("waiting")
|
|
1069
|
+
})
|
|
1070
|
+
))
|
|
653
1071
|
})
|
|
654
1072
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DrizzleJobStore.d.ts","sourceRoot":"","sources":["../../src/drizzle/DrizzleJobStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAI9C,OAAO,EAAS,KAAK,OAAO,EAAY,MAAM,EAAE,KAAK,EAAU,KAAK,KAAK,EAAU,MAAM,QAAQ,CAAA;AACjG,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAIlE;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,OAAO,GAAG,QAAQ,CAAC,QAAQ;IACjE,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;IACnE;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACxC;AA8DD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,YACN,sBAAsB,CAAC,GAAG,CAAC,KACnC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CA8ctF,CAAA;AAEJ;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,GAAG,QAAQ,CAAC,QAAQ,WACtC,sBAAsB,CAAC,OAAO,CAAC,KACvC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAO9D,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DrizzleJobStore.js","sourceRoot":"","sources":["../../src/drizzle/DrizzleJobStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drizzle/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD;;;;;GAKG;AACH,cAAc,aAAa,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drizzle/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD;;;;;GAKG;AACH,cAAc,aAAa,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/drizzle/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAU/C;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,SAAS,MAAM,GAAG,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6ClD,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,aAAa,SAClB,UAAU,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYlC,CAAA;AAEJ;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAExD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/drizzle/schema.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|