summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas2011-03-19 01:43:45 +0000
committerRobert Haas2011-03-19 01:43:45 +0000
commit727589995a3e027046f0da7af6ba665b0b47f89f (patch)
tree674784df889b69812b61a6ae4adb375da3808a1c
parentf78ba0a73a60f40270b21c4582f6a7d52fe16739 (diff)
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.
-rw-r--r--src/backend/postmaster/bgwriter.c8
-rw-r--r--src/backend/postmaster/walwriter.c6
-rw-r--r--src/backend/replication/syncrep.c6
3 files changed, 11 insertions, 9 deletions
diff --git a/src/backend/postmaster/bgwriter.c b/src/backend/postmaster/bgwriter.c
index 4df69c2f67..1b450a802b 100644
--- a/src/backend/postmaster/bgwriter.c
+++ b/src/backend/postmaster/bgwriter.c
@@ -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();
diff --git a/src/backend/postmaster/walwriter.c b/src/backend/postmaster/walwriter.c
index e97ac63ed0..d0d7c9bebf 100644
--- a/src/backend/postmaster/walwriter.c
+++ b/src/backend/postmaster/walwriter.c
@@ -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)
{
diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c
index 8aef998b47..e99b43d8e0 100644
--- a/src/backend/replication/syncrep.c
+++ b/src/backend/replication/syncrep.c
@@ -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.
*/