Skip to content

feat: advisory locks for cron singleton#563

Open
joelmadaki77-cyber wants to merge 1 commit into
CalloraOrg:mainfrom
joelmadaki77-cyber:task/advisory-locks
Open

feat: advisory locks for cron singleton#563
joelmadaki77-cyber wants to merge 1 commit into
CalloraOrg:mainfrom
joelmadaki77-cyber:task/advisory-locks

Conversation

@joelmadaki77-cyber

Copy link
Copy Markdown

Use pg_try_advisory_lock to ensure only one replica runs a given cron job at a time.

  • src/workers/lockHelper.ts: withAdvisoryLock(pool, key, logger, fn) acquires a session-level advisory lock on a dedicated client, runs fn, then releases. Skips (returns false) on contention. Throws TypeError for non-integer keys. Client is always released.
  • src/services/idempotencySweeper.ts: refactored to delegate lock acquisition/release to withAdvisoryLock.
  • src/workers/lockHelper.test.ts: 7 tests covering acquire/run/release, skip on contention, rethrow on fn error, unlock failure logged, TypeError for non-integer key, client release on query error, missing rows treated as not-acquired.
  • src/services/idempotencySweeper.test.ts: updated mocks to use pool.connect() pattern required by withAdvisoryLock.

Closes #475

Use pg_try_advisory_lock to ensure only one replica runs a given
cron job at a time.

- src/workers/lockHelper.ts: withAdvisoryLock(pool, key, logger, fn)
  acquires a session-level advisory lock on a dedicated client,
  runs fn, then releases. Skips (returns false) on contention.
  Throws TypeError for non-integer keys. Client is always released.
- src/services/idempotencySweeper.ts: refactored to delegate
  lock acquisition/release to withAdvisoryLock.
- src/workers/lockHelper.test.ts: 7 tests covering acquire/run/release,
  skip on contention, rethrow on fn error, unlock failure logged,
  TypeError for non-integer key, client release on query error,
  missing rows treated as not-acquired.
- src/services/idempotencySweeper.test.ts: updated mocks to use
  pool.connect() pattern required by withAdvisoryLock.

Closes CalloraOrg#475
@drips-wave

drips-wave Bot commented Jun 27, 2026

Copy link
Copy Markdown

@joelmadaki77-cyber Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Postgres advisory locks for cron worker singleton enforcement

1 participant