diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index c036a2c37b6..899acfd912f 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -847,6 +847,7 @@ ReplicationSlotsComputeRequiredXmin(bool already_locked) ReplicationSlot *s = &ReplicationSlotCtl->replication_slots[i]; TransactionId effective_xmin; TransactionId effective_catalog_xmin; + bool invalidated; if (!s->in_use) continue; @@ -854,8 +855,14 @@ ReplicationSlotsComputeRequiredXmin(bool already_locked) SpinLockAcquire(&s->mutex); effective_xmin = s->effective_xmin; effective_catalog_xmin = s->effective_catalog_xmin; + invalidated = (!XLogRecPtrIsInvalid(s->data.invalidated_at) && + XLogRecPtrIsInvalid(s->data.restart_lsn)); SpinLockRelease(&s->mutex); + /* invalidated slots need not apply */ + if (invalidated) + continue; + /* check the data xmin */ if (TransactionIdIsValid(effective_xmin) && (!TransactionIdIsValid(agg_xmin) || diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 283517d9566..06918759e7c 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -3901,6 +3901,9 @@ ProcArraySetReplicationSlotXmin(TransactionId xmin, TransactionId catalog_xmin, if (!already_locked) LWLockRelease(ProcArrayLock); + + elog(DEBUG1, "xmin required by slots: data %u, catalog %u", + xmin, catalog_xmin); } /*