commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Phil Steitz (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (POOL-340) borrowObject is stuck, if create fails
Date Mon, 30 Apr 2018 21:58:00 GMT

    [ https://issues.apache.org/jira/browse/POOL-340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16459125#comment-16459125
] 

Phil Steitz edited comment on POOL-340 at 4/30/18 9:57 PM:
-----------------------------------------------------------

Another workaround-ish idea is to achieve the effect of propagation of the swallowed exception
on returnObject by configuring a SwallowedExceptionListener.  See BaseGenericObjectPool#setSwallowedExceptionListener.

Two more notes on this:
 # If threads are waiting on borrow requests and there are no idle instances available and
a return fails validation, the current code does try to create a new instance to "replace"
the one failing validation.  If that create fails with an exception, the failure can be picked
up with a SwallowedExceptionListener.
 # Another workaround if you are OK with the slight additional overhead would be to set timeBetweenEvictionRunsMillis
to a positive number (so the maintenance thread runs) and set minIdle to 1.  Then each timeBetweenEvictionRunsMillis
ms, the maintenance thread will run and it will try to create an instance if there are none
idle (regardless of whether or not there are take waiters).


was (Author: psteitz):
Another workaround-ish idea is to achieve the effect of propagation of the swallowed exception
on returnObject by configuring a SwallowedExceptionListener.  See BaseGenericObjectPool#setSwallowedExceptionListener.

One more note on this.  If threads are waiting on borrow requests and there are no idle instances
available and a return fails validation, the current code does try to create a new instance
to "replace" the one failing validation.  If that create fails with an exception, the failure
can be picked up with a SwallowedExceptionListener.

> borrowObject is stuck, if create fails
> --------------------------------------
>
>                 Key: POOL-340
>                 URL: https://issues.apache.org/jira/browse/POOL-340
>             Project: Commons Pool
>          Issue Type: Bug
>    Affects Versions: 2.4, 2.4.1, 2.4.2, 2.4.3, 2.5.0
>            Reporter: Pavel Kolesov
>            Priority: Critical
>
> After changes in 2.4.3 there is a high chance of a scenario, in which borrowObject waits
infinitely, if create fails or no one calls a create.
> {noformat}
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         - parking to wait for  <0x0000000083cfd978> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
>         at org.apache.commons.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:583)
>         at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:442)
>         at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
> {noformat}
> If pool is exhausted, when borrowObject tries to get idle object, it waits for new object
to be created.
> If all objects are returned to pool invalid and destroyed, and it is impossible to create
a new one, borrowObject will not return.
> Even if afterwards it is becomes possible to crate a new object but no one creates it,
borrowObject will not return either.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message