feat(migration): add lock heartbeats, predictive dry-run planning, and stricter ledger option validation

This commit is contained in:
2026-04-14 12:31:34 +00:00
parent 19ebdee31a
commit 1b4358aca5
17 changed files with 695 additions and 180 deletions
+20
View File
@@ -74,6 +74,26 @@ tap.test('MongoLedger: expired lock can be stolen', async () => {
expect(got2).toBeTrue();
});
tap.test('MongoLedger: holder can renew lock before expiry', async () => {
const ledger = new MongoLedger(db, 'renew-test');
await ledger.init();
const got = await ledger.acquireLock('renew-holder', 20);
expect(got).toBeTrue();
await new Promise((r) => setTimeout(r, 10));
const renewed = await ledger.renewLock('renew-holder', 40);
expect(renewed).toBeTrue();
await new Promise((r) => setTimeout(r, 25));
const stolenEarly = await ledger.acquireLock('other-holder', 40);
expect(stolenEarly).toBeFalse();
await new Promise((r) => setTimeout(r, 25));
const stolenLate = await ledger.acquireLock('other-holder', 40);
expect(stolenLate).toBeTrue();
});
tap.test('cleanup: close shared db', async () => {
await cleanup();
});