Module: DB

Includes:
PactBroker::Logging
Defined in:
lib/pact_broker/db.rb

Constant Summary

Constants included from PactBroker::Logging

PactBroker::Logging::LOG_DIR, PactBroker::Logging::LOG_FILE_NAME

Class Method Summary collapse

Methods included from PactBroker::Logging

included, #logger

Class Method Details

.connect(db_credentials) ⇒ Object

Sequel by default does not test connections in its’ connection pool before handing them to a client. To enable connection testing you need to load the “connection_validator” extension like below. The connection validator extension is configurable, by default it only checks connections once per hour:

sequel.rubyforge.org/rdoc-plugins/files/lib/sequel/extensions/connection_validator_rb.html

Because most of our applications so far are accessed infrequently, there is very little overhead in checking each connection when it is requested. This takes care of stale connections.

A gotcha here is that it is not enough to enable the “connection_validator” extension, we also need to specify that we want to use the threaded connection pool, as noted in the documentation for the extension.



26
27
28
29
30
31
# File 'lib/pact_broker/db.rb', line 26

def self.connect db_credentials
  con = Sequel.connect(db_credentials.merge(:logger => logger, :pool_class => Sequel::ThreadedConnectionPool))
  con.extension(:connection_validator)
  con.pool.connection_validation_timeout = -1 #Check the connection on every request
  con
end

.health_checkObject



40
41
42
43
44
# File 'lib/pact_broker/db.rb', line 40

def self.health_check
  PACT_BROKER_DB.synchronize do |c| c
    PACT_BROKER_DB.valid_connection? c
  end
end