Line 150 of org.apache.tomcat.jdbc.pool.FairBlockingQueue can throw
InterruptedException, which should be handled by:
catch (InterruptedException e) {
lock.lock();
waiters.remove(c); // prevent future threads from offering to this
thread, since we are about to die
lock.unlock();
if (c.getCount() == 0) { // was given a connection between
// when the exception was thrown we acquired
// the lock. This seems unlikely, so we are
// happy to have let go of the
lock and re-acquire
// if necessary
lock.lock();
items.addFirst(c.getItem()); // return to the head of the
queue, as per policy in offer()
lock.unlock();
}
}
You're welcome.
cf
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/FairBlockingQueue.java?revision=1432842&view=markup
public E poll(long timeout, TimeUnit unit) throws InterruptedException {
135 E result = null;
136 final ReentrantLock lock = this.lock;
137 try {
138 //acquire the global lock until we know what to do
139 lock.lock();
140 //check to see if we have objects
141 result = items.poll();
142 if (result==null && timeout>0) {
143 //the queue is empty we will wait for an object
144 ExchangeCountDownLatch<E> c = new
ExchangeCountDownLatch<>(1);
145 //add to the bottom of the wait list
146 waiters.addLast(c);
147 //unlock the global lock
148 lock.unlock();
149 //wait for the specified timeout
150 if (!c.await(timeout, unit)) {
151 //if we timed out, remove ourselves from the waitlist
152 lock.lock();
153 waiters.remove(c);
154 lock.unlock();
155 }
156 //return the item we received, can be null if we timed out
157 result = c.getItem();
158 } else {
159 //we have an object, release
160 lock.unlock();
161 }
162 } finally {
163 if (lock.isHeldByCurrentThread()) {
164 lock.unlock();
165 }
166 }
167 return result;
168 }
David Bullock
Machaira Enterprises Pty Ltd
PO Box 31
Canowindra NSW 2804
02 6344 1100
http://machaira.com.au/
On 21 November 2013 04:58, Christopher Schultz
<[email protected]> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> Marko,
>
> On 11/20/13, 12:07 PM, marko lugarič wrote:
>> I have repeated the test with logAbandoned set to "true" and left
>> it half hour after pool is empty. There are a lot of exceptions
>> (Pool empty. Unable to fetch a connection in 15 seconds and Pool
>> wait interrupted) but i don't know what exactly to search (search
>> with Abandoned did not produce anything). I have already tried
>> using StatementFinalizer interceptor but it did not do anything to
>> prevent pool from being empty.
>
> Can you work-up a simple testcase webapp and load test to reproduce
> this problem? If so, please file a bug against tomcat-pool in Bugzilla
> and attach the simple webapp and test harness.
>
> - -chris
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.15 (Darwin)
> Comment: GPGTools - http://gpgtools.org
> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
>
> iQIcBAEBCAAGBQJSjPhBAAoJEBzwKT+lPKRYQxIQAMHi+9z9jCbzulHiXns/Mt3p
> J6w6K6nFCbDOgj7noYfwGf2eBINPQ77ywhF56pzBgn6v2wXWG21NRXTLfHxJJM/s
> i1Ol9qp9mEUz3gmcumHbXU+RBBn1CbSh6D8cdVZDsX6tGF4BuzNtseZ0PRq7ZI5A
> fi6dyPA5sZf1skfHIOBhmWT7VB7UGud03YmxnKhe3e7N2ZtDN2AJYNhU0haSHd1m
> 1DGlCYxmMlK5mbqRA3RGWFTrnDmEvhBnSTLJaLywAojN8XHnNAH4fx4+MCT5GXrV
> h1EL1PhvFnpbQ5haTOHNIwCNtW3OPwdLsXXVimOVF6UvEZepF3pDJUL0KVV+Kfem
> p+r5BjkcjZ7LYirDBPFCsIovSwFcLrLScPUKbDHhF0Re5E7K7EtXuVuGGCJqWRsf
> 8w8Z2pcyBIhX85+D+kBZ2m6MFODXnEqTQeGbFhzffuPXV/DuvipARpFg9s8uo1ws
> 85NEtFzHjNblgxVxFaEgbbWulKT1ZNZerAMRnGDh9W2ngMjwYuQfevbJghUkM5b4
> nMc/aNU2mg10lneRwTUIJ0f/aGfiCQegjSSEYGIDi1LcDHDkI4GPmMz3gGIfItBs
> yBEWXKn8aqVqVEVKjFzq5tD0kw9zyCEErYJH6N7o0HYmHHYfPxgz5Cr8gnnayUac
> Ru2Z7Ur1lnZZnC72oUwz
> =bJFf
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]