mirror of
https://github.com/postgres/postgres.git
synced 2025-08-09 17:03:00 +03:00
Make WaitForLSNReplay() issue FATAL on postmaster death
Reported-by: Michael Paquier Discussion: https://postgr.es/m/ZvY2C8N4ZqgCFaLu%40paquier.xyz Reviewed-by: Pavel Borisov
This commit is contained in:
@@ -222,7 +222,7 @@ WaitForLSNReplay(XLogRecPtr targetLSN, int64 timeout)
|
|||||||
{
|
{
|
||||||
XLogRecPtr currentLSN;
|
XLogRecPtr currentLSN;
|
||||||
TimestampTz endtime = 0;
|
TimestampTz endtime = 0;
|
||||||
int wake_events = WL_LATCH_SET | WL_EXIT_ON_PM_DEATH;
|
int wake_events = WL_LATCH_SET | WL_POSTMASTER_DEATH;
|
||||||
|
|
||||||
/* Shouldn't be called when shmem isn't initialized */
|
/* Shouldn't be called when shmem isn't initialized */
|
||||||
Assert(waitLSNState);
|
Assert(waitLSNState);
|
||||||
@@ -313,6 +313,16 @@ WaitForLSNReplay(XLogRecPtr targetLSN, int64 timeout)
|
|||||||
rc = WaitLatch(MyLatch, wake_events, delay_ms,
|
rc = WaitLatch(MyLatch, wake_events, delay_ms,
|
||||||
WAIT_EVENT_WAIT_FOR_WAL_REPLAY);
|
WAIT_EVENT_WAIT_FOR_WAL_REPLAY);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Emergency bailout if postmaster has died. This is to avoid the
|
||||||
|
* necessity for manual cleanup of all postmaster children.
|
||||||
|
*/
|
||||||
|
if (rc & WL_POSTMASTER_DEATH)
|
||||||
|
ereport(FATAL,
|
||||||
|
(errcode(ERRCODE_ADMIN_SHUTDOWN),
|
||||||
|
errmsg("terminating connection due to unexpected postmaster exit"),
|
||||||
|
errcontext("while waiting for LSN replay")));
|
||||||
|
|
||||||
if (rc & WL_LATCH_SET)
|
if (rc & WL_LATCH_SET)
|
||||||
ResetLatch(MyLatch);
|
ResetLatch(MyLatch);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user