clog-diagnostics.patch
text/x-patch
Filename: clog-diagnostics.patch
Type: text/x-patch
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/access/transam/clog.c | 7 | 4 |
diff --git a/src/backend/access/transam/clog.c b/src/backend/access/transam/clog.c
index 880f18c1473..126502363f5 100644
--- a/src/backend/access/transam/clog.c
+++ b/src/backend/access/transam/clog.c
@@ -432,7 +432,7 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status,
proc->clogGroupMemberLsn = lsn;
nextidx = pg_atomic_read_u32(&procglobal->clogGroupFirst);
-
+elog(WARNING, "TransactionGroupUpdateXidStatus: %d, %d", proc->pgprocno, nextidx);
while (true)
{
/*
@@ -451,9 +451,10 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status,
ProcGlobal->allProcs[nextidx].clogGroupMemberPage != proc->clogGroupMemberPage)
{
proc->clogGroupMember = false;
+elog(WARNING, "TransactionGroupUpdateXidStatus: return false (%d)", nextidx);
return false;
}
-
+elog(WARNING, "TransactionGroupUpdateXidStatus: pg_atomic_write_u32 nextidx: %p, %d", &proc->clogGroupNext, nextidx);
pg_atomic_write_u32(&proc->clogGroupNext, nextidx);
if (pg_atomic_compare_exchange_u32(&procglobal->clogGroupFirst,
@@ -461,7 +462,7 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status,
(uint32) proc->pgprocno))
break;
}
-
+elog(WARNING, "TransactionGroupUpdateXidStatus: after while: %d", nextidx);
/*
* If the list was not empty, the leader will update the status of our
* XID. It is impossible to have followers without a leader because the
@@ -489,6 +490,7 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status,
/* Fix semaphore count for any absorbed wakeups */
while (extraWaits-- > 0)
PGSemaphoreUnlock(proc->sem);
+elog(WARNING, "TransactionGroupUpdateXidStatus: return true (%d)", nextidx);
return true;
}
@@ -540,8 +542,8 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status,
while (wakeidx != INVALID_PGPROCNO)
{
PGPROC *proc = &ProcGlobal->allProcs[wakeidx];
-
wakeidx = pg_atomic_read_u32(&proc->clogGroupNext);
+elog(WARNING, "TransactionGroupUpdateXidStatus: pg_atomic_write_u32 INVALID_PGPROCNO: %p, %d", &proc->clogGroupNext, INVALID_PGPROCNO);
pg_atomic_write_u32(&proc->clogGroupNext, INVALID_PGPROCNO);
/* ensure all previous writes are visible before follower continues. */
@@ -553,6 +555,7 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status,
PGSemaphoreUnlock(proc->sem);
}
+elog(WARNING, "TransactionGroupUpdateXidStatus: end");
return true;
}