]> granicus.if.org Git - pgbouncer/commit
Do not wait server_login_retry for next connect if cancellation succeeds
authorMarco Slot <marco.slot@gmail.com>
Tue, 25 Sep 2018 10:10:52 +0000 (10:10 +0000)
committerDimitri Fontaine <dim@tapoueh.org>
Thu, 8 Nov 2018 15:13:05 +0000 (16:13 +0100)
commit28de1c6f93e7b225e7acacfcdd47c67c02832af2
treed66750ef0b5502048b60f618195bed61dcdd9343
parent7b97cb8d70b86a15c4517bff6b9ee03392a4cecd
Do not wait server_login_retry for next connect if cancellation succeeds

If postgres restarts while there are N cancellations in the queue,
pgbouncer is currently unavailable for at least N*server_login_retry
because it uses every new connection for one queued cancellation and
then waits server_login_retry before opening a new connection because
the last_connect_failed flag is still set to 1. This can lead to
prolonged downtime.

This changes fixes the issue by introducing a last_login_failed flag.
The last_connect_failed is now reset when a cancellation succeeds, such
that launch_new_connection no longer waits if pgbouncer manages to
connect, but has queued cancellations. The last_login_failed flag has
the same semantics as the last_connect_failed flag had previously, such
that check_fast_fail still rejects connections when there are no servers
available and the last login failed.
include/bouncer.h
src/objects.c