Locks release order in LogStandbySnapshot

From: Japin Li <japinli(at)hotmail(dot)com>
To: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Locks release order in LogStandbySnapshot
Date: 2022-11-09 03:03:04
Message-ID: MEYP282MB1669F81EB43FF064E348BFCEB63E9@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Hi, hackers

GetRunningTransactionData requires holding both ProcArrayLock and
XidGenLock (in that order). Then LogStandbySnapshot releases those
locks in that order. However, to reduce the frequency of having to
wait for XidGenLock while holding ProcArrayLock, ProcArrayAdd releases
them in reversed acquisition order.

The comments of LogStandbySnapshot says:

> GetRunningTransactionData() acquired ProcArrayLock, we must release it.
> For Hot Standby this can be done before inserting the WAL record
> because ProcArrayApplyRecoveryInfo() rechecks the commit status using
> the clog. For logical decoding, though, the lock can't be released
> early because the clog might be "in the future" from the POV of the
> historic snapshot. This would allow for situations where we're waiting
> for the end of a transaction listed in the xl_running_xacts record
> which, according to the WAL, has committed before the xl_running_xacts
> record. Fortunately this routine isn't executed frequently, and it's
> only a shared lock.

This comment is only for ProcArrayLock, not for XidGenLock. IIUC,
LogCurrentRunningXacts doesn't need holding XidGenLock, right?

Does there any sense to release them in reversed acquisition order in
LogStandbySnapshot like ProcArrayRemove?

--
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.

Attachment Content-Type Size
locks-release-order-in-LogStandbySnapshot.diff text/x-diff 803 bytes

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2022-11-09 03:21:43 Re: Locks release order in LogStandbySnapshot
Previous Message Andres Freund 2022-11-09 03:02:48 Re: Asynchronous and "direct" IO support for PostgreSQL.