Re: psql not responding to SIGINT upon db reconnection
Tristan Partin <tristan@neon.tech>
From: "Tristan Partin" <tristan@neon.tech>
To: "Robert Haas" <robertmhaas@gmail.com>
Cc: "Heikki Linnakangas" <hlinnaka@iki.fi>, "Tom Lane" <tgl@sss.pgh.pa.us>,
<pgsql-hackers@postgresql.org>, "Shlok Kyal" <shlok.kyal.oss@gmail.com>
Date: 2024-01-30T22:19:54Z
Lists: pgsql-hackers
Attachments
- v8-0001-Expose-PQsocketPoll-for-frontends.patch (text/x-patch) patch v8-0001
- v8-0002-Allow-SIGINT-to-cancel-psql-database-reconnection.patch (text/x-patch) patch v8-0002
On Fri Jan 12, 2024 at 11:13 AM CST, Tristan Partin wrote: > On Fri Jan 12, 2024 at 10:45 AM CST, Robert Haas wrote: > > On Mon, Jan 8, 2024 at 1:03 AM Tristan Partin <tristan@neon.tech> wrote: > > > I think the way to go is to expose some variation of libpq's > > > pqSocketPoll(), which I would be happy to put together a patch for. > > > Making frontends, psql in this case, have to reimplement the polling > > > logic doesn't strike me as fruitful, which is essentially what I have > > > done. > > > > I encourage further exploration of this line of attack. I fear that if > > I were to commit something like what you've posted up until now, > > people would complain that that code was too ugly to live, and I'd > > have a hard time telling them that they're wrong. > > Completely agree. Let me look into this. Perhaps I can get something up > next week or the week after. Not next week, but here is a respin. I've exposed pqSocketPoll as PQsocketPoll and am just using that. You can see the diff is so much smaller, which is great! In order to fight the race condition, I am just using a 1 second timeout instead of trying to integrate pselect or ppoll. We could add a PQsocketPPoll() to support those use cases, but I am not sure how available pselect and ppoll are. I guess on Windows we don't have pselect. I don't think using the pipe trick that Heikki mentioned earlier is suitable to expose via an API in libpq, but someone else might have a different opinion. Maybe this is good enough until someone complains? Most people would probably just chalk any latency between keypress and cancellation as network latency and not a hardcoded 1 second. Thanks for your feedback Robert! -- Tristan Partin Neon (https://neon.tech)
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix old, misleading comment for PGRES_POLLING_ACTIVE.
- e57fe3824ee7 17.0 landed
-
Remove reachable call to pg_unreachable().
- 12b964d7815b 17.0 landed
-
Allow SIGINT to cancel psql database reconnections.
- cafe1056558f 17.0 landed
-
Expose PQsocketPoll via libpq
- f5e4dedfa81f 17.0 landed
-
Fix query cancellation handling in psql
- 5d43c3c54d77 13.0 cited