class PactBroker::DB::AdvisoryLock

Public Class Methods

new(database_connection, name, type = :pg_try_advisory_lock) click to toggle source
# File lib/pact_broker/db/advisory_lock.rb, line 20
def initialize(database_connection, name, type = :pg_try_advisory_lock)
  @database_connection = database_connection
  @name = name
  @type = type
  @lock_obtained = false
  register_advisory_lock if postgres?
end

Public Instance Methods

lock_obtained?() click to toggle source
# File lib/pact_broker/db/advisory_lock.rb, line 42
def lock_obtained?
  @lock_obtained
end
with_lock() { || ... } click to toggle source
# File lib/pact_broker/db/advisory_lock.rb, line 28
def with_lock
  if postgres?
    @database_connection.with_advisory_lock(@name) do
      logger.debug("Lock #{@name} obtained")
      @lock_obtained = true
      yield
    end
  else
    logger.warn("Executing block without lock as this is not a Postgres database")
    @lock_obtained = true
    yield
  end
end

Private Instance Methods

postgres?() click to toggle source
# File lib/pact_broker/db/advisory_lock.rb, line 48
def postgres?
  @database_connection.adapter_scheme.to_s =~ /postgres/
end
register_advisory_lock() click to toggle source
# File lib/pact_broker/db/advisory_lock.rb, line 52
def register_advisory_lock
  @database_connection.extension :pg_advisory_lock
  @database_connection.register_advisory_lock(@name, @type)
end