Class: SpreeCmCommissioner::IdempotencyKey
- Defined in:
- app/models/spree_cm_commissioner/idempotency_key.rb
Class Method Summary collapse
-
.run_once(key) ⇒ Object
Runs the block exactly once per key.
Class Method Details
.run_once(key) ⇒ Object
Runs the block exactly once per key. A re-run finds the row and no-ops. Key row + block side effects commit atomically. ‘requires_new: true` opens a savepoint so a rescued insert race rolls back only this block, not an outer txn.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'app/models/spree_cm_commissioner/idempotency_key.rb', line 6 def self.run_once(key) return yield if key.blank? transaction(requires_new: true) do create!(key: key) yield end rescue ActiveRecord::RecordNotUnique CmAppLogger.log( label: 'SpreeCmCommissioner::IdempotencyKey.run_once', data: { event: 'duplicate_skipped', key: key } ) nil # already applied by a concurrent run end |