From eff933531e7f7d98ba02402c7821b0b7ea8f1d97 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Wed, 30 Mar 2011 10:36:58 +0300 Subject: [PATCH] Check that we've reached end-of-backup also when we're not performing 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 | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 4e4ec1cb9a..eac61c5727 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -5997,8 +5997,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; @@ -6319,7 +6318,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))) { @@ -7911,8 +7910,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"))); -- 2.11.0