Re: timeout of pg_receivexlog --status-interval
От | Fujii Masao |
---|---|
Тема | Re: timeout of pg_receivexlog --status-interval |
Дата | |
Msg-id | CAHGQGwGnDqCQ6avD0ZOXqFZarMpis+KbP5Egf7n9kXb4Z3NicA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: timeout of pg_receivexlog --status-interval (Sawada Masahiko <sawada.mshk@gmail.com>) |
Список | pgsql-hackers |
On Wed, Jul 16, 2014 at 2:29 AM, Sawada Masahiko <sawada.mshk@gmail.com> wrote: > On Tue, Jul 15, 2014 at 7:38 PM, Fujii Masao <masao.fujii@gmail.com> wrote: >> On Thu, Jul 10, 2014 at 11:10 PM, Sawada Masahiko <sawada.mshk@gmail.com> wrote: >>> Hi, >>> >>> At 1047 line of receivelog.c:CopyStreamPoll(), we set NULL to >>> timeoutptr variable. >>> if the value of timeoutprt is set NULL then the process will wait >>> until can read socket using by select() function as following. >>> >>> if (timeout_ms < 0) >>> timeoutptr = NULL; >>> else >>> { >>> timeout.tv_sec = timeout_ms / 1000L; >>> timeout.tv_usec = (timeout_ms % 1000L) * 1000L; >>> timeoutptr = &timeout; >>> } >>> >>> ret = select(PQsocket(conn) + 1, &input_mask, NULL, NULL, timeoutptr); >>> >>> But the 1047 line of receivelog.c is never executed because the value >>> of timeout_ms is NOT allowed less than 0 at CopyStreamReceive which is >>> only one function calls CopyStreamPoll(). >>> The currently code, if we specify -s to 0 then CopyStreamPoll() >>> function is never called. >>> And the pg_receivexlog will be execute PQgetCopyData() and failed, in >>> succession. >> >> Thanks for reporting this! Yep, this is a problem. >> >>> I think that it is contradiction, and should execute select() function >>> with NULL of fourth argument. >>> the attached patch allows to execute select() with NULL, i.g., >>> pg_receivexlog.c will wait until can read socket without timeout, if >>> -s is specified to 0. >> >> Your patch changed the code so that CopyStreamPoll is called even >> when the timeout is 0. I don't agree with this change because the >> timeout=0 basically means that the caller doesn't request to block and >> there is no need to call CopyStreamPoll in this case. So I'm thinking to >> apply the attached patch. Thought? >> > > Thank you for the response. > I think this is better. > > One another point about select() function, I think that they are same > behavior between the fifth argument is NULL and 0(i.g. 0 sec). No, per manpage of select(2), select(2) with timeout=0 behaves differently from select(2) with timeout=NULL. So I don't think your suggestion is acceptable... Regards, -- Fujii Masao
В списке pgsql-hackers по дате отправления: