postgres.git / summary / log / commit / refs

commit    34ef02b4d4c06e2bae6ad09cfd6d9c097eb73743
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 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); [parent: e0c274679cb5]