Re: Support to define custom wait events for extensions
Masahiro Ikeda <ikedamsh@oss.nttdata.com>
From: Masahiro Ikeda <ikedamsh@oss.nttdata.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Andres Freund <andres@anarazel.de>, Bharath Rupireddy
<bharath.rupireddyforpostgres@gmail.com>, Tristan Partin
<tristan@neon.tech>, pgsql-hackers@lists.postgresql.org
Date: 2023-08-08T00:39:02Z
Lists: pgsql-hackers
On 2023-08-08 08:54, Michael Paquier wrote: > On Wed, Aug 02, 2023 at 06:34:15PM +0900, Masahiro Ikeda wrote: >> On 2023-08-01 12:23, Andres Freund wrote: >>> This is why the scheme as implemented doesn't really make sense to >>> me. >>> It'd be >>> much easier to use if we had a shared hashtable with the identifiers >>> than >>> what's been merged now. >>> >>> In plenty of cases it's not realistic for an extension library to run >>> in >>> each >>> backend, while still needing to wait for things. >> >> OK, I'll try to make a PoC patch. > > Hmm. There are a few things to take into account here: > - WaitEventExtensionShmemInit() should gain a dshash_create(), to make > sure that the shared table is around, and we are going to have a > reference to it in WaitEventExtensionCounterData, saved from > dshash_get_hash_table_handle(). > - The hash table entries could just use nextId as key to look at the > entries, with entries added during WaitEventExtensionNew(), and use as > contents the name of the wait event. We are going to need a fixed > size for these custom strings, but perhaps a hard limit of 256 > characters for each entry of the hash table is more than enough for > most users? > - WaitEventExtensionRegisterName() could be removed, I guess, replaced > by a single WaitEventExtensionNew(), as of: > uint32 WaitEventExtensionNew(const char *event_name); > - GetWaitEventExtensionIdentifier() needs to switch to a lookup of the > shared hash table, based on the eventId. > > All that would save from the extra WaitEventExtensionRegisterName() > needed in the backends to keep a track of the names, indeed. Thank you for pointing the direction of implementation. I am thinking a bit that we also need another hash where the key is a custom string. For extensions that have no dependencies with shared_preload_libraries, I think we need to avoid that WaitEventExtensionNew() is called repeatedly and a new eventId is issued each time. So, is it better to have another hash where the key is a custom string and uniqueness is identified by it to determine if a new eventId should be issued? Regards, -- Masahiro Ikeda NTT DATA CORPORATION
Commits
-
Change custom wait events to use dynamic shared hash tables
- af720b4c50a1 17.0 landed
-
Support custom wait events for wait event type "Extension"
- c9af05465307 17.0 landed
-
Add WAIT_EVENT_{CLASS,ID}_MASK in wait_event.c
- 7395a90db87b 17.0 landed
-
worker_spi: Switch to TAP tests
- 320c311fda91 17.0 cited
-
Simplify some conditions related to [LW]Lock in generate-wait_event_types.pl
- c17164aec88c 17.0 landed