From 2b3e4672f7602a6bb46a0735a1b41b635508b290 Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Mon, 28 Jun 2021 18:34:56 -0700 Subject: 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 --- src/backend/replication/walreceiver.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/backend/replication') 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; } -- cgit v1.2.3