* If the server is shut down, postmaster sends us SIGUSR2 after all
* regular backends have exited and the shutdown checkpoint has been written.
* This instruct walsender to send any outstanding WAL, including the
- * shutdown checkpoint record, and then exit.
+ * shutdown checkpoint record, wait for it to be replicated to the standby,
+ * and then exit.
*
*
* Portions Copyright (c) 2010-2013, PostgreSQL Global Development Group
/*
* When SIGUSR2 arrives, we send any outstanding logs up to the
- * shutdown checkpoint record (i.e., the latest record) and exit.
+ * shutdown checkpoint record (i.e., the latest record), wait
+ * for them to be replicated to the standby, and exit.
* This may be a normal termination at shutdown, or a promotion,
* the walsender is not sure which.
*/
{
/* ... let's just be real sure we're caught up ... */
XLogSend(&caughtup);
- if (caughtup && !pq_is_send_pending())
+ if (caughtup && sentPtr == MyWalSnd->flush &&
+ !pq_is_send_pending())
{
/* Inform the standby that XLOG streaming is done */
EndCommand("COPY 0", DestRemote);
/*
* If replication has not yet started, die like with SIGTERM. If
* replication is active, only set a flag and wake up the main loop. It
- * will send any outstanding WAL, and then exit gracefully.
+ * will send any outstanding WAL, wait for it to be replicated to
+ * the standby, and then exit gracefully.
*/
if (!replication_active)
kill(MyProcPid, SIGTERM);