Re: Notify enhancement
От | Andrew Dunstan |
---|---|
Тема | Re: Notify enhancement |
Дата | |
Msg-id | 45831956.1010707@dunslane.net обсуждение исходный текст |
Ответ на | Re: Notify enhancement (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-hackers |
Tom Lane wrote: > Alvaro Herrera <alvherre@commandprompt.com> writes: > >> Andrew Dunstan wrote: >> >>> I don't understand how we decide that everybody who needs a given >>> event+message has got it, if we don't know who (if anyone) is listening? >>> How do we decide that we no longer need the info in the shmem buffer? >>> > > >> Keep a pointer in shared memory for each listener backend, saying how >> far it has scanned the ring? There would be a single writing pointer, >> so it's trivial to see when the ring is "full". >> > > Right. Read the code in src/backend/storage/ipc/sinvaladt.c, especially > SIInsertDataEntry, SIGetDataEntry, SIDelExpiredDataEntries. > > >>> Are we keeping use of SIGUSR2 in this scheme? >>> > > >> What for? Just protect the write pointer with a lwlock and have >> listeners check whether somebody has written something. >> > > You do want something comparable to SIGUSR2 to prod active backends to > consume messages, in case they are busy doing a query and hence not > checking the ring. I'm envisioning something like having the SIGUSR2 > signal handler set a flag that's checked by CHECK_FOR_INTERRUPTS(), > and if set then ProcessInterrupts will go off and absorb messages. > Onlookers can tell who's falling behind by noting where their read > pointers are, and can issue SIGUSR2 to the laggards --- in particular, > any backend that finds itself unable to insert a NOTIFY into the ring > for lack of space can SIGUSR2 the laggards and then sleep a little. > > > OK, thanks. Will study further. cheers andrew
В списке pgsql-hackers по дате отправления: