Detect POLLHUP/POLLRDHUP while running queries.

Provide a new GUC check_client_connection_interval that can be used to
check whether the client connection has gone away, while running very
long queries.  It is disabled by default.

For now this uses a non-standard Linux extension (also adopted by at
least one other OS).  POLLRDHUP is not defined by POSIX, and other OSes
don't have a reliable way to know if a connection was closed without
actually trying to read or write.

In future we might consider trying to send a no-op/heartbeat message
instead, but that could require protocol changes.

Author: Sergey Cherkashin <[email protected]>
Author: Thomas Munro <[email protected]>
Reviewed-by: Thomas Munro <[email protected]>
Reviewed-by: Tatsuo Ishii <[email protected]>
Reviewed-by: Konstantin Knizhnik <[email protected]>
Reviewed-by: Zhihong Yu <[email protected]>
Reviewed-by: Andres Freund <[email protected]>
Reviewed-by: Maksim Milyutin <[email protected]>
Reviewed-by: Tsunakawa, Takayuki/綱川 貴之 <[email protected]>
Reviewed-by: Tom Lane <[email protected]> (much earlier version)
Discussion: 
https://postgr.es/m/77def86b27e41f0efcba411460e929ae%40postgrespro.ru

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/c30f54ad732ca5c8762bb68bbe0f51de9137dd72

Modified Files
--------------
doc/src/sgml/config.sgml                      | 37 +++++++++++++++++++++++++
src/backend/libpq/pqcomm.c                    | 40 +++++++++++++++++++++++++++
src/backend/tcop/postgres.c                   | 32 +++++++++++++++++++++
src/backend/utils/init/globals.c              |  1 +
src/backend/utils/init/postinit.c             | 10 +++++++
src/backend/utils/misc/guc.c                  | 29 +++++++++++++++++++
src/backend/utils/misc/postgresql.conf.sample |  3 ++
src/include/libpq/libpq.h                     |  1 +
src/include/miscadmin.h                       |  1 +
src/include/tcop/tcopprot.h                   |  1 +
src/include/utils/timeout.h                   |  1 +
11 files changed, 156 insertions(+)

Reply via email to