executeQuery Locked

From: "Lucas Sousa" <lucas75(at)gmail(dot)com>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: executeQuery Locked
Date: 2006-07-11 16:29:50
Message-ID: cccdaefb0607110929w6117e9d3w6904c7fd73fe5399@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

People, I am having a very anoying problem:

I am issuing this:

boolean result = false;
Statement stm = null;
ResultSet rs = null;
try
{
stm = conn.createStatement( ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY );
stm.setQueryTimeout( timeout );
rs = stm.executeQuery( sql ); <- the proccess is stopped here
for more than half an hour
result = rs.next();
}
finally
{
DbUtils.closeQuietly( rs );
DbUtils.closeQuietly( stm );
}
return result;

sql is a simple select that returns one row (if I take it and send to pgsql
it works fine)
timeout = 120 (seconds) / I am using a DBCP pool / I use one or more
connection per thread (I get it inside the method and release inside the
method)

If I get my debbuger and interrupt the thread I see it stopped in some point
of execution of stm.executeQuery (it seems to be waitng a response from the
postgres server) but at the same time I go to the server and does not find
the query itself runnning.

It seems to me that for some (weird) reason, the query timeout is bein
achieved without throwing any error or the postgresql driver detecting that.

This is some know issue?
It is possible that the backend is cancelling the connection by timeout and
the driver does not notice and continues waiting for it?

the driver I am using is postgresql-8.2dev-503.jdbc3.jar (and it happens the
same thing with the 8.0 driver)

and the stack trace of one of such locked proccess:

Thread [zzzzzzz:12] (Suspended)
SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int)
line: not available [native method]
SocketInputStream.read(byte[], int, int) line: not available
BufferedInputStream.fill() line: not available
BufferedInputStream.read() line: not available
PGStream.ReceiveChar() line: 256
QueryExecutorImpl.processResults(ResultHandler, int) line: 1164
QueryExecutorImpl.execute(Query, ParameterList, ResultHandler, int, int,
int) line: 190
Jdbc3Statement(AbstractJdbc2Statement).execute(Query, ParameterList,
int) line: 452
Jdbc3Statement(AbstractJdbc2Statement).executeWithFlags(String, int)
line: 340
Jdbc3Statement(AbstractJdbc2Statement).executeQuery(String) line: 239
DelegatingStatement.executeQuery(String) line: 205
xxxx() line: 580 <- this is the line in the code I sent.
xxxx(int) line: 504
xxxx(int) line: 523
xxxx() line: 156
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not
available
Method.invoke(Object, Object...) line: not available
ScheduleTaskRunner.run() line: 139
Thread.run() line: not available

Has anyone seen this kind of situation before?

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Mark Lewis 2006-07-11 17:07:43 Re: executeQuery Locked
Previous Message Marc Herbert 2006-07-11 12:14:58 Re: Limit vs setMaxRows issue