mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
Revert the patch to check if we've reached end-of-backup also when doing
crash recovery, and throw an error if not. hubert depesz lubaczewski pointed out that that situation also happens in the crash recovery following a system crash that happens during an online backup. We might want to do something smarter in 9.1, like put the check back for backups taken with pg_basebackup, but that's for another patch.
This commit is contained in:
parent
b5bb040da6
commit
54685b1c2b
@ -6651,10 +6651,24 @@ StartupXLOG(void)
|
||||
(XLByteLT(EndOfLog, minRecoveryPoint) ||
|
||||
!XLogRecPtrIsInvalid(ControlFile->backupStartPoint)))
|
||||
{
|
||||
if (reachedStopPoint) /* stopped because of stop request */
|
||||
if (reachedStopPoint)
|
||||
{
|
||||
/* stopped because of stop request */
|
||||
ereport(FATAL,
|
||||
(errmsg("requested recovery stop point is before consistent recovery point")));
|
||||
/* ran off end of WAL */
|
||||
}
|
||||
/*
|
||||
* Ran off end of WAL before reaching end-of-backup WAL record,
|
||||
* or minRecoveryPoint. That's usually a bad sign, indicating that
|
||||
* you tried to recover from an online backup but never called
|
||||
* pg_stop_backup(), or you didn't archive all the WAL up to that
|
||||
* point. However, this also happens in crash recovery, if the
|
||||
* system crashes while an online backup is in progress. We
|
||||
* must not treat that as an error, or the database will refuse
|
||||
* to start up.
|
||||
*/
|
||||
if (InArchiveRecovery)
|
||||
{
|
||||
if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
|
||||
ereport(FATAL,
|
||||
(errmsg("WAL ends before end of online backup"),
|
||||
@ -6663,6 +6677,7 @@ StartupXLOG(void)
|
||||
ereport(FATAL,
|
||||
(errmsg("WAL ends before consistent recovery point")));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Consider whether we need to assign a new timeline ID.
|
||||
@ -8353,7 +8368,8 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
|
||||
* record, the backup was cancelled and the end-of-backup record will
|
||||
* never arrive.
|
||||
*/
|
||||
if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
|
||||
if (InArchiveRecovery &&
|
||||
!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
|
||||
ereport(ERROR,
|
||||
(errmsg("online backup was cancelled, recovery cannot continue")));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user