Re: BUG #18212: Functions txid_status() and pg_xact_status() return invalid status of the specified transaction

Karina Litskevich <litskevichkarina@gmail.com>

From: Karina Litskevich <litskevichkarina@gmail.com>
To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: kyzevan23@mail.ru, pgsql-bugs@lists.postgresql.org
Date: 2023-11-30T05:30:36Z
Lists: pgsql-bugs

Attachments

On Tue, Nov 28, 2023 at 8:20 AM Kyotaro Horiguchi <horikyota.ntt@gmail.com>
wrote:

> I considered bringing this down to a comparison of 32-bit XIDs, but
> couldn't come up with a clean method. Therefore, using full XID seems
> to be the right approach. However, it seems like there is an error in
> the XID comparison condition. There are cases where oldest_xid and
> now_epoch_next_xid can have the same value. If we skip running
> txid_current() in the repro in the your previous mail, and directly
> execute txid_status(3), it would lead to assertion failure.
>

Thank you for your feedback! You're right, I haven't thought about
this corner case. Fixed in v2.

Also, I feel the comments could be more straight forward and simple
> like this:
>
> > Convert oldest_xid into a full XID to compare with the given
> > XID. Alghouth it's guaranteed that the the oldest and newest XIDs
> > are within the XID wraparound distance, they may have different
> > epochs.
>

I tried to improve the comment too. Anyway, don't hesitate to change
it to whatever you like better.

Best regards,
Karina Litskevich
Postgres Professional: http://postgrespro.com/

Commits

  1. Fix wrong logic in TransactionIdInRecentPast()