Renew address resolution in conn.reset #559
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
libpq resolves the host address while PQreset, but ruby-pg doesn't. This is because we explicit set the
hostaddr
connection parameter when the connection is established the first time. This prevents a newly DNS resolution when running PQresetStart.This patch adds DNS resolution to
conn.reset
Since we can not change the connection parameters after connection start, the underlying PGconn pointer is exchanged in reset_start2. This is done by a PQfinish() + PQconnectStart() sequence. That way the
hostaddr
parameter is updated and a new connection is established with it.There is a
/etc/hosts
andsudo
based test in the specs.The behavior of libpq is slightly different to that of ruby-pg.
It can be verified by the following code:
This gives the following output showing, that the IP address is updated:
Whereas libpq resolves similarly with
async_api=false
, but doesn't raise the error inconn.reset
but in the subsequentconn.exec
.Fixes #558