DEV(cache_critical_dns): improve postgres_healthcheck
The `PG::Connection#ping` method is only reliable for checking if the given host is accepting connections, and not if the authentication details are valid. This extends the healthcheck to confirm that the auth details are able to both create a connection and execute queries against the database. We expect the empty query to return an empty result set, so we can assert on that. If a failure occurs for any reason, the healthcheck will return false.
This commit is contained in:
parent
6c8f491dc3
commit
0553788d3b
|
@ -158,16 +158,18 @@ ensure
|
|||
end
|
||||
|
||||
def postgres_healthcheck(host:, user:, password:, dbname:)
|
||||
response = PG::Connection.ping(
|
||||
client = PG::Connection.new(
|
||||
host: host,
|
||||
user: user,
|
||||
password: password,
|
||||
dbname: dbname,
|
||||
connect_timeout: 2, # minimum
|
||||
)
|
||||
response == PG::Constants::PQPING_OK
|
||||
client.exec(';').none?
|
||||
rescue
|
||||
false
|
||||
ensure
|
||||
client.close if client
|
||||
end
|
||||
|
||||
HEALTH_CHECKS = {
|
||||
|
|
Loading…
Reference in New Issue