Re: Wrong assert in TransactionGroupUpdateXidStatus

Поиск
Список
Период
Сортировка
От Amit Kapila
Тема Re: Wrong assert in TransactionGroupUpdateXidStatus
Дата
Msg-id CAA4eK1+3iVnJovHvjpyo0kpF1fHL7H6PBAc2jCMhYVZXqr9Rcw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Wrong assert in TransactionGroupUpdateXidStatus  (Andres Freund <andres@anarazel.de>)
Ответы Re: Wrong assert in TransactionGroupUpdateXidStatus  (Amit Kapila <amit.kapila16@gmail.com>)
Re: Wrong assert in TransactionGroupUpdateXidStatus  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Список pgsql-hackers
On Wed, Dec 11, 2019 at 4:02 AM Andres Freund <andres@anarazel.de> wrote:
> On 2019-12-10 13:55:40 +0530, Dilip Kumar wrote:
>
> > /*
> > * Overflowed transactions should not use group XID status update
> > * mechanism.
> > */
> > Assert(!pgxact->overflowed);
> >
> > A solution could be either we remove this assert or change this assert
> > to Assert(pgxact->nxids <= THRESHOLD_SUBTRANS_CLOG_OPT);
>
> Maybe I'm missing something, but isn't this a bug then? IIRC We can't
> rely on MyProc->subxids once we overflowed, even if since then the
> remaining number of children has become low enough.
>

AFAICS, the MyProc->subxids is maintained properly if the number of
subtransactions is lesser than PGPROC_MAX_CACHED_SUBXIDS (64).  Can
you explain the case where that won't be true?  Also, even if what you
are saying is true, I think the memcmp in TransactionIdSetPageStatus
should avoid taking us a wrong decision.


>
> Also, it's somewhat odd that TransactionIdSetPageStatus() first has
>
>         /* Can't use group update when PGPROC overflows. */
>         StaticAssertStmt(THRESHOLD_SUBTRANS_CLOG_OPT <= PGPROC_MAX_CACHED_SUBXIDS,
>                                          "group clog threshold less than PGPROC cached subxids");
>
> and then, within an if():
>
>                 /*
>                  * 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);
>
> Even if these weren't redundant, it can't make sense to test such a
> static condition only within an if?
>

I don't remember exactly the reason for this, but now I don't find the
Assert within if () meaningful.  I think we should remove the Assert
inside if() unless Robert or someone see any use of it.

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Michael Paquier
Дата:
Сообщение: Re: Fetching timeline during recovery
Следующее
От: Kyotaro Horiguchi
Дата:
Сообщение: Re: Start Walreceiver completely before shut down it on standbyserver.