Sha256: 9df30ac135dc540a1c302506f0cab8d8f0585caa540aa102f40f8b0fddda2756

Contents?: true

Size: 555 Bytes

Versions: 24

Compression:

Stored size: 555 Bytes

Contents

module WithPgLock
  ##
  # Lock PG table, reload model and execute callback if
  # criterion is met
  #
  def with_pg_lock(callback, criterion = proc { true })
    # Some notes:
    #
    # * nowait is a postgre specific option and may not work with other databases
    # * nowait will raise an exception if the lock can not be acquired
    # * we are using a double check lock pattern to reduce lock acquisition
    with_lock('for update nowait') do
      reload
      callback.call if criterion.call
    end if criterion.call
  rescue
    nil
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
mumuki-domain-9.23.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.22.1 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.22.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.21.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.20.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.19.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.18.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.17.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.16.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.15.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.14.1 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.14.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.13.1 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.13.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.12.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.11.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.10.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.9.0 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.8.1 app/models/concerns/with_pg_lock.rb
mumuki-domain-9.8.0 app/models/concerns/with_pg_lock.rb