Re: Adjust errorcode in background worker code - Mailing list pgsql-hackers

From Amit Langote
Subject Re: Adjust errorcode in background worker code
Date
Msg-id 56405FEC.6090703@lab.ntt.co.jp
Whole thread Raw
In response to Re: Adjust errorcode in background worker code  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-hackers
On 2015/11/07 3:55, Robert Haas wrote:
> On Sun, Jun 28, 2015 at 10:43 PM, Amit Langote
> <Langote_Amit_f8@lab.ntt.co.jp> wrote:
>> On 2015-06-29 AM 11:36, Amit Langote wrote:
>>> Hi,
>>>
>>> How about the attached that adjusts errorcode for the error related to
>>> checking the flag bgw_flags in BackgroundWorkerInitializeConnection*()
>>> functions so that it matches the treatment in SanityCheckBackgroundWorker()?
>>>
>>> s/ERRCODE_PROGRAM_LIMIT_EXCEEDED/ERRCODE_INVALID_PARAMETER_VALUE/g
>>>
>>> There is already a "/* XXX is this the right errcode? */" there.
>>
>> Oops, a wrong thing got attached.
>>
>> Please find correct one attached this time.
> 
> Well, I'm just catching up on some old email and saw this thread.  I
> like the idea of trying to use the best possible error code, but I'm
> not so sure this is an improvement.  One problem is that
> ERRCODE_INVALID_PARAMETER_VALUE is that we use it, uh, a lot:
> 
> [rhaas pgsql]$ git grep ERRCODE_ | sed 's/.*ERRCODE_/ERRCODE_/;
> s/[^A-Z0-9_].*//;' | sort  | uniq -c | sort -n -r | head
>  540 ERRCODE_FEATURE_NOT_SUPPORTED
>  442 ERRCODE_INVALID_PARAMETER_VALUE
>  380 ERRCODE_SYNTAX_ERROR
>  194 ERRCODE_WRONG_OBJECT_TYPE
>  194 ERRCODE_UNDEFINED_OBJECT
>  181 ERRCODE_DATATYPE_MISMATCH
>  180 ERRCODE_INSUFFICIENT_PRIVILEGE
>  150 ERRCODE_INVALID_TEXT_REPRESENTATION
>  137 ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE
>  123 ERRCODE_PROGRAM_LIMIT_EXCEEDED
> 
> I wonder if we need to think about inventing some new error codes.  I
> can sort of understand that "feature not supported" is something that
> can come in a large number of different contexts and mean pretty much
> the same all the time, but I'm betting that things like "invalid
> parameter value" and "invalid text representation" and "object not in
> prerequisite state" cover an amazing breadth of errors that may not
> actually be that similar to each other.
> 

Now that I see it, ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE may be a
better choice there.

In general, I tend to agree with the observations expressed by Craig
down-thread. I'd think this particular error code (or more to the point,
the error site) does not concern a client app itself but rather suggests a
bug in a loadable module implementation which the client app has no way to
fix itself. In general, it seems we should only ever report error codes
that a client app can do something about. But I guess that's a whole
different area and vast project to investigate about. For a rather
contrived example related to OP, it would have made sense to send an error
code if there was a parameter like worker_spi.can_connect_db which the app
set to false and then later did something with it that required a database
connection.

Thanks,
Amit




pgsql-hackers by date:

Previous
From: Fabrízio de Royes Mello
Date:
Subject: Re: Git cartoon
Next
From: Ildus Kurbangaliev
Date:
Subject: Re: [PATCH] Refactoring of LWLock tranches