Skip site navigation (1) Skip section navigation (2)

Re: ERROR: canceling query due to user request

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Kevin Grittner" <Kevin(dot)Grittner(at)wicourts(dot)gov>
Cc: pgsql-admin(at)postgresql(dot)org, pgsql-jdbc(at)postgresql(dot)org
Subject: Re: ERROR: canceling query due to user request
Date: 2005-09-13 22:18:40
Message-ID: 27126.1126649920@sss.pgh.pa.us (view raw or flat)
Thread:
Lists: pgsql-adminpgsql-jdbc
"Kevin Grittner" <Kevin(dot)Grittner(at)wicourts(dot)gov> writes:
> The SELECT statement was easy to find, and it became clear that a
> programmer had code which was incorrectly canceling a JDBC
> Statement after reaching the end of the (empty) ResultSet.  One
> time out of 1,799 this was causing the error we were seeing on
> the subsequent commit, which strikes me as a bug.
 
> We've already changed the offending code to avoid the invocation
> of the Statement.cancel method.  Not that it merits high priority, but
> it might make sense for PostgreSQL to behave more consistently on
> a commit when a statement within the database transaction has been
> canceled.  There currently is a race condition where if the commit
> comes fast enough after the Statement.cancel, it receives the error
> which is the subject of this thread.

Yeah.  The Query Cancel protocol has a potential race condition in it:
the cancel request is not synchronous with respect to your existing
connection (it's actually sent over a different connection).  If you try
to send another command immediately, it's possible that the new command
gets to the backend before the cancel signal does, and then the cancel
zaps your new command instead of the one you intended.

This has been discussed before (try the pgsql-jdbc list archives).
I believe we concluded that an appropriate fix was to not consider the
cancel request "done" until the client sees the separate connection
dropped by the postmaster.  libpq's cancel functions wait for that to
happen, and I thought that JDBC had been fixed as well --- maybe you are
using an old driver version?

Of course, if the internal threading in your app is such that you might
issue another command before the Statement.cancel method finishes, then
it's your own bug.

			regards, tom lane

In response to

Responses

pgsql-admin by date

Next:From: DavidDate: 2005-09-13 22:42:30
Subject: Re: plperl again but different problem
Previous:From: Ezra TaylorDate: 2005-09-13 21:25:48
Subject: Re: How to improve Postgres performance

pgsql-jdbc by date

Next:From: Kris JurkaDate: 2005-09-13 22:21:35
Subject: Re: Getting vacuum results
Previous:From: Kevin GrittnerDate: 2005-09-13 20:33:59
Subject: Re: java.sql.SQLException: ERROR: canceling query due

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group