Remove temporary WAL and history files at the end of archive recovery

cbc55da has reworked the order of some actions at the end of archive
recovery.  Unfortunately this overlooked the fact that the startup
process needs to remove RECOVERYXLOG (for temporary WAL segment newly
recovered from archives) and RECOVERYHISTORY (for temporary history
file) at this step, leaving the files around even after recovery ended.

Backpatch to 9.5, like the previous commit.

Author: Sawada Masahiko
Reviewed-by: Fujii Masao, Michael Paquier
Discussion: https://postgr.es/m/CAD21AoBO_eDQub6zojFnWtnmutRBWvYf7=cW4Hsqj+U_R26w3Q@mail.gmail.com
Backpatch-through: 9.5
This commit is contained in:
Michael Paquier 2019-10-02 15:54:16 +09:00
parent 0997cee82e
commit ae205dfe6c

View File

@ -5280,7 +5280,6 @@ readRecoveryCommandFile(void)
static void static void
exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog) exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog)
{ {
char recoveryPath[MAXPGPATH];
char xlogfname[MAXFNAMELEN]; char xlogfname[MAXFNAMELEN];
XLogSegNo endLogSegNo; XLogSegNo endLogSegNo;
XLogSegNo startLogSegNo; XLogSegNo startLogSegNo;
@ -5360,17 +5359,6 @@ exitArchiveRecovery(TimeLineID endTLI, XLogRecPtr endOfLog)
XLogFileName(xlogfname, ThisTimeLineID, startLogSegNo); XLogFileName(xlogfname, ThisTimeLineID, startLogSegNo);
XLogArchiveCleanup(xlogfname); XLogArchiveCleanup(xlogfname);
/*
* Since there might be a partial WAL segment named RECOVERYXLOG, get rid
* of it.
*/
snprintf(recoveryPath, MAXPGPATH, XLOGDIR "/RECOVERYXLOG");
unlink(recoveryPath); /* ignore any error */
/* Get rid of any remaining recovered timeline-history file, too */
snprintf(recoveryPath, MAXPGPATH, XLOGDIR "/RECOVERYHISTORY");
unlink(recoveryPath); /* ignore any error */
/* /*
* Rename the config file out of the way, so that we don't accidentally * Rename the config file out of the way, so that we don't accidentally
* re-enter archive recovery mode in a subsequent crash. * re-enter archive recovery mode in a subsequent crash.
@ -7159,6 +7147,7 @@ StartupXLOG(void)
if (ArchiveRecoveryRequested) if (ArchiveRecoveryRequested)
{ {
char reason[200]; char reason[200];
char recoveryPath[MAXPGPATH];
Assert(InArchiveRecovery); Assert(InArchiveRecovery);
@ -7209,6 +7198,17 @@ StartupXLOG(void)
*/ */
writeTimeLineHistory(ThisTimeLineID, recoveryTargetTLI, writeTimeLineHistory(ThisTimeLineID, recoveryTargetTLI,
EndRecPtr, reason); EndRecPtr, reason);
/*
* Since there might be a partial WAL segment named RECOVERYXLOG, get
* rid of it.
*/
snprintf(recoveryPath, MAXPGPATH, XLOGDIR "/RECOVERYXLOG");
unlink(recoveryPath); /* ignore any error */
/* Get rid of any remaining recovered timeline-history file, too */
snprintf(recoveryPath, MAXPGPATH, XLOGDIR "/RECOVERYHISTORY");
unlink(recoveryPath); /* ignore any error */
} }
/* Save the selected TimeLineID in shared memory, too */ /* Save the selected TimeLineID in shared memory, too */