dblnk_is_busy returns 1 for dead connecitons

From: Merlin Moncure <mmoncure(at)gmail(dot)com>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: dblnk_is_busy returns 1 for dead connecitons
Date: 2020-08-03 00:18:08
Message-ID: CAHyXU0wRz265W16bN3zmoGao3X=VN8+cSz09PNHg4NyUp9pLoQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hackers,

I have a situation that I am observing where dblink_is_busy returns 1
even though the connection is long gone. tcp keepalives are on and
the connection has been dead for several hours. Looking at the call
for dblink_is_busy, I see that it is a thin wrapper to PQusBusy().
If I attempt to call dblink_get_result(), the result comes back with
an error mesage, 'invalid socket'. This however is not helpful since
there is no way to probe for dead connections in dblink that appears
to be 100% reliable. My workaround that I had been relying on was to
call dblink_get_notify twice, which for some weird reason forced the
connection error to the surface. However for whatever reason, that is
not working here.

In cases the connection was cancelled via dblink_cancel_query(), so in
some scenarios connections cancelled that way seem to become 'stuck'.
Any thoughts on this?

merlin

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Thomas Munro 2020-08-03 00:24:55 Re: Comment simplehash/dynahash trade-offs
Previous Message Thomas Munro 2020-08-03 00:12:57 Re: LDAP check flapping on crake due to race