Re: libpq and connection failures

Поиск
Список
Период
Сортировка
От jtv@xs4all.nl
Тема Re: libpq and connection failures
Дата
Msg-id 24362.202.47.227.25.1120635552.squirrel@202.47.227.25
обсуждение исходный текст
Ответ на Re: libpq and connection failures  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: libpq and connection failures
Список pgsql-interfaces
Tom Lane wrote:
> I think it's probably better to have the default assumption be
> "connection possibly recoverable" than have it be "summarily kill
> connection at first hint of trouble".  The latter seems less robust
> not more so.

Not after the connection failure has made its way into a PGresult, surely?Doesn't seem consistent with the design
choiceof aborting transactions
 
on error, for starters.  Are you saying that a session is still in usable
shape when you have no way of establishing whether the last command
succeeded?

If you're in an explicit transaction when this happens, it's in an unknown
state[*] so you have to abort anyway.  All the client hears is "there's
been an error of some sort, but the connection may or may not be fine,
thank you."  You don't necessarily know what level of transaction nesting
you're in though, so you may have to fire off aborts until you're pretty
sure you're out of all of them.  Frankly I'd rather call PQreset() just to
save myself the trouble.

(*) Yes, there are cases where the transaction is left in a reliable
state.  Such as on a read-only query, which the application could retry
(I'll assume it cares about the results or it wouldn't have queried) at
the cost of greater code complexity.  To me is one of the cases where
simplicity and clarity matter a damn sight more than optimizing out the
reconnect on the offchance that the application knows how to handle the
situation despite not receiving even the basic knowledge that the error
was something to do with the connection, not the query.  Tom, when I said
way back when that I wanted to do recovery and retry after a connection
was lost, weren't you the one who said "this scares the hell out of me"
because you couldn't be sure whether the last command committed?

I thought the mantra when it came to networking went "don't second-guess
the OS."  If you get negative bytes out of a socket, there are a few known
errno values that mean it's a transient thing.  Fine, if you identify more
of those then chuck them in there.  There are several cases of that in
there already.  But otherwise, why not assume that the system gave you an
error code because it decided it saw a failure?


Jeroen




В списке pgsql-interfaces по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: libpq and connection failures
Следующее
От: Robert Perry
Дата:
Сообщение: By Passed Domain Constraints