Re: Backend message type 0x50 arrived while idle - Mailing list pgsql-general

From Wynn, Robin
Subject Re: Backend message type 0x50 arrived while idle
Date
Msg-id 99407664A0A7D511AD9900508BB0FB0301D1B33B@XCGVA030
Whole thread Raw
In response to Backend message type 0x50 arrived while idle  ("Wynn, Robin" <RWynn@northropgrumman.com>)
List pgsql-general
There are no other messages that I can see... that doesn't mean there aren't
any, of course, just that the legacy code I've inherited doesn't process
them.  I actually suspect that I have a handle on what's going on... what I
think it boils down to is that there are two threads (there are more, but
these two are what I think are causing the problem).  One periodically
updates an element called pct_complete in a table called JTRANSACTION, the
other periodically does a select from that same table to get the current
value of pct_complete.  Both have the same connection ID.  Randomly, we hit
(what I suspect is) a race condition where both things are happening at the
same time, and the one performing the SELECT hangs.  That happens to be the
parent thread, for what that's worth.  At any rate, it always seems to be
the case (at least, so far) that when the backend message comes through, the
parent thread is hung.  So, I'm going to dig around some more and see what's
been recommended for avoiding this condition... I'll also try making a new
connection with one of the threads (thus, a different backend, from what I
understand) and see if that avoids this problem.  Any other suggestions?
Could this theoretically happen with an INSERT/SELECT combination, or is it
unique to the UPDATE/SELECT pairing?

Robin

-----Original Message-----
From: scott.marlowe [mailto:scott.marlowe@ihs.com]
Sent: Tuesday, December 03, 2002 5:04 PM
To: Wynn, Robin
Cc: pgsql-general@postgresql.org
Subject: Re: [GENERAL] Backend message type 0x50 arrived while idle


On Tue, 3 Dec 2002, Wynn, Robin wrote:

> I know... the problem is two-fold.  One, I had to have that in writing so
I
> could justify upgrading, and two, we release in a few days and can't
really
> change the database until that's complete (requires too many changes to
> existing things).  I was just hoping someone here would know what that
> message meant so I could either document it, or prove it's not the
database
> that's got a problem, it's our interaction with it.  I've seen a number of
> people ask this question on a number of different versions of PostgreSQL
(I
> believe the latest I've seen is 7.1.x), so I suspect that it's something
> we're doing... I just need to know what that message means, so I know how
to
> troubleshoot it on our end.  It's not incredibly descriptive :^P
>

OK, I was just wandering around the source code, and this same error can
happen in 6.5.x or 7.3.whatever.

The docs inside the source of
postgresql-7.3/src/interfaces/libpq/fe-exec.c say:

/*
* NOTIFY and WARNING messages can happen in any state besides
* COPY OUT; always process them right away.
*
* Most other messages should only be processed while in BUSY state.
* (In particular, in READY state we hold off further parsing
* until the application collects the current PGresult.)
*
* However, if the state is IDLE then we got trouble; we need to deal
* with the unexpected message somehow.
*/


And:

/*
* Unexpected message in IDLE state; need to recover somehow.
* ERROR messages are displayed using the notice processor;
* anything else is just dropped on the floor after displaying
* a suitable warning notice.  (An ERROR is very possibly the
* backend telling us why it is about to close the connection,
* so we don't want to just discard it...)
*/

So, are there any other messages to go with this error?

Are you using libpq to interface?  It sounds like maybe your client app is
sending data when it shouldn't.

pgsql-general by date:

Previous
From: Oliver Elphick
Date:
Subject: Re: problem startting postgresql
Next
From: Diogo Biazus
Date:
Subject: mod_auth_pgsql