Class: Spree::OrderMutex
- Defined in:
- app/models/spree/order_mutex.rb
Defined Under Namespace
Classes: LockFailed
Class Method Summary collapse
-
.with_lock!(order) ⇒ Object
Obtain a lock on an order, execute the supplied block and then release the lock.
Methods inherited from Base
Methods included from Core::Permalinks
#generate_permalink, #save_permalink
Class Method Details
.with_lock!(order) ⇒ Object
Obtain a lock on an order, execute the supplied block and then release the lock. Raise a LockFailed exception immediately if we cannot obtain the lock. We raise instead of blocking to avoid tying up multiple server processes waiting for the lock.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'app/models/spree/order_mutex.rb', line 15 def with_lock!(order) raise ArgumentError, "order must be supplied" if order.nil? # limit the maximum lock time just in case a lock is somehow left in place accidentally expired.where(order:).delete_all begin order_mutex = create!(order:) rescue ActiveRecord::RecordNotUnique error = LockFailed.new("Could not obtain lock on order #{order.id}") logger.error error.inspect raise error end yield ensure order_mutex.destroy if order_mutex end |