Обсуждение: Missing documentation for error code: 80S01

Поиск
Список
Период
Сортировка

Missing documentation for error code: 80S01

От
"Donald Fraser"
Дата:
PostgreSQL version 8.3.14
 
There appears to be no documentation on the following error code:
Error code is: 80S01
Message: "The backend has broken the connection. Possibly the action you have attempted has caused it to close."
 
I was expecting the code to be something like:
crash_shutdown, however that appears to be under a
completely different error class: 57P02.
Regards
Donald

Re: Missing documentation for error code: 80S01

От
"Donald Fraser"
Дата:
Correction error code should be:
08S01
and NOT
80S01
 
----- Original Message -----
Subject: Missing documentation for error code: 80S01

PostgreSQL version 8.3.14
 
There appears to be no documentation on the following error code:
Error code is: 80S01
Message: "The backend has broken the connection. Possibly the action you have attempted has caused it to close."
 
I was expecting the code to be something like:
crash_shutdown, however that appears to be under a
completely different error class: 57P02.
Regards
Donald

Re: Missing documentation for error code: 80S01

От
Tom Lane
Дата:
"Donald Fraser" <postgres@kiwi-fraser.net> writes:
> Correction error code should be:
> 08S01
> and NOT
> 80S01

The reason it's not documented by us is that Postgres doesn't generate
any such error code.  Must be coming from some client-side software you
are using.

            regards, tom lane

Re: Missing documentation for error code: 80S01

От
"Donald Fraser"
Дата:
----- Original Message -----
From: "Tom Lane" <tgl@sss.pgh.pa.us>


> "Donald Fraser" <postgres@kiwi-fraser.net> writes:
>> Correction error code should be:
>> 08S01
>> and NOT
>> 80S01
>
> The reason it's not documented by us is that Postgres doesn't generate
> any such error code.  Must be coming from some client-side software you
> are using.

Yes you are correct, it is coming from the PostgreSQL JDBC driver.

Thanks.


Re: Missing documentation for error code: 80S01

От
"Kevin Grittner"
Дата:
"Donald Fraser" <postgres@kiwi-fraser.net> wrote:

> I was expecting the code to be something like: crash_shutdown,
> however that appears to be under a completely different error
> class: 57P02.

If a JDBC client detects that the connection is broken, how would it
know that it is because the server crashed?

-Kevin

Re: Missing documentation for error code: 80S01

От
"Donald Fraser"
Дата:
----- Original Message -----
From: "Kevin Grittner" <Kevin.Grittner@wicourts.gov>

> "Donald Fraser" <postgres@kiwi-fraser.net> wrote:
>
>> I was expecting the code to be something like: crash_shutdown,
>> however that appears to be under a completely different error
>> class: 57P02.
>
> If a JDBC client detects that the connection is broken, how would it
> know that it is because the server crashed?
>
You are correct how could it. However the JDBC driver does know
that the server has terminated the connection and not an
IO error (via end of stream or EOF).

Is the error class "57" a better prefix for this type of error?
Knowing that the the only options for server shut down are:
Admin shut-down or Crash shut-down ?

Regards
Donald

Re: Missing documentation for error code: 80S01

От
"Kevin Grittner"
Дата:
"Donald Fraser" <postgres@kiwi-fraser.net> wrote:

> the JDBC driver does know that the server has terminated the
> connection [...] (via end of stream or EOF).
>
> Is the error class "57" a better prefix for this type of error?

Possibly.  Is it really true that the client will see a clean close
for a canceled query or a clean server shutdown and never see a
clean close of the TCP connection from the server side for other
reasons?

-Kevin

Re: Missing documentation for error code: 80S01

От
"Donald Fraser"
Дата:
From: "Kevin Grittner" <Kevin.Grittner@wicourts.gov>

> "Donald Fraser" <postgres@kiwi-fraser.net> wrote:
>
>> the JDBC driver does know that the server has terminated the
>> connection [...] (via end of stream or EOF).
>>
>> Is the error class "57" a better prefix for this type of error?
>
> Possibly.  Is it really true that the client will see a clean close
> for a canceled query or a clean server shutdown and never see a
> clean close of the TCP connection from the server side for other
> reasons?

Technically yes. When performing a read on the socket you get -1 indicating
EOF or remote socket closed. You don't get an IO error.
The difficult part is what was the client doing when the server closes the
socket?
If the client wasn't doing anything then the next likely action a client
would perform is to execute a query which would involve writing to the
socket first and in this case you will get a broken pipe IO exception,
rather than remote socket closed.
If the client had already executed a query and was attempting to read
response data then you get remote socket closed.

I would like to propose that when a "remote socket closed" is detected that
the JDBC driver uses a different error code to the one used for IO
exceptions.
Currently for IO exceptions error code is: "08S01"
For detection of remote socket closed, the error code should be different -
may be "08S02" or "57P00"?
I'm not really sure where or how these numbers are supposed to be
used/generated.
The "08" class would seem to be the most appropriate since it is
connection related.

Regards
Donald Fraser


Re: [JDBC] Missing documentation for error code: 80S01

От
Oliver Jowett
Дата:
On 13 April 2011 21:57, Donald Fraser <postgres@kiwi-fraser.net> wrote:

> Technically yes. When performing a read on the socket you get -1 indicating
> EOF or remote socket closed. You don't get an IO error.
> The difficult part is what was the client doing when the server closes the
> socket?
> If the client wasn't doing anything then the next likely action a client
> would perform is to execute a query which would involve writing to the
> socket first and in this case you will get a broken pipe IO exception,
> rather than remote socket closed.
> If the client had already executed a query and was attempting to read
> response data then you get remote socket closed.
>
> I would like to propose that when a "remote socket closed" is detected that
> the JDBC driver uses a different error code to the one used for IO
> exceptions.

If the server is shut down mid-query, doesn't the backend complete the
current query cycle before closing the connection?
i.e. we'd see ErrorResponse, ReadyForQuery, and return control to the
app before seeing EOF anyway?
The protocol spec is a bit vague there.

Oliver

Re: [JDBC] Missing documentation for error code: 80S01

От
"Donald Fraser"
Дата:
From: "Oliver Jowett" <oliver@opencloud.com>
> If the server is shut down mid-query, doesn't the backend complete the
> current query cycle before closing the connection?
> i.e. we'd see ErrorResponse, ReadyForQuery, and return control to the
> app before seeing EOF anyway?
> The protocol spec is a bit vague there.

From an observation perspective only: It would seem that in the case where
the server is shut down gracefully yes, however in the case where the server
has either crashed or the connection terminated un-gracefully via software
control (for example a C funcion: elog(FATAL, "Terminating connection...");)
then no.

Donald


Re: [BUGS] [JDBC] Missing documentation for error code: 80S01

От
Robert Haas
Дата:
On Wed, Apr 13, 2011 at 6:52 AM, Donald Fraser <postgres@kiwi-fraser.net> wrote:
>> If the server is shut down mid-query, doesn't the backend complete the
>> current query cycle before closing the connection?
>> i.e. we'd see ErrorResponse, ReadyForQuery, and return control to the
>> app before seeing EOF anyway?
>> The protocol spec is a bit vague there.
>
> From an observation perspective only: It would seem that in the case where
> the server is shut down gracefully yes, however in the case where the server
> has either crashed or the connection terminated un-gracefully via software
> control (for example a C funcion: elog(FATAL, "Terminating connection...");)
> then no.

A smart shutdown waits for clients to exit on their own.  A fast or
immediate shutdown kills them immediately, even mid-query.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company