Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4620892

Browse files
committed
Fix bogus log message when starting from a cleanly shut down state.
In commit70e8186 to split xlog.c, I moved the startup code thatupdates the state in the control file and prints out the "databasesystem was not properly shut down" message to the log, but Iaccidentally removed the "if (InRecovery)" check around it. As aresult, that message was printed even if the system was cleanly shutdown, also during 'initdb'.Discussion:https://www.postgresql.org/message-id/3357075.1645031062@sss.pgh.pa.us
1 parent01ad1c9 commit4620892

File tree

1 file changed

+62
-56
lines changed

1 file changed

+62
-56
lines changed

‎src/backend/access/transam/xlogrecovery.c

Lines changed: 62 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -840,69 +840,75 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
840840
}
841841

842842
/*
843-
* Update pg_control to show that we are recovering and to show the
844-
* selected checkpoint as the place we are starting from. We also mark
845-
* pg_control with any minimum recovery stop point obtained from a backup
846-
* history file.
843+
* If recovery is needed, update our in-memory copy of pg_control to show
844+
* that we are recovering and to show the selected checkpoint as the place
845+
* we are starting from. We also mark pg_control with any minimum recovery
846+
* stop point obtained from a backup history file.
847+
*
848+
* We don't write the changes to disk yet, though. Only do that after
849+
* initializing various subsystems.
847850
*/
848-
if (InArchiveRecovery)
849-
{
850-
ControlFile->state=DB_IN_ARCHIVE_RECOVERY;
851-
}
852-
else
851+
if (InRecovery)
853852
{
854-
ereport(LOG,
855-
(errmsg("database system was not properly shut down; "
856-
"automatic recovery in progress")));
857-
if (recoveryTargetTLI>ControlFile->checkPointCopy.ThisTimeLineID)
853+
if (InArchiveRecovery)
854+
{
855+
ControlFile->state=DB_IN_ARCHIVE_RECOVERY;
856+
}
857+
else
858+
{
858859
ereport(LOG,
859-
(errmsg("crash recovery starts in timeline %u "
860-
"and has target timeline %u",
861-
ControlFile->checkPointCopy.ThisTimeLineID,
862-
recoveryTargetTLI)));
863-
ControlFile->state=DB_IN_CRASH_RECOVERY;
864-
}
865-
ControlFile->checkPoint=CheckPointLoc;
866-
ControlFile->checkPointCopy=checkPoint;
867-
if (InArchiveRecovery)
868-
{
869-
/* initialize minRecoveryPoint if not set yet */
870-
if (ControlFile->minRecoveryPoint<checkPoint.redo)
860+
(errmsg("database system was not properly shut down; "
861+
"automatic recovery in progress")));
862+
if (recoveryTargetTLI>ControlFile->checkPointCopy.ThisTimeLineID)
863+
ereport(LOG,
864+
(errmsg("crash recovery starts in timeline %u "
865+
"and has target timeline %u",
866+
ControlFile->checkPointCopy.ThisTimeLineID,
867+
recoveryTargetTLI)));
868+
ControlFile->state=DB_IN_CRASH_RECOVERY;
869+
}
870+
ControlFile->checkPoint=CheckPointLoc;
871+
ControlFile->checkPointCopy=checkPoint;
872+
if (InArchiveRecovery)
871873
{
872-
ControlFile->minRecoveryPoint=checkPoint.redo;
873-
ControlFile->minRecoveryPointTLI=checkPoint.ThisTimeLineID;
874+
/* initialize minRecoveryPoint if not set yet */
875+
if (ControlFile->minRecoveryPoint<checkPoint.redo)
876+
{
877+
ControlFile->minRecoveryPoint=checkPoint.redo;
878+
ControlFile->minRecoveryPointTLI=checkPoint.ThisTimeLineID;
879+
}
874880
}
875-
}
876-
877-
/*
878-
* Set backupStartPoint if we're starting recovery from a base backup.
879-
*
880-
* Also set backupEndPoint and use minRecoveryPoint as the backup end
881-
* location if we're starting recovery from a base backup which was taken
882-
* from a standby. In this case, the database system status in pg_control
883-
* must indicate that the database was already in recovery. Usually that
884-
* will be DB_IN_ARCHIVE_RECOVERY but also can be
885-
* DB_SHUTDOWNED_IN_RECOVERY if recovery previously was interrupted before
886-
* reaching this point; e.g. because restore_command or primary_conninfo
887-
* were faulty.
888-
*
889-
* Any other state indicates that the backup somehow became corrupted and
890-
* we can't sensibly continue with recovery.
891-
*/
892-
if (haveBackupLabel)
893-
{
894-
ControlFile->backupStartPoint=checkPoint.redo;
895-
ControlFile->backupEndRequired=backupEndRequired;
896881

897-
if (backupFromStandby)
882+
/*
883+
* Set backupStartPoint if we're starting recovery from a base backup.
884+
*
885+
* Also set backupEndPoint and use minRecoveryPoint as the backup end
886+
* location if we're starting recovery from a base backup which was
887+
* taken from a standby. In this case, the database system status in
888+
* pg_control must indicate that the database was already in recovery.
889+
* Usually that will be DB_IN_ARCHIVE_RECOVERY but also can be
890+
* DB_SHUTDOWNED_IN_RECOVERY if recovery previously was interrupted
891+
* before reaching this point; e.g. because restore_command or
892+
* primary_conninfo were faulty.
893+
*
894+
* Any other state indicates that the backup somehow became corrupted
895+
* and we can't sensibly continue with recovery.
896+
*/
897+
if (haveBackupLabel)
898898
{
899-
if (dbstate_at_startup!=DB_IN_ARCHIVE_RECOVERY&&
900-
dbstate_at_startup!=DB_SHUTDOWNED_IN_RECOVERY)
901-
ereport(FATAL,
902-
(errmsg("backup_label contains data inconsistent with control file"),
903-
errhint("This means that the backup is corrupted and you will "
904-
"have to use another backup for recovery.")));
905-
ControlFile->backupEndPoint=ControlFile->minRecoveryPoint;
899+
ControlFile->backupStartPoint=checkPoint.redo;
900+
ControlFile->backupEndRequired=backupEndRequired;
901+
902+
if (backupFromStandby)
903+
{
904+
if (dbstate_at_startup!=DB_IN_ARCHIVE_RECOVERY&&
905+
dbstate_at_startup!=DB_SHUTDOWNED_IN_RECOVERY)
906+
ereport(FATAL,
907+
(errmsg("backup_label contains data inconsistent with control file"),
908+
errhint("This means that the backup is corrupted and you will "
909+
"have to use another backup for recovery.")));
910+
ControlFile->backupEndPoint=ControlFile->minRecoveryPoint;
911+
}
906912
}
907913
}
908914

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp