Re: Improve LWLock tranche name visibility across backends

From: Sami Imseih <samimseih(at)gmail(dot)com>
To: Bertrand Drouvot <bertranddrouvot(dot)pg(at)gmail(dot)com>
Cc: Nathan Bossart <nathandbossart(at)gmail(dot)com>, Rahila Syed <rahilasyed90(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Improve LWLock tranche name visibility across backends
Date: 2025-08-17 03:18:05
Message-ID: CAA5RZ0ukmNd+C1jH4V6BGEea-wmyLxDtDE5QoEtfXd2W5HNHfQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

>> See v7.

I fixed an earlier issue with Windows, which was due to not initializing the
shared memory inside

```
#ifdef EXEC_BACKEND
extern void AttachSharedMemoryStructs(void);
#endif
```

But then I found another one after. LWLockTrancheNames gets forked on Linux,
but of course that will not happen on Windows without extra work. So, the
tests failed because the requested tranches (via RequestNamedLWLockTranche)
were not being found when looked up.

But of course, we already have provisions to copy these tranches for
Windows ( see inside launch_backend.c ).

```
int NamedLWLockTrancheRequests;
NamedLWLockTranche *NamedLWLockTrancheArray;
LWLockPadded *MainLWLockArray;
```

So, this means that for the local memory sync, we can actually just copy the
requested tranches (via RequestNamedLWLockTranche) and then the shared memory
tranches. This is much better, as it syncs using both possible sources
for tranche names.

```
int i = 0;

while (i < NamedLWLockTrancheRequests)
{
NamedLWLockTranche *tranche;

tranche = &NamedLWLockTrancheArray[i];

SetLocalTrancheName(i, tranche->trancheName);

i++;
}

/* Acquire shared lock on tranche names shared memory */
LWLockAcquire(&LWLockTrancheNames.shmem->lock, LW_SHARED);

while (i < LWLockTrancheNames.shmem->allocated)
{
```

So, now these tests pass locally on Windows.

Attached is v8.

--

Sami

Attachment Content-Type Size
v8-0002-Add-tests-for-LWLock-tranche-names-DSA.patch application/octet-stream 19.3 KB
v8-0001-Implement-a-DSA-for-LWLock-tranche-names.patch application/octet-stream 32.7 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message jian he 2025-08-17 03:57:50 Re: someone else to do the list of acknowledgments
Previous Message Kirk Wolak 2025-08-16 22:56:12 Re: PoC: pg_dump --filter-data <file> (like Oracle Where Clause on RMAN for specific tables)