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,17 +6651,32 @@ StartupXLOG(void)
|
|||||||
(XLByteLT(EndOfLog, minRecoveryPoint) ||
|
(XLByteLT(EndOfLog, minRecoveryPoint) ||
|
||||||
!XLogRecPtrIsInvalid(ControlFile->backupStartPoint)))
|
!XLogRecPtrIsInvalid(ControlFile->backupStartPoint)))
|
||||||
{
|
{
|
||||||
if (reachedStopPoint) /* stopped because of stop request */
|
if (reachedStopPoint)
|
||||||
|
{
|
||||||
|
/* stopped because of stop request */
|
||||||
ereport(FATAL,
|
ereport(FATAL,
|
||||||
(errmsg("requested recovery stop point is before consistent recovery point")));
|
(errmsg("requested recovery stop point is before consistent recovery point")));
|
||||||
/* ran off end of WAL */
|
}
|
||||||
if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
|
/*
|
||||||
ereport(FATAL,
|
* Ran off end of WAL before reaching end-of-backup WAL record,
|
||||||
(errmsg("WAL ends before end of online backup"),
|
* or minRecoveryPoint. That's usually a bad sign, indicating that
|
||||||
errhint("Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery.")));
|
* you tried to recover from an online backup but never called
|
||||||
else
|
* pg_stop_backup(), or you didn't archive all the WAL up to that
|
||||||
ereport(FATAL,
|
* point. However, this also happens in crash recovery, if the
|
||||||
(errmsg("WAL ends before consistent recovery point")));
|
* 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"),
|
||||||
|
errhint("Online backup started with pg_start_backup() must be ended with pg_stop_backup(), and all WAL up to that point must be available at recovery.")));
|
||||||
|
else
|
||||||
|
ereport(FATAL,
|
||||||
|
(errmsg("WAL ends before consistent recovery point")));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -8353,7 +8368,8 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
|
|||||||
* record, the backup was cancelled and the end-of-backup record will
|
* record, the backup was cancelled and the end-of-backup record will
|
||||||
* never arrive.
|
* never arrive.
|
||||||
*/
|
*/
|
||||||
if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
|
if (InArchiveRecovery &&
|
||||||
|
!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("online backup was cancelled, recovery cannot continue")));
|
(errmsg("online backup was cancelled, recovery cannot continue")));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user