Re: Issue in postgres_fdw causing unnecessary wait for cancel request reply - Mailing list pgsql-hackers

From Etsuro Fujita
Subject Re: Issue in postgres_fdw causing unnecessary wait for cancel request reply
Date
Msg-id CAPmGK143nF7BQW0cFv3tpae7FrdYQfKH7eUE+CgwG5c6QGkZ=g@mail.gmail.com
Whole thread Raw
In response to Re: Issue in postgres_fdw causing unnecessary wait for cancel request reply  (Fujii Masao <masao.fujii@oss.nttdata.com>)
Responses Re: Issue in postgres_fdw causing unnecessary wait for cancel request reply  (Kyotaro Horiguchi <horikyota.ntt@gmail.com>)
List pgsql-hackers
On Fri, Apr 14, 2023 at 11:28 PM Fujii Masao
<masao.fujii@oss.nttdata.com> wrote:
> On 2023/04/14 18:59, Etsuro Fujita wrote:
> >> The primary message basically should avoid reference to implementation details such as specific structure names
likePGcancel, shouldn't it, as per the error message style guide? 
> >
> > I do not think that PGcancel is that specific, as it is described in
> > the user-facing documentation [1].  (In addition, the error message I
> > proposed was created by copying the existing error message "could not
> > create OpenSSL BIO structure" in contrib/sslinfo.c.)
>
> I think that mentioning PGcancel in the error message could be confusing for average users who are just running a
queryon a foreign table and encounter the error message after pressing Ctrl-C. They may not understand why the PGcancel
structis referenced in the error message while accessing foreign tables. It could be viewed as an internal detail that
isnot necessary for the user to know. 

Ok, understood.  I do not think it is wrong to use "could not send
cancel request” for PQgetCancel as well, but I feel that that is not
perfect for PQgetCancel, because that function never sends a cancel
request; that function just initializes the request.  So how about
"could not initialize cancel request”, instead?

> >> Although the primary message is the same, the supplemental message provides additional context that can help
distinguishwhich function is reporting the message. 
> >
> > If the user is familiar with the PQgetCancel/PQcancel internals, this
> > is true, but if not, I do not think this is always true.  Consider
> > this error message, for example:
> >
> > 2023-04-14 17:48:55.862 JST [24344] WARNING:  could not send cancel
> > request: invalid integer value "99999999999" for connection option
> > "keepalives"
> >
> > It would be hard for users without the knowledge about those internals
> > to distinguish that from this message.  For average users, I think it
> > would be good to use a more distinguishable error message.
>
> In this case, I believe that they should be able to understand that an invalid integer value "99999999999" was
specifiedin the "keepalives" connection option, which caused the warning message. Then, they would need to check the
settingof the "keepalives" option and correct it if necessary. 

Maybe my explanation was not clear.  Let me explain.  Assume that a
user want to identify the place where the above error was thrown.
Using grep with ”could not send cancel request”, the user can find the
two places emitting the message in pgfdw_cancel_query_begin: one for
PQgetCancel and one for PQcancel.  If the user are familiar with the
PQgetCancel/PQcancel internals, the user can determine, from the
supplemental message, that the error was thrown by the former.  But if
not, the user cannot do so.  To support the unfamiliar user as well, I
think it would be a good idea to use a more appropriate message for
PQgetCancel that is different from "could not send cancel request”.

(I agree that most users would not care about the places where errors
were thrown, but I think some users would, and actually, I do when
investigating unfamiliar errors.)

Best regards,
Etsuro Fujita



pgsql-hackers by date:

Previous
From: Mikael Kjellström
Date:
Subject: Re: Direct I/O
Next
From: Richard Guo
Date:
Subject: Re: Allowing parallel-safe initplans