1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-25 21:42:33 +03:00

Move synchronous_standbys_defined updates from WAL writer to BG writer.

This is advantageous because the BG writer is alive until much later in
the shutdown sequence than WAL writer; we want to make sure that it's
possible to shut off synchronous replication during a smart shutdown,
else it might not be possible to complete the shutdown at all.

Per very reasonable gripes from Fujii Masao and Simon Riggs.
This commit is contained in:
Robert Haas 2011-03-18 21:43:45 -04:00
parent f78ba0a73a
commit 727589995a
3 changed files with 11 additions and 9 deletions

View File

@ -55,6 +55,7 @@
#include "miscadmin.h"
#include "pgstat.h"
#include "postmaster/bgwriter.h"
#include "replication/syncrep.h"
#include "storage/bufmgr.h"
#include "storage/fd.h"
#include "storage/ipc.h"
@ -363,6 +364,9 @@ BackgroundWriterMain(void)
if (RecoveryInProgress())
ThisTimeLineID = GetRecoveryTargetTLI();
/* Do this once before starting the loop, then just at SIGHUP time. */
SyncRepUpdateSyncStandbysDefined();
/*
* Loop forever
*/
@ -389,6 +393,8 @@ BackgroundWriterMain(void)
{
got_SIGHUP = false;
ProcessConfigFile(PGC_SIGHUP);
/* update global shmem state for sync rep */
SyncRepUpdateSyncStandbysDefined();
}
if (checkpoint_requested)
{
@ -704,6 +710,8 @@ CheckpointWriteDelay(int flags, double progress)
{
got_SIGHUP = false;
ProcessConfigFile(PGC_SIGHUP);
/* update global shmem state for sync rep */
SyncRepUpdateSyncStandbysDefined();
}
AbsorbFsyncRequests();

View File

@ -49,7 +49,6 @@
#include "libpq/pqsignal.h"
#include "miscadmin.h"
#include "postmaster/walwriter.h"
#include "replication/syncrep.h"
#include "storage/bufmgr.h"
#include "storage/fd.h"
#include "storage/ipc.h"
@ -217,9 +216,6 @@ WalWriterMain(void)
*/
PG_SETMASK(&UnBlockSig);
/* Do this once before starting the loop, then just at SIGHUP time. */
SyncRepUpdateSyncStandbysDefined();
/*
* Loop forever
*/
@ -241,8 +237,6 @@ WalWriterMain(void)
{
got_SIGHUP = false;
ProcessConfigFile(PGC_SIGHUP);
/* update global shmem state for sync rep */
SyncRepUpdateSyncStandbysDefined();
}
if (shutdown_requested)
{

View File

@ -557,9 +557,9 @@ SyncRepWakeQueue(bool all)
}
/*
* WAL writer calls this as needed to update the shared sync_standbys_defined
* flag, so that backends don't remain permanently wedged if
* synchronous_standby_names is unset. It's safe to check the current value
* The background writer calls this as needed to update the shared
* sync_standbys_defined flag, so that backends don't remain permanently wedged
* if synchronous_standby_names is unset. It's safe to check the current value
* without the lock, because it's only ever updated by one process. But we
* must take the lock to change it.
*/