commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Phil Steitz (JIRA)" <>
Subject [jira] Commented: (POOL-123) borrowObject from the GenericObjectPool hangs on a wait() method when the WHEN_EXHAUSTED_BLOCK is set
Date Sun, 03 Feb 2008 16:44:08 GMT


Phil Steitz commented on POOL-123:

What version of DBCP are you running? 

 IIUC, this is really an enhancement request for AbandonedObjectPool, which is a (deprecated)
DBCP class.

Pool handles the notification correctly, but again assuming I understand the use case correctly,
AbandonedObjectPool's removeAbandoned method will not get called unless and until another
thread arrives to invoke borrowObject.  This is a corner case for AbandonedObjectPool, which
I think is best handled by the client by setting maxWait.  

> borrowObject from the GenericObjectPool hangs on a wait() method when the WHEN_EXHAUSTED_BLOCK
is set
> -----------------------------------------------------------------------------------------------------
>                 Key: POOL-123
>                 URL:
>             Project: Commons Pool
>          Issue Type: Bug
>    Affects Versions: 1.4
>         Environment: Windows XP, eclipse. JDK 1.6
>            Reporter: Meir Shahar
>            Priority: Minor
> This bug is related to bugs #1, #38 & #102. Thought the bugs are closed, I think
there is a (edge condition) scenario that is not handled properly:
> Config:
> 10 active connections limit
> RemoveAbandoned set to 'on'
> RemoveAbandonedTimeout set to x (say 60 secs)
> Suppose 10 connections were borrowed and the 11 th request was issued, all within a time
frame shorted then the timeout.
> The first 10 requests are in methods that do not properly release the connection.
> This means that the 11 th thread is waiting indefinitely until a notify is sent.
> The 'non releasing' threads the first 10 connections hence no notification is sent
> The 'garbage collection' is performed by the calling AbandonedObjectPool before calling
the GenericObjectPool.borrowObject(...). This garbage collection will not be called again
and the wait() will stay locked though some connections might be come available through timeout
> The quick n dirty workaround is to setMaxWait(...) but still I think a better solution
will be along the lines of:
> 1. Waiting for removeAbandonedTimeout secs
> 2. Retry regular allocation

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message