Hi Florin:

     So glad to hear derby user is using 10.6.2.1. I suspect there might be something more complicated than Statement.QueryTimeout was not working. Is it possible for you to reproduce a smaller test case to allow people to further investigate the case?

 

     Like Kristian pointed out, Statement.QueryTimeout should take effect. I attach a repro that is using Statement.QueryTimeout. I tested against 10.6.2.1 release and it is working for me.

 

 

Best Regards,

Lily



From: "Florin.Herinean@sungard.com" <Florin.Herinean@sungard.com>
To: derby-user@db.apache.org
Sent: Wed, October 20, 2010 8:38:11 AM
Subject: AW: does Derby honor the statement.setQueryTimeout(int) ?

Hi Kristian,

Changing of the global timeout is not an option, since I need to have most of the statements behave normally (to wait as long as neccessary to succeed) and just a few statements with a "fail fast" behavior.

The concrete problem: I have a kind of a timer that fires events at regular intervals (5 sec) and I have to perform some actions. It might be possible under certain circumstances that the performing of the actions take (much) longer than the fixed rate of the timer, so that the next events are fired before the long running one is finished. However, if the actions are involving the same sets of rows, I want that the overlapping ones to fail fast and roll back the transaction.

Now because Derby is waiting indefinitely, this scenario (events are comming via jms messages) will lead to the consumming of all available database connections, since for each jms message a new thread/transaction is created and implicitely a new connection.

Regards,

Florin

-----Ursprüngliche Nachricht-----
Von: Kristian Waagan [mailto:kristian.waagan@oracle.com]
Gesendet: Mittwoch, 20. Oktober 2010 17:24
An: derby-user@db.apache.org
Betreff: Re: does Derby honor the statement.setQueryTimeout(int) ?


  On 20.10.10 17:16, Florin.Herinean@sungard.com wrote:
>
> Hi everybody,
>
> I'm using Derby latest 10.6.2.1 and I'm having a problem with
> statement.setQueryTimeout(int).
>
> Namely I want to set a small value for the timeout (5 seconds) so that
> the statement (an update statement) will fail (relatively) fast if
> some other transaction is holding a write lock on the same row.
>
> The problem is that setQueryTimeout seems to be ignored, and the
> update is waiting until the global timeout - 60+ seconds.
>
> Is that a known problem with Derby ? Or am I doing something wrong ?
>

Hi Florian,

I'm not sure, but if Derby is waiting for a lock, it may not honor the query timeout.
If the statement is doing "normal processing", the query timeout should take effect. If your application code is set up correctly for retrying, is it an option to lower the lock timeout as well?


Regards,
--
Kristian

> Best Regards,
>
> Florin Herinean
>