]> granicus.if.org Git - postgresql/commitdiff
Check that we've reached end-of-backup also when we're not performing
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 30 Mar 2011 07:36:58 +0000 (10:36 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 30 Mar 2011 07:53:28 +0000 (10:53 +0300)
archive recovery.

It's possible to restore an online backup without recovery.conf, by simply
copying all the necessary WAL files to pg_xlog. "pg_basebackup -x" does that
too. That's the use case where this cross-check is useful.

Backpatch to 9.0. We used to do this in earlier versins, but in 9.0 the code
was inadvertently changed so that the check is only performed after archive
recovery.

Fujii Masao.

src/backend/access/transam/xlog.c

index 418054066d1db7af44850fbda6654438c0a2c66c..c255691918de23e61e26f9ca8080c8a7605e4820 100644 (file)
@@ -6256,8 +6256,7 @@ StartupXLOG(void)
                }
 
                /*
-                * set backupStartupPoint if we're starting archive recovery from a
-                * base backup
+                * set backupStartPoint if we're starting recovery from a base backup
                 */
                if (haveBackupLabel)
                        ControlFile->backupStartPoint = checkPoint.redo;
@@ -6610,7 +6609,7 @@ StartupXLOG(void)
         * be further ahead --- ControlFile->minRecoveryPoint cannot have been
         * advanced beyond the WAL we processed.
         */
-       if (InArchiveRecovery &&
+       if (InRecovery &&
                (XLByteLT(EndOfLog, minRecoveryPoint) ||
                 !XLogRecPtrIsInvalid(ControlFile->backupStartPoint)))
        {
@@ -8311,8 +8310,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
                 * record, the backup was cancelled and the end-of-backup record will
                 * never arrive.
                 */
-               if (InArchiveRecovery &&
-                       !XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
+               if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
                        ereport(ERROR,
                                        (errmsg("online backup was cancelled, recovery cannot continue")));