postgres.git / summary / log / commit / refs

commit    af3290f5e790dcd1be3ac209be1805626f4ebac8
Author:   Amit Kapila <akapila@postgresql.org>
Date:     Thu Dec 12 06:21:30 2019 +0000
First released in: 13.0, 11.7, 12.2

    Change overly strict Assert in TransactionGroupUpdateXidStatus.
    
    This Assert thought that an overflowed transaction can never get registered
    for the group update.  But that is not true, because even when the number
    of children for a transaction got reduced, the overflow flag is not
    changed.  And, for group update, we only care about the current number of
    children for a transaction that is being committed.
    
    Based on comments by Andres Freund, remove a redundant Assert in
    TransactionIdSetPageStatus as we already had a static Assert for the same
    condition a few lines earlier.
    
    Reported-by: Vignesh C
    Author: Dilip Kumar
    Reviewed-by: Amit Kapila
    Backpatch-through: 11
    Discussion: https://postgr.es/m/CAFiTN-s5=uJw-Z6JC9gcqtBSjXsrHnU63PXBrA=pnBjqnkm5UA@mail.gmail.com


src/backend/access/transam/clog.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/backend/access/transam/clog.c b/src/backend/access/transam/clog.c index 7f7eb21b4f4..f3f1b989266 100644 --- a/src/backend/access/transam/clog.c +++ b/src/backend/access/transam/clog.c @@ -299,13 +299,6 @@ TransactionIdSetPageStatus(TransactionId xid, int nsubxids, memcmp(subxids, MyProc->subxids.xids, nsubxids * sizeof(TransactionId)) == 0) { - /* - * We don't try to do group update optimization if a process has - * overflowed the subxids array in its PGPROC, since in that case we - * don't have a complete list of XIDs for it. - */ - Assert(THRESHOLD_SUBTRANS_CLOG_OPT <= PGPROC_MAX_CACHED_SUBXIDS); - /* * If we can immediately acquire CLogControlLock, we update the status * of our own XID and release the lock. If not, try use group XID @@ -520,10 +513,10 @@ TransactionGroupUpdateXidStatus(TransactionId xid, XidStatus status, PGXACT *pgxact = &ProcGlobal->allPgXact[nextidx]; /* - * Overflowed transactions should not use group XID status update - * mechanism. + * Transactions with more than THRESHOLD_SUBTRANS_CLOG_OPT sub-XIDs + * should not use group XID status update mechanism. */ - Assert(!pgxact->overflowed); + Assert(pgxact->nxids <= THRESHOLD_SUBTRANS_CLOG_OPT); TransactionIdSetPageStatusInternal(proc->clogGroupMemberXid, pgxact->nxids, [parent: fcf3b6917bd8]