epoch_test_case-1_logs.patch
application/octet-stream
Filename: epoch_test_case-1_logs.patch
Type: application/octet-stream
Part: 1
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/replication/logical/launcher.c | 10 | 0 |
| src/backend/replication/logical/worker.c | 8 | 0 |
diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c
index ecd11e9508..9ab91c3197 100644
--- a/src/backend/replication/logical/launcher.c
+++ b/src/backend/replication/logical/launcher.c
@@ -1392,14 +1392,22 @@ advance_conflict_slot_xmin(FullTransactionId new_xmin)
* xmin of the replication slot. This handles the case where transaction
* ID wraparound has occurred.
*/
+elog(LOG,"XXX: launcher new_xid= %u",next_xid);
+elog(LOG,"XXX: launcher current slot xmin = %u",MyReplicationSlot->data.xmin);
+
if (next_xid < MyReplicationSlot->data.xmin)
xmin_epoch--;
full_xmin = FullTransactionIdFromEpochAndXid(xmin_epoch,
MyReplicationSlot->data.xmin);
+elog(LOG,"XXX: launcher full_xmin= %u",XidFromFullTransactionId(full_xmin));
if (FullTransactionIdPrecedesOrEquals(new_xmin, full_xmin))
+ {
+ elog(LOG,"XXX: launcher returned without updating xmin!");
return false;
+ }
+
SpinLockAcquire(&MyReplicationSlot->mutex);
MyReplicationSlot->data.xmin = XidFromFullTransactionId(new_xmin);
@@ -1411,6 +1419,8 @@ advance_conflict_slot_xmin(FullTransactionId new_xmin)
ReplicationSlotSave();
elog(DEBUG1, "updated xmin: %u", MyReplicationSlot->data.xmin);
+elog(LOG,"XXX: launcher updated xmin = %u",MyReplicationSlot->data.xmin);
+
/*
* Now the new xmin is safely on disk, we can let the global value
* advance. We do not take ProcArrayLock or similar since we only advance
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index afd31e1525..3d1024b96e 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -4136,12 +4136,20 @@ get_candidate_xid(RetainConflictInfoData *data)
next_full_xid = ReadNextFullTransactionId();
epoch = EpochFromFullTransactionId(next_full_xid);
+elog(LOG,"XXX: oldest_running_xid = %u",oldest_running_xid);
+elog(LOG,"XXX: next_full_xid = %u ",XidFromFullTransactionId(next_full_xid));
+
/* Compute the epoch of the oldest_running_xid */
if (oldest_running_xid > XidFromFullTransactionId(next_full_xid))
+ {
+ elog(LOG,"XXX: xid WRAPAROUND happend!!!");
epoch--;
+ }
full_xid = FullTransactionIdFromEpochAndXid(epoch, oldest_running_xid);
+elog(LOG,"XXX: candidate full_xid = %u ",XidFromFullTransactionId(full_xid));
+
/* Return if the oldest_nonremovable_xid cannot be advanced */
if (FullTransactionIdFollowsOrEquals(MyLogicalRepWorker->oldest_nonremovable_xid,
full_xid))