From 0eac283bfc8b893d91a1ecf184d2c8373a1ed906 Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Thu, 12 Dec 2019 11:51:30 +0530 Subject: [PATCH] Change overly strict Assert in TransactionGroupUpdateXidStatus. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 47db7a8a88..8a70644523 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,