Duplicate RequestNamedLWLocktranche() names and test_lwlock_tranches improvements

From: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
To: Matthias van de Meent <boekewurm+postgres(at)gmail(dot)com>, Nathan Bossart <nathandbossart(at)gmail(dot)com>, Sami Imseih <samimseih(at)gmail(dot)com>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Duplicate RequestNamedLWLocktranche() names and test_lwlock_tranches improvements
Date: 2026-04-05 14:28:53
Message-ID: 463a28db-0c0b-4af6-bac6-3891828bbbfe@iki.fi
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Starting new thread for this thing that Matthias noticed in my
work-in-progress patch at
https://www.postgresql.org/message-id/CAEze2WjgCROMMXY0+j8FFdm3iFcr7By-+6Mwiz=PgGSEydiW3A@mail.gmail.com.

On 05/04/2026 02:17, Matthias van de Meent wrote:
> 0006: I don't think it is a great idea to make the LwLock machinery
> the first to get allocation requests:
> It has the RequestNamedLWLockTranche infrastructure, which can only
> register new requests while process_shmem_requests_in_progress, and
> making it request its memory ahead of everything else is likely to
> cause an undersized tranche to be allocated. You could make sure that
> this isn't an issue by maintaining a flag in lwlock.c that's set when
> the shmem request is made (and reset on shmem exit), which must be
> false when RequestNamedLWLockTranche() is called, and if not then it
> should throw an error.

Good catch, RequestNamedLWLocktranche() was quite broken with the patch.
I'm surprised it didn't cause test failures. We even have unit tests for
that at src/test/modules/test_lwlock_tranches.

Looking at src/test/modules/test_lwlock_tranches, I realized that we
don't currently check that the tranche name registered with
RequestNamedLWLocktranche() is unique. If two extensions registered a
tranche with same name, we'd allocate two separate tranches for them,
but GetNamedLWLockTranche() would always return the first one.

Attached patches add a uniqueness check, and improves
test_lwlock_tranches so that it actually uses the requested LWLocks. And
I couldn't resist doing some more refactoring of the test while I was at
it; IMO it's more readable now.

Barring objections, I will commit these shortly.

- Heikki

Attachment Content-Type Size
v1-0001-Improve-test_lwlock_tranches.patch text/x-patch 12.4 KB
v1-0002-Check-that-the-tranche-name-is-unique-in-RequestN.patch text/x-patch 1.6 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Daniel Gustafsson 2026-04-05 14:36:08 Re: Changing the state of data checksums in a running cluster
Previous Message Ashutosh Bapat 2026-04-05 14:16:51 Re: Better shared data structure management and resizable shared data structures