adhoc-035-failure-debugging.patch
text/x-patch
Filename: adhoc-035-failure-debugging.patch
Type: text/x-patch
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/replication/logical/logical.c | 1 | 0 |
| src/backend/replication/slot.c | 8 | 0 |
| src/backend/storage/ipc/standby.c | 3 | 0 |
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c
index ca09c683f1..098310b23e 100644
--- a/src/backend/replication/logical/logical.c
+++ b/src/backend/replication/logical/logical.c
@@ -1883,6 +1883,7 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn)
{
SpinLockAcquire(&MyReplicationSlot->mutex);
MyReplicationSlot->effective_catalog_xmin = MyReplicationSlot->data.catalog_xmin;
+elog(LOG, "!!!LogicalConfirmReceivedLocation| MyReplicationSlot: %p, MyReplicationSlot->effective_catalog_xmin: %u", MyReplicationSlot, MyReplicationSlot->effective_catalog_xmin);
SpinLockRelease(&MyReplicationSlot->mutex);
ReplicationSlotsComputeRequiredXmin(false);
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index 52da694c79..b072873b74 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -1380,6 +1380,7 @@ InvalidatePossiblyObsoleteSlot(ReplicationSlotInvalidationCause cause,
restart_lsn = s->data.restart_lsn;
+elog(LOG, "!!!InvalidatePossiblyObsoleteSlot| cause: %d, s->data.invalidated: %d", cause, s->data.invalidated);
/*
* If the slot is already invalid or is a non conflicting slot, we
* don't need to do anything.
@@ -1399,6 +1400,7 @@ InvalidatePossiblyObsoleteSlot(ReplicationSlotInvalidationCause cause,
/* invalid DB oid signals a shared relation */
if (dboid != InvalidOid && dboid != s->data.database)
break;
+elog(LOG, "!!!InvalidatePossiblyObsoleteSlot| RS_INVAL_HORIZON, s: %p, s->effective_xmin: %u, s->effective_catalog_xmin: %u, snapshotConflictHorizon: %u", s, s->effective_xmin, s->effective_catalog_xmin, snapshotConflictHorizon);
if (TransactionIdIsValid(s->effective_xmin) &&
TransactionIdPrecedesOrEquals(s->effective_xmin,
snapshotConflictHorizon))
@@ -1417,6 +1419,7 @@ InvalidatePossiblyObsoleteSlot(ReplicationSlotInvalidationCause cause,
}
}
+elog(LOG, "!!!InvalidatePossiblyObsoleteSlot| conflict: %d", conflict);
/* if there's no conflict, we're done */
if (conflict == RS_INVAL_NONE)
{
@@ -1487,6 +1490,7 @@ InvalidatePossiblyObsoleteSlot(ReplicationSlotInvalidationCause cause,
*/
if (last_signaled_pid != active_pid)
{
+elog(LOG, "!!!InvalidatePossiblyObsoleteSlot| before ReportSlotInvalidation(..., true, ...)");
ReportSlotInvalidation(conflict, true, active_pid,
slotname, restart_lsn,
oldestLSN, snapshotConflictHorizon);
@@ -1532,6 +1536,7 @@ InvalidatePossiblyObsoleteSlot(ReplicationSlotInvalidationCause cause,
ReplicationSlotRelease();
pgstat_drop_replslot(s);
+elog(LOG, "!!!InvalidatePossiblyObsoleteSlot| before ReportSlotInvalidation(..., false, ...)");
ReportSlotInvalidation(conflict, false, active_pid,
slotname, restart_lsn,
oldestLSN, snapshotConflictHorizon);
@@ -1575,6 +1580,7 @@ InvalidateObsoleteReplicationSlots(ReplicationSlotInvalidationCause cause,
if (max_replication_slots == 0)
return invalidated;
+elog(LOG, "!!!InvalidateObsoleteReplicationSlots");
XLogSegNoOffsetToRecPtr(oldestSegno, 0, wal_segment_size, oldestLSN);
restart:
@@ -1586,10 +1592,12 @@ restart:
if (!s->in_use)
continue;
+elog(LOG, "!!!InvalidateObsoleteReplicationSlots| before InvalidatePossiblyObsoleteSlot");
if (InvalidatePossiblyObsoleteSlot(cause, s, oldestLSN, dboid,
snapshotConflictHorizon,
&invalidated))
{
+elog(LOG, "!!!InvalidateObsoleteReplicationSlots| InvalidatePossiblyObsoleteSlot returned true, invalidated: %d", invalidated);
/* if the lock was released, start from scratch */
goto restart;
}
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c
index d8755a106d..c4cb24cc50 100644
--- a/src/backend/storage/ipc/standby.c
+++ b/src/backend/storage/ipc/standby.c
@@ -500,9 +500,12 @@ ResolveRecoveryConflictWithSnapshot(TransactionId snapshotConflictHorizon,
* reached, e.g. due to using a physical replication slot.
*/
if (wal_level >= WAL_LEVEL_LOGICAL && isCatalogRel)
+{
+//elog(LOG, "!!!ResolveRecoveryConflictWithSnapshot| RS_INVAL_HORIZON, snapshotConflictHorizon: %u, locator.dbOid: %d, locator.relNumber: %d", snapshotConflictHorizon, locator.dbOid, locator.relNumber);
InvalidateObsoleteReplicationSlots(RS_INVAL_HORIZON, 0, locator.dbOid,
snapshotConflictHorizon);
}
+}
/*
* Variant of ResolveRecoveryConflictWithSnapshot that works with