Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Change overly strict Assert in TransactionGroupUpdateXidStatus.
authorAmit Kapila <akapila@postgresql.org>
Thu, 12 Dec 2019 06:21:30 +0000 (11:51 +0530)
committerAmit Kapila <akapila@postgresql.org>
Tue, 17 Dec 2019 04:16:49 +0000 (09:46 +0530)
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

index 8b7ff5b0c24b8a8d0139bbe60044204d94ac66d4..501bc20a96af85041eafd360f2cc11c80cc3b02f 100644 (file)
@@ -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,