When archiving is enabled, rotate the last WAL segment at shutdown so that
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 28 May 2009 11:02:16 +0000 (11:02 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 28 May 2009 11:02:16 +0000 (11:02 +0000)
all transactions are archived.

Original patch by Guillaume Smet.

src/backend/access/transam/xlog.c

index 93f00c9f6c0e483c0853c232aa4cce07e1ecb828..ecf5046ff9a007a3598e99fcbf238d3c851db025 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.340 2009/05/15 15:56:39 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.341 2009/05/28 11:02:16 heikki Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -6085,7 +6085,18 @@ ShutdownXLOG(int code, Datum arg)
        if (RecoveryInProgress())
                CreateRestartPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_IMMEDIATE);
        else
+       {
+               /*
+                * If archiving is enabled, rotate the last XLOG file so that all the
+                * remaining records are archived (postmaster wakes up the archiver
+                * process one more time at the end of shutdown). The checkpoint
+                * record will go to the next XLOG file and won't be archived (yet).
+                */
+               if (XLogArchivingActive() && XLogArchiveCommandSet())
+                       RequestXLogSwitch();
+
                CreateCheckPoint(CHECKPOINT_IS_SHUTDOWN | CHECKPOINT_IMMEDIATE);
+       }
        ShutdownCLOG();
        ShutdownSUBTRANS();
        ShutdownMultiXact();