mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Don't ERROR on PreallocXlogFiles() race condition.
Before a restartpoint finishes PreallocXlogFiles(), a startup process KeepFileRestoredFromArchive() call can unlink the preallocated segment. If a CHECKPOINT sql command had elicited the restartpoint experiencing the race condition, that sql command failed. Moreover, the restartpoint omitted its log_checkpoints message and some inessential resource reclamation. Prevent the ERROR by skipping open() of the segment. Since these consequences are so minor, no back-patch. Discussion: https://postgr.es/m/20210202151416.GB3304930@rfd.leadboat.com
This commit is contained in:
@ -885,8 +885,6 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr)
|
||||
|
||||
if (recvFile < 0 || !XLByteInSeg(recptr, recvSegNo, wal_segment_size))
|
||||
{
|
||||
bool added;
|
||||
|
||||
/*
|
||||
* fsync() and close current file before we switch to next one. We
|
||||
* would otherwise have to reopen this file to fsync it later
|
||||
@ -923,7 +921,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr)
|
||||
|
||||
/* Create/use new log file */
|
||||
XLByteToSeg(recptr, recvSegNo, wal_segment_size);
|
||||
recvFile = XLogFileInit(recvSegNo, &added);
|
||||
recvFile = XLogFileInit(recvSegNo);
|
||||
recvFileTLI = ThisTimeLineID;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user