Re: [HACKERS] background sessions
От | Petr Jelinek |
---|---|
Тема | Re: [HACKERS] background sessions |
Дата | |
Msg-id | 31da1617-5d7a-b4a9-85cb-3ae7abdd95dd@2ndquadrant.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] background sessions (Robert Haas <robertmhaas@gmail.com>) |
Ответы |
Re: [HACKERS] background sessions
|
Список | pgsql-hackers |
On 15/03/17 17:58, Robert Haas wrote: > On Wed, Mar 15, 2017 at 6:43 AM, Pavel Stehule <pavel.stehule@gmail.com> wrote: >> I don't understand - CHECK_FOR_INTERRUPTS called from executor implicitly. > > True. So there shouldn't be any problem here. I'm confused as can be > about what you want changed. > > Some review of the patch itself: > > + pq_redirect_to_shm_mq(session->seg, session->command_qh); > + pq_beginmessage(&msg, 'X'); > + pq_endmessage(&msg); > + pq_stop_redirect_to_shm_mq(); > > shm_redirect_to_shm_mq() wasn't really designed to be used this way; > it's designed for use by the worker, not the process that launched it. > If an error occurs while output is redirected, bad things will happen. > I think it would be better to find a way of sending that message to > the queue without doing this. Couldn't we just create special version of pq_endmessage that sends to shm_mq? > > Also, I suspect this is deadlock-prone. If we get stuck trying to > send a message to the background session while the queue is full, and > at the same time the session is stuck trying to send us a long error > message, we will have an undetected deadlock. That's why > pg_background() puts the string being passed to the worker into the > DSM segment in its entirety, rather than sending it through a shm_mq. > Yeah I think this will need to use the nowait = true when sending to shm_mq and chunk the message if necessary... -- Petr Jelinek http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
В списке pgsql-hackers по дате отправления: