Class: Pgbus::UniquenessKey
- Defined in:
- app/models/pgbus/uniqueness_key.rb
Class Method Summary collapse
-
.acquire!(lock_key, queue_name:, msg_id:) ⇒ Object
Atomically try to acquire a uniqueness lock via INSERT …
-
.locked?(lock_key) ⇒ Boolean
Check if a key is currently locked.
-
.release!(lock_key) ⇒ Object
Release a uniqueness lock after job completion or DLQ.
Class Method Details
.acquire!(lock_key, queue_name:, msg_id:) ⇒ Object
Atomically try to acquire a uniqueness lock via INSERT … ON CONFLICT. PostgreSQL’s unique index on lock_key guarantees at most one caller wins. Returns true if acquired (row inserted), false if already locked.
11 12 13 14 15 16 17 |
# File 'app/models/pgbus/uniqueness_key.rb', line 11 def self.acquire!(lock_key, queue_name:, msg_id:) # rubocop:disable Naming/PredicateMethod connection.exec_query( "INSERT INTO #{table_name} (lock_key, queue_name, msg_id) " \ "VALUES ($1, $2, $3) ON CONFLICT (lock_key) DO NOTHING RETURNING lock_key", "UniquenessKey Acquire", [lock_key, queue_name, msg_id] ).rows.any? end |
.locked?(lock_key) ⇒ Boolean
Check if a key is currently locked.
28 29 30 31 32 33 34 |
# File 'app/models/pgbus/uniqueness_key.rb', line 28 def self.locked?(lock_key) result = connection.select_value( "SELECT 1 FROM #{table_name} WHERE lock_key = $1 LIMIT 1", "UniquenessKey Check", [lock_key] ) !result.nil? end |
.release!(lock_key) ⇒ Object
Release a uniqueness lock after job completion or DLQ.
20 21 22 23 24 25 |
# File 'app/models/pgbus/uniqueness_key.rb', line 20 def self.release!(lock_key) connection.exec_delete( "DELETE FROM #{table_name} WHERE lock_key = $1", "UniquenessKey Release", [lock_key] ) end |