module AdvisoryLock::Implementation
Public Instance Methods
exclusive(lock_identifier, connection = ActiveRecord::Base.connection) { || ... }
click to toggle source
# File lib/tracker/advisory_lock.rb, line 15 def exclusive(lock_identifier, connection = ActiveRecord::Base.connection, &_block) if obtained_lock?(lock_identifier, connection) begin yield ensure release_lock(lock_identifier, connection) end else raise "Cannot get lock #{lock_identifier.inspect}" end end
Private Instance Methods
obtained_lock?(lock_identifier, connection)
click to toggle source
# File lib/tracker/advisory_lock.rb, line 29 def obtained_lock?(lock_identifier, connection) connection.select_value("select pg_try_advisory_lock(#{lock_identifier})") end
release_lock(lock_identifier, connection)
click to toggle source
# File lib/tracker/advisory_lock.rb, line 33 def release_lock(lock_identifier, connection) connection.execute "select pg_advisory_unlock(#{lock_identifier})" end