Re: Race condition in TransactionIdIsInProgress

Heikki Linnakangas <hlinnaka@iki.fi>

From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Simon Riggs <simon.riggs@enterprisedb.com>
Cc: Andres Freund <andres@anarazel.de>, Robert Haas <robertmhaas@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, Konstantin Knizhnik <knizhnik@garret.ru>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2022-06-27T05:26:22Z
Lists: pgsql-hackers
On 25/06/2022 13:10, Simon Riggs wrote:
> On Sat, 25 Jun 2022 at 10:18, Heikki Linnakangas <hlinnaka@iki.fi> wrote:
>>
>> On 24/06/2022 04:43, Andres Freund wrote:
>>> On 2022-06-23 22:03:27 +0300, Heikki Linnakangas wrote:
>>>> In summary, I think we should:
>>>> - commit and backpatch Simon's
>>>> just_remove_TransactionIdIsKnownCompleted_call.v1.patch
>>>> - fix pg_xact_status() to check TransactionIdIsInProgress()
>>>> - in v15, remove TransationIdIsKnownCompleted function altogether
>>>>
>>>> I'll try to get around to that in the next few days, unless someone beats me
>>>> to it.
>>>
>>> Makes sense.
>>
>> This is what I came up with for master. One difference from Simon's
>> original patch is that I decided to not expose the
>> TransactionIdIsKnownNotInProgress(), as there are no other callers of it
>> in core, and it doesn't seem useful to extensions. I inlined it into the
>> caller instead.
> 
> Looks good, thanks.

Committed and backpatched. Thanks!

- Heikki



Commits

  1. Fix visibility check when XID is committed in CLOG but not in procarray.

  2. Fix possible HOT corruption when RECENTLY_DEAD changes to DEAD while pruning.

  3. Make TransactionIdIsInProgress check transam.c's single-item XID status cache