Re: An improvement of ProcessTwoPhaseBuffer logic

From: "Vitaly Davydov" <v(dot)davydov(at)postgrespro(dot)ru>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: An improvement of ProcessTwoPhaseBuffer logic
Date: 2025-01-22 12:45:30
Message-ID: 3ebed0-6790e880-3-24447380@20764243
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Dear Hackers,

I hope you may find this patch worth to consider. You may consider this patch as one more step to a complete migration to FullTransactionId in twophase.c for 17+ versions.

The patch fixes TwoPhaseFilePath function. The current version gets TransactionId as an argument and makes a path to the file with twophase transaction state. The problem - this logic is ambiguous, because xid doesn't contain the epoch. By replacing the argument with FullTransactionId, the logic of this function becomes straightforward. All the responsibility to properly form a full xid were delegated to the caller functions.

The change in TwoPhaseFilePath implies to migrate to FullTransactionId in some other functions. There is a function AdjustToFullTransactionId (in the current master) which converts xid to full xid. The problem with this function is that it works properly only with those xids that are inside the current xid range which is defined by the xid horizon (wraparound), because it applies some assumptions concerning epoch definition (two epoches may be in action).

I assume that if a xid is coming from in-memory states, it has to be in the current xid range. Based on this assumption, I would conclude that if the xid is coming via the interface (external) functions which are defined in twophase.h, AdjustToFullTransactionId can be applied to such xid.

There is another story when we define xid from two phase file names, when reading pg_twophase directory. In 17+ twophase file names was changed to contain tx epoch as well. Once we work with twophase files, we have to use full xids. Function AdjustToFullTransactionId is not applicable in this case, because pg_twophase directory may contain any garbage files with future or past full xids which are outside of the current range.

Based on these assumptions (AdjustToFullTransactionId or use full xids) some other functions were modified as shown in the patch.

With best regards,
Vitaly

Attachment Content-Type Size
0001-Use-FullTransactionId-in-TwoPhaseFilePath-and-in-som.patch text/x-patch 10.0 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Shinya Kato 2025-01-22 13:01:48 Re: Set AUTOCOMMIT to on in script output by pg_dump
Previous Message Japin Li 2025-01-22 12:37:44 Re: [RFC] Lock-free XLog Reservation from WAL