feat(migration): add lock heartbeats, predictive dry-run planning, and stricter ledger option validation
This commit is contained in:
@@ -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();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user