pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Christoph Berg <myon@debian.org>
To: Daniel Gustafsson <daniel@yesql.se>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Subject: Re: pg_receivewal and SIGTERM
Date: Tue, 16 Aug 2022 13:36:15 +0200
Message-ID: <YvuBL1tvlSNiFQUB@msg.df7cb.de> (raw)
In-Reply-To: <EC39E60E-C8B6-4CDF-8BFA-E4D140446B41@yesql.se>
References: <Yvo/5No5S0c4EFMj@msg.df7cb.de>
	<EC39E60E-C8B6-4CDF-8BFA-E4D140446B41@yesql.se>

Re: Daniel Gustafsson
> Do you think pg_recvlogical should support SIGTERM as well?  (The signals which
> it does trap should be added to the documentation which just now says "until
> terminated by a signal" but that's a separate thing.)

Ack, that makes sense, added in the attached updated patch.

>  	pqsignal(SIGINT, sigint_handler);
> +	pqsignal(SIGTERM, sigint_handler);
> Tiny nitpick, I think we should rename sigint_handler to just sig_handler as it
> does handle more than sigint.

I went with sigexit_handler since pg_recvlogical has also a
sighup_handler and "sig_handler" would be confusing there.

Christoph

Attachments:

0001-pg_receivewal-pg_recvlogical-Exit-cleanly-on-SIGTERM.patch (text/x-diff, 3.5K) download From beb3bcb32a9eabf2bf83e259706f89ccdac276d3 Mon Sep 17 00:00:00 2001 From: Christoph Berg <myon@debian.org> Date: Mon, 15 Aug 2022 14:29:43 +0200 Subject: [PATCH] pg_receivewal, pg_recvlogical: Exit cleanly on SIGTERM In pg_receivewal, compressed output is only flushed on clean exits. The reason to support SIGTERM here as well is that pg_receivewal might well be running as a daemon, and systemd's default KillSignal is SIGTERM. Since pg_recvlogical is also supposed to run as a daemon, teach it about SIGTERM as well. --- doc/src/sgml/ref/pg_receivewal.sgml | 8 +++++--- src/bin/pg_basebackup/pg_receivewal.c | 7 ++++--- src/bin/pg_basebackup/pg_recvlogical.c | 7 ++++--- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/doc/src/sgml/ref/pg_receivewal.sgml b/doc/src/sgml/ref/pg_receivewal.sgml index 4fe9e1a874..5f83ba1893 100644 --- a/doc/src/sgml/ref/pg_receivewal.sgml +++ b/doc/src/sgml/ref/pg_receivewal.sgml @@ -118,8 +118,9 @@ PostgreSQL documentation <para> In the absence of fatal errors, <application>pg_receivewal</application> - will run until terminated by the <systemitem>SIGINT</systemitem> signal - (<keycombo action="simul"><keycap>Control</keycap><keycap>C</keycap></keycombo>). + will run until terminated by the <systemitem>SIGINT</systemitem> + (<keycombo action="simul"><keycap>Control</keycap><keycap>C</keycap></keycombo>) + or <systemitem>SIGTERM</systemitem> signal. </para> </refsect1> @@ -457,7 +458,8 @@ PostgreSQL documentation <para> <application>pg_receivewal</application> will exit with status 0 when - terminated by the <systemitem>SIGINT</systemitem> signal. (That is the + terminated by the <systemitem>SIGINT</systemitem> or + <systemitem>SIGTERM</systemitem> signal. (That is the normal way to end it. Hence it is not an error.) For fatal errors or other signals, the exit status will be nonzero. </para> diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c index f064cff4ab..e2cf924017 100644 --- a/src/bin/pg_basebackup/pg_receivewal.c +++ b/src/bin/pg_basebackup/pg_receivewal.c @@ -673,13 +673,13 @@ StreamLog(void) } /* - * When sigint is called, just tell the system to exit at the next possible + * When SIGINT/SIGTERM are caught, just tell the system to exit at the next possible * moment. */ #ifndef WIN32 static void -sigint_handler(int signum) +sigexit_handler(int signum) { time_to_stop = true; } @@ -932,7 +932,8 @@ main(int argc, char **argv) * if one is needed, in GetConnection.) */ #ifndef WIN32 - pqsignal(SIGINT, sigint_handler); + pqsignal(SIGINT, sigexit_handler); + pqsignal(SIGTERM, sigexit_handler); #endif /* diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c index 2a4c8b130a..363102cf85 100644 --- a/src/bin/pg_basebackup/pg_recvlogical.c +++ b/src/bin/pg_basebackup/pg_recvlogical.c @@ -650,11 +650,11 @@ error: #ifndef WIN32 /* - * When sigint is called, just tell the system to exit at the next possible + * When SIGINT/SIGTERM are caught, just tell the system to exit at the next possible * moment. */ static void -sigint_handler(int signum) +sigexit_handler(int signum) { time_to_abort = true; } @@ -922,7 +922,8 @@ main(int argc, char **argv) * if one is needed, in GetConnection.) */ #ifndef WIN32 - pqsignal(SIGINT, sigint_handler); + pqsignal(SIGINT, sigexit_handler); + pqsignal(SIGTERM, sigexit_handler); pqsignal(SIGHUP, sighup_handler); #endif -- 2.35.1

view thread (24+ messages)  latest in thread

Message-ID: <YvuBL1tvlSNiFQUB@msg.df7cb.de>
Permalink:  ../YvuBL1tvlSNiFQUB@msg.df7cb.de/
Also on:    postgresql.org/message-id/YvuBL1tvlSNiFQUB@msg.df7cb.de

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: myon@debian.org, daniel@yesql.se, pgsql-hackers@lists.postgresql.org
  Subject: Re: pg_receivewal and SIGTERM
  In-Reply-To: <YvuBL1tvlSNiFQUB@msg.df7cb.de>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox