diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 91568024aed..304b60933c9 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -8131,25 +8131,22 @@ KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo) XLByteToSeg(recptr, currSegNo, wal_segment_size); segno = currSegNo; - /* - * Calculate how many segments are kept by slots first, adjusting for - * max_slot_wal_keep_size. - */ + /* Calculate how many segments are kept by slots. */ keep = XLogGetReplicationSlotMinimumLSN(); if (keep != InvalidXLogRecPtr && keep < recptr) { XLByteToSeg(keep, segno, wal_segment_size); /* - * Avoid WAL removal by the checkpointer process during Binary - * upgrade. If WALs required by logical replication slots are removed, - * the slots are unusable. + * Account for max_slot_wal_keep_size to avoid keeping more than + * configured. However, don't do that during a binary upgrade: if + * slots were to be invalidated because of this, it would not be + * possible to preserve logical ones during the upgrade. */ if (max_slot_wal_keep_size_mb >= 0 && !IsBinaryUpgrade) { uint64 slot_keep_segs; - /* Cap by max_slot_wal_keep_size ... */ slot_keep_segs = ConvertToXSegs(max_slot_wal_keep_size_mb, wal_segment_size); diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index 82c7d263f94..0e1e85d52cf 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -2036,7 +2036,7 @@ restart: if (!s->in_use) continue; - /* Prevent logical slot invalidation during binary upgrade. */ + /* Prevent invalidation of logical slots during binary upgrade. */ if (SlotIsLogical(s) && IsBinaryUpgrade) continue;