]> granicus.if.org Git - postgresql/commitdiff
Move synchronous_standbys_defined updates from WAL writer to BG writer.
authorRobert Haas <rhaas@postgresql.org>
Sat, 19 Mar 2011 01:43:45 +0000 (21:43 -0400)
committerRobert Haas <rhaas@postgresql.org>
Sat, 19 Mar 2011 01:43:45 +0000 (21:43 -0400)
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.

src/backend/postmaster/bgwriter.c
src/backend/postmaster/walwriter.c
src/backend/replication/syncrep.c

index 4df69c2f677eddd443a9796d3d69b5e156517fee..1b450a802baa90ffdeaa801b67b73928af11ab5c 100644 (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();
index e97ac63ed09e024b627c04a154e94e91ca3c5e81..d0d7c9bebf03ea4f0a744710b77195fea3a61a71 100644 (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)
                {
index 8aef998b47f057b16d263a5eedfd1cdfdb541d44..e99b43d8e0d2c3e3084a9e5201893905da51ef63 100644 (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.
  */