Re: Is psSocketPoll doing the right thing?

From: Katsuragi Yuta <katsuragiy(at)oss(dot)nttdata(dot)com>
To: Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>
Cc: masao(dot)fujii(at)oss(dot)nttdata(dot)com, pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Is psSocketPoll doing the right thing?
Date: 2023-02-16 04:44:34
Message-ID: ba24b0eb71b5a90bce2874657f56aac2@oss.nttdata.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 2023-02-10 10:42, Kyotaro Horiguchi wrote:
>> On 2023/02/09 11:50, Kyotaro Horiguchi wrote:
>> > Hello.
>> > While looking a patch, I found that pqSocketPoll passes through the
>> > result from poll(2) to the caller and throws away revents. If I
>> > understand it correctly, poll() *doesn't* return -1 nor errno by the
>> > reason it has set POLLERR, POLLHUP, POLLNVAL, and POLLRDHUP for some
>> > of the target sockets, and returns 0 unless poll() itself failed to
>> > work.
>>
>> As far as I understand correctly, poll() returns >0 if "revents"
>> has either of those bits, not 0 nor -1.
>
> Right. as my understanding.
>
> If any of the sockets is in any of the states, pqSocketPoll returns a
> positive, which makes pqSocketCheck return 1. Finally
> pqRead/WriteReady return "ready" even though the connection socket is
> in an error state. Actually that behavior doesn't harm since the
> succeeding actual read/write will "properly" fail. However, once we
> use this function to simply check the socket is sound without doing an
> actual read/write, that behavior starts giving a harm by the false
> answer.

I agree with you. Current pqScoketCheck could return a false result
from a caller's point of view.

>> You're thinking that pqSocketPoll() should check "revents" and
>> return -1 if either of those bits is set?
>
> In short, yes.
>
> pqSocketPoll() should somehow inform callers about that
> state. Fortunately pqSocketPoll is a private function thus we can
> refactor the function so that it can do that properly.

Does this mean that pqSocketPoll or pqSocketCheck somehow returns the
poll's result including error conditions (POLLERR, POLLHUP, POLLNVAL)
to callers? Then callers filter the result to make their final result.

regards,

--
Katsuragi Yuta
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Dilip Kumar 2023-02-16 04:54:13 Re: DDL result is lost by CREATE DATABASE with WAL_LOG strategy
Previous Message Ashutosh Sharma 2023-02-16 04:39:22 Re: Minimal logical decoding on standbys