diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2011-01-17 12:22:24 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2011-01-17 12:27:35 +0200 |
commit | 34ef02b4d4c06e2bae6ad09cfd6d9c097eb73743 (patch) | |
tree | 87ff48f2fb375a966dc7adac1666fbd199f56c0f | |
parent | e0c274679cb50064a92472c94c7ef5849a156536 (diff) | |
download | postgresql-34ef02b4d4c06e2bae6ad09cfd6d9c097eb73743.tar.gz postgresql-34ef02b4d4c06e2bae6ad09cfd6d9c097eb73743.zip |
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.
-rw-r--r-- | src/backend/replication/walreceiver.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index d257caf913d..7005307dc25 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -324,6 +324,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); |