comments.patch.txt
text/plain
Filename: comments.patch.txt
Type: text/plain
Part: 0
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;