RE: Add client connection check during the execution of the query
tsunakawa.takay@fujitsu.com <tsunakawa.takay@fujitsu.com>
From: "tsunakawa.takay@fujitsu.com" <tsunakawa.takay@fujitsu.com>
To: 'Thomas Munro' <thomas.munro@gmail.com>, Maksim Milyutin <milyutinma@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>, Tatsuo Ishii <ishii@sraoss.co.jp>, Tom Lane <tgl@sss.pgh.pa.us>, Andres Freund <andres@anarazel.de>, Zhihong Yu <zyu@yugabyte.com>
Date: 2021-04-01T09:16:38Z
Lists: pgsql-hackers
From: Thomas Munro <thomas.munro@gmail.com>
> I changed my mind. Let's commit the pleasingly simple Linux-only feature for
> now, and extend to it to send some kind of no-op message in a later release.
> So this is the version I'd like to go with.
> Objections?
+1, as some of our users experienced the problem that the server kept processing (IIRC, a buggy PL/pgSQL procedure that loops indefinitely) after they killed the client.
TBH, Linux and Windows will be sufficient. But I'm for providing a good feature on a specific OS first.
(1)
+ rc = poll(&pollfd, 1, 0);
+ if (rc < 0)
+ {
+ elog(COMMERROR, "could not poll socket: %m");
+ return false;
I think it's customary to use ereport() and errcode_for_socket_access().
(2)
pq_check_connection()
Following PostmasterIsAlive(), maybe it's better to name it as pq_connection_is_alive() pq_client_is_alive(), or pq_frontend_is_alive() like the pqcomm.c's head comment uses the word frontend?
(3)
#include <limits.h>
+#include <poll.h>
#ifndef WIN32
#include <sys/mman.h>
#endif
poll.h should be included between #ifndef WIN32 and #endif?
(4)
I think the new GUC works for walsender as well. If so, how do we explain the relationship between the new GUC and wal_receiver_timeout and recommend the settings of them?
Regards
Takayuki Tsunakawa
Commits
-
Add WL_SOCKET_CLOSED for socket shutdown events.
- 50e570a59e7f 15.0 landed
-
Use WL_SOCKET_CLOSED for client_connection_check_interval.
- cba5b994c990 15.0 landed
-
Detect POLLHUP/POLLRDHUP while running queries.
- c30f54ad732c 14.0 landed
-
Improve timeout.c's handling of repeated timeout set/cancel.
- 09cf1d522676 14.0 cited