postgres.git / summary / log / commit / refs
commit 1435a8554cd514d668a46c4f6b1e4a1e3bd30fd5
Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Mon Jan 17 10:22:24 2011 +0000
First released in: 9.1.0, 9.0.3
Before exiting walreceiver, fsync() all the WAL received.
Otherwise WAL recovery will replay the un-flushed WAL after walreceiver has
exited, which can lead to a non-recoverable standby if the system crashes hard
at that point.
src/backend/replication/walreceiver.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index 06646ead94a..df4610732b1 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -323,6 +323,9 @@ WalRcvDie(int code, Datum arg)
/* use volatile pointer to prevent code rearrangement */
volatile WalRcvData *walrcv = WalRcv;
+ /* Ensure that all WAL records received are flushed to disk */
+ XLogWalRcvFlush();
+
SpinLockAcquire(&walrcv->mutex);
Assert(walrcv->walRcvState == WALRCV_RUNNING ||
walrcv->walRcvState == WALRCV_STOPPING);
[parent: a08363d70cb5]