Logical replication launcher never been restarted when terminated

Started by Yugo Nagataover 8 years ago3 messages
#1Yugo Nagata
nagata@sraoss.co.jp
1 attachment(s)

Hi,

As I report in another thread[1]/messages/by-id/20170621205657.61d90605.nagata@sraoss.co.jp, when the logical replication launcher
is terminated by SIGTERM, it never been restarted and we need to restart
the server to enable logical replication again.

This is because the logical replication launcher exits with exitstatus 0,
so if it exits with status 1 it is restarted by the postmaster normally.
Attached is a simple patch to fix it in this way.

However, I'm not sure this is the best way. For example, in this way,
we get the following log when the process is terminated, which we don't
get when it exits with status 0.

LOG: worker process: logical replication launcher (PID 11526) exited with exit code 1

If we don't want to get this message, we need more fixes in CleanupBackgroundWorker()
or around it.

[1]: /messages/by-id/20170621205657.61d90605.nagata@sraoss.co.jp
/messages/by-id/20170621205657.61d90605.nagata@sraoss.co.jp

--
Yugo Nagata <nagata@sraoss.co.jp>

Attachments:

logical_launcher_terminated.patchtext/x-diff; name=logical_launcher_terminated.patchDownload
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index f99dd0a..a833dc5 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -2855,7 +2855,7 @@ ProcessInterrupts(void)
 					(errmsg("logical replication launcher shutting down")));
 
 			/* The logical replication launcher can be stopped at any time. */
-			proc_exit(0);
+			proc_exit(1);
 		}
 		else if (RecoveryConflictPending && RecoveryConflictRetryable)
 		{
#2Peter Eisentraut
peter.eisentraut@2ndquadrant.com
In reply to: Yugo Nagata (#1)
Re: Logical replication launcher never been restarted when terminated

On 6/21/17 13:03, Yugo Nagata wrote:

As I report in another thread[1], when the logical replication launcher
is terminated by SIGTERM, it never been restarted and we need to restart
the server to enable logical replication again.

This is because the logical replication launcher exits with exitstatus 0,
so if it exits with status 1 it is restarted by the postmaster normally.
Attached is a simple patch to fix it in this way.

Fixed, thanks!

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Yugo Nagata
nagata@sraoss.co.jp
In reply to: Peter Eisentraut (#2)
Re: Logical replication launcher never been restarted when terminated

On Wed, 21 Jun 2017 15:17:20 -0400
Peter Eisentraut <peter.eisentraut@2ndquadrant.com> wrote:

On 6/21/17 13:03, Yugo Nagata wrote:

As I report in another thread[1], when the logical replication launcher
is terminated by SIGTERM, it never been restarted and we need to restart
the server to enable logical replication again.

This is because the logical replication launcher exits with exitstatus 0,
so if it exits with status 1 it is restarted by the postmaster normally.
Attached is a simple patch to fix it in this way.

Fixed, thanks!

Thanks!

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Yugo Nagata <nagata@sraoss.co.jp>

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers