diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 00a8327e77..cafae5c407 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -947,7 +947,7 @@ AssertTXNLsnOrder(ReorderBuffer *rb) Assert(prev_first_lsn < cur_txn->first_lsn); /* known-as-subtxn txns must not be listed */ - Assert(!rbtxn_is_known_subxact(cur_txn)); + Assert(!rbtxn_is_subtxn(cur_txn)); prev_first_lsn = cur_txn->first_lsn; } @@ -967,7 +967,7 @@ AssertTXNLsnOrder(ReorderBuffer *rb) Assert(prev_base_snap_lsn < cur_txn->base_snapshot_lsn); /* known-as-subtxn txns must not be listed */ - Assert(!rbtxn_is_known_subxact(cur_txn)); + Assert(!rbtxn_is_subtxn(cur_txn)); prev_base_snap_lsn = cur_txn->base_snapshot_lsn; } @@ -1022,7 +1022,7 @@ ReorderBufferGetOldestTXN(ReorderBuffer *rb) txn = dlist_head_element(ReorderBufferTXN, node, &rb->toplevel_by_lsn); - Assert(!rbtxn_is_known_subxact(txn)); + Assert(!rbtxn_is_subtxn(txn)); Assert(txn->first_lsn != InvalidXLogRecPtr); return txn; } @@ -1079,7 +1079,7 @@ ReorderBufferAssignChild(ReorderBuffer *rb, TransactionId xid, if (!new_sub) { - if (rbtxn_is_known_subxact(subtxn)) + if (rbtxn_is_subtxn(subtxn)) { /* already associated, nothing to do */ return; @@ -1095,8 +1095,6 @@ ReorderBufferAssignChild(ReorderBuffer *rb, TransactionId xid, } } - subtxn->txn_flags |= RBTXN_IS_SUBXACT; - subtxn->toplevel_xid = xid; Assert(subtxn->nsubtxns == 0); /* set the reference to top-level transaction */ @@ -1135,8 +1133,6 @@ static void ReorderBufferTransferSnapToParent(ReorderBufferTXN *txn, ReorderBufferTXN *subtxn) { - Assert(subtxn->toplevel_xid == txn->xid); - if (subtxn->base_snapshot != NULL) { if (txn->base_snapshot == NULL || @@ -1519,7 +1515,7 @@ ReorderBufferCleanupTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) * they originally were happening inside another subtxn, so we won't * ever recurse more than one level deep here. */ - Assert(rbtxn_is_known_subxact(subtxn)); + Assert(rbtxn_is_subtxn(subtxn)); Assert(subtxn->nsubtxns == 0); ReorderBufferCleanupTXN(rb, subtxn); @@ -1629,7 +1625,7 @@ ReorderBufferTruncateTXN(ReorderBuffer *rb, ReorderBufferTXN *txn, bool txn_prep * they originally were happening inside another subtxn, so we won't * ever recurse more than one level deep here. */ - Assert(rbtxn_is_known_subxact(subtxn)); + Assert(rbtxn_is_subtxn(subtxn)); Assert(subtxn->nsubtxns == 0); ReorderBufferTruncateTXN(rb, subtxn, txn_prepared); @@ -3143,9 +3139,10 @@ ReorderBufferSetBaseSnapshot(ReorderBuffer *rb, TransactionId xid, * operate on its top-level transaction instead. */ txn = ReorderBufferTXNByXid(rb, xid, true, &is_new, lsn, true); - if (rbtxn_is_known_subxact(txn)) - txn = ReorderBufferTXNByXid(rb, txn->toplevel_xid, false, - NULL, InvalidXLogRecPtr, false); + + /* determine the toplevel transaction */ + txn = rbtxn_get_toptxn(txn); + Assert(txn->base_snapshot == NULL); txn->base_snapshot = snap; @@ -3389,7 +3386,7 @@ ReorderBufferXidSetCatalogChanges(ReorderBuffer *rb, TransactionId xid, */ if (rbtxn_is_subtxn(txn)) { - ReorderBufferTXN *toptxn = rbtxn_get_toptxn(txn); + ReorderBufferTXN *toptxn = txn->toptxn; if (!rbtxn_has_catalog_changes(toptxn)) { @@ -3470,9 +3467,7 @@ ReorderBufferXidHasBaseSnapshot(ReorderBuffer *rb, TransactionId xid) return false; /* a known subtxn? operate on top-level txn instead */ - if (rbtxn_is_known_subxact(txn)) - txn = ReorderBufferTXNByXid(rb, txn->toplevel_xid, false, - NULL, InvalidXLogRecPtr, false); + txn = rbtxn_get_toptxn(txn); return txn->base_snapshot != NULL; } @@ -3575,7 +3570,7 @@ ReorderBufferLargestStreamableTopTXN(ReorderBuffer *rb) txn = dlist_container(ReorderBufferTXN, base_snapshot_node, iter.cur); /* must not be a subtxn */ - Assert(!rbtxn_is_known_subxact(txn)); + Assert(!rbtxn_is_subtxn(txn)); /* base_snapshot must be set */ Assert(txn->base_snapshot != NULL);