Re: Improve LWLock tranche name visibility across backends
| От | Alexander Lakhin | 
|---|---|
| Тема | Re: Improve LWLock tranche name visibility across backends | 
| Дата | |
| Msg-id | dd36d384-55df-4fc2-825c-5bc56c950fa9@gmail.com обсуждение исходный текст  | 
		
| Ответ на | Re: Improve LWLock tranche name visibility across backends (Nathan Bossart <nathandbossart@gmail.com>) | 
| Ответы | 
                	
            		Re: Improve LWLock tranche name visibility across backends
            		
            		 | 
		
| Список | pgsql-hackers | 
Hello Nathan, 04.09.2025 23:37, Nathan Bossart wrote: > On Thu, Sep 04, 2025 at 12:30:27PM -0500, Sami Imseih wrote: >> I liked removing the repalloc calls inside this routine and did not think >> it was worth optimizing. I am OK with reverting it back. Although v1 >> is incorrect since it's still initializing >> NamedLWLockTrancheRequestArray to MAX_NAMED_TRANCHES > Committed with that fix. > >>> Furthermore, the >>> MAX_NAMED_TRANCHES check isn't actually needed because InitializeLWLocks() >>> will do the same check via its calls to LWLockNewTrancheId() for all the >>> named tranche requests. >> I thought about that one and decided to add the error message there, since >> requesting a tranche happens way before LWLockNewTrancheId is called >> during CreateLWLocks, so it was more about erroring out slightly earlier. >> But it may be ok to also just remove it. > We needed it before because the array could only ever hold > MAX_NAMED_TRANCHES requests. I've discovered (with SQLsmith) that the new possible error makes pg_prewarm/autoprewarm fail when the error triggered during it's initialization and then another instance tries to acquire apw_state->lock. Please try the following: psql -c "CREATE EXTENSION test_dsa; CREATE EXTENSION pg_prewarm;" psql -c "SELECT test_dsa_resowners() FROM generate_series(1, 256)" >/dev/null psql -c "SELECT pg_sleep(0.5); SELECT autoprewarm_dump_now()" & psql -c "SELECT pg_sleep(1); SELECT autoprewarm_dump_now()" with debug_parallel_query = 'on' min_dynamic_shared_memory = '1GB' in postgresql.conf it causes PANIC for me (on roughly 5 out or 10 runs) as below: CREATE EXTENSION CREATE EXTENSION pg_sleep ---------- (1 row) ERROR: maximum number of tranches already registered DETAIL: No more than 256 tranches may be registered. pg_sleep ---------- (1 row) server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. PANIC: stuck spinlock detected at LWLockWaitListLock, lwlock.c:882 ... #5 0x000057831e809d1d in errfinish (filename=0x57831ea53edd "s_lock.c", lineno=89, funcname=0x57831ea53ee8 <__func__.0> "s_lock_stuck") at elog.c:609 #6 0x000057831e5f2185 in s_lock_stuck (file=0x57831ea5184c "lwlock.c", line=882, func=0x57831ea51c30 <__func__.5> "LWLockWaitListLock") at s_lock.c:89 #7 0x000057831e5f2291 in perform_spin_delay (status=0x7ffdf9fabbe0) at s_lock.c:135 #8 0x000057831e5e4015 in LWLockWaitListLock (lock=0x736a16ad6500) at lwlock.c:886 #9 0x000057831e5e4475 in LWLockQueueSelf (lock=0x736a16ad6500, mode=LW_EXCLUSIVE) at lwlock.c:1055 #10 0x000057831e5e4728 in LWLockAcquire (lock=0x736a16ad6500, mode=LW_EXCLUSIVE) at lwlock.c:1259 #11 0x0000736a63dbcc82 in apw_dump_now (is_bgworker=false, dump_unlogged=true) at autoprewarm.c:676 #12 0x0000736a63dbd5c9 in autoprewarm_dump_now (fcinfo=0x57835c770fe8) at autoprewarm.c:854 ... Best regards, Alexander
В списке pgsql-hackers по дате отправления: