diff options
| author | Noah Misch <noah@leadboat.com> | 2021-06-28 18:34:56 -0700 |
|---|---|---|
| committer | Noah Misch <noah@leadboat.com> | 2021-06-28 18:34:56 -0700 |
| commit | 2b3e4672f7602a6bb46a0735a1b41b635508b290 (patch) | |
| tree | 0fd8bf82ed99d38511588924eefe47067eef3044 /src/backend/replication | |
| parent | 421484f79c0b80209fa766eb00dbc2453a753273 (diff) | |
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
Diffstat (limited to 'src/backend/replication')
| -rw-r--r-- | src/backend/replication/walreceiver.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index eadff8f908f..2be9ad967dc 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -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; } |
