You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Phil Steitz <ph...@gmail.com> on 2013/12/13 07:37:58 UTC
Re: svn commit: r1550655 - in /commons/proper/pool/trunk: doc/ src/changes/changes.xml
src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
On 12/12/13, 10:32 PM, psteitz@apache.org wrote:
> Author: psteitz
> Date: Fri Dec 13 06:32:42 2013
> New Revision: 1550655
>
> URL: http://svn.apache.org/r1550655
> Log:
> Added missing create counter decrement in GenericKeyedObjectPool create method on factory
> exception path. Prior to this fix, exceptions thrown by factory makeObject calls could leak
> per key capacity.
>
> JIRA: POOL-243
> Thanks to: Michal Sabo
>
>
> Added:
> commons/proper/pool/trunk/doc/
Sorry. Did not mean to add this directory just yet. Will add the
files (code examples) in subsequent commit.
> Modified:
> commons/proper/pool/trunk/src/changes/changes.xml
> commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
> commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
>
> Modified: commons/proper/pool/trunk/src/changes/changes.xml
> URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/changes/changes.xml?rev=1550655&r1=1550654&r2=1550655&view=diff
> ==============================================================================
> --- commons/proper/pool/trunk/src/changes/changes.xml (original)
> +++ commons/proper/pool/trunk/src/changes/changes.xml Fri Dec 13 06:32:42 2013
> @@ -46,6 +46,11 @@ The <action> type attribute can be add,u
> <release version="2.1" date="TBD" description=
> "This is a maintenance release that includes a small number of new
> features as well as including bugfixes and test case improvements.">
> + <action issue="POOL-243" dev="psteitz" type="fix" duu-to="Michal Sabo">
> + Added missing create counter decrement in GenericKeyedObjectPool create method on factory
> + exception path. Prior to this fix, exceptions thrown by factory makeObject calls could leak
> + per key capacity.
> + </action>
> <action issue="POOL-240" dev="psteitz" type="fix" due-to="Dan McNulty">
> Ensured that blocked threads waiting on a depleted pool get served when
> objects are destroyed due to validation or passivation failures in
>
> Modified: commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
> URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java?rev=1550655&r1=1550654&r2=1550655&view=diff
> ==============================================================================
> --- commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java (original)
> +++ commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java Fri Dec 13 06:32:42 2013
> @@ -1007,6 +1007,7 @@ public class GenericKeyedObjectPool<K,T>
> p = factory.makeObject(key);
> } catch (Exception e) {
> numTotal.decrementAndGet();
> + objectDeque.getCreateCount().decrementAndGet();
> throw e;
> }
>
>
> Modified: commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
> URL: http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java?rev=1550655&r1=1550654&r2=1550655&view=diff
> ==============================================================================
> --- commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java (original)
> +++ commons/proper/pool/trunk/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java Fri Dec 13 06:32:42 2013
> @@ -1635,7 +1635,10 @@ public class TestGenericKeyedObjectPool
> this.valid = valid;
> }
> @Override
> - public PooledObject<String> makeObject(K key) {
> + public PooledObject<String> makeObject(K key) throws Exception {
> + if (exceptionOnCreate) {
> + throw new Exception();
> + }
> String out = null;
> synchronized(this) {
> activeCount++;
> @@ -1722,6 +1725,7 @@ public class TestGenericKeyedObjectPool
> boolean exceptionOnPassivate = false;
> boolean exceptionOnActivate = false;
> boolean exceptionOnDestroy = false;
> + boolean exceptionOnCreate = false;
>
> private void doWait(long latency) {
> try {
> @@ -1912,6 +1916,28 @@ public class TestGenericKeyedObjectPool
> String obj = pool.borrowObject("one");
> pool.returnObject("one", obj);
> }
> +
> + /**
> + * Verify that factory exceptions creating objects do not corrupt per key create count.
> + *
> + * JIRA: POOL-243
> + */
> + @Test
> + public void testMakeObjectException()
> + throws Exception {
> + SimpleFactory<String> factory = new SimpleFactory<String>();
> + GenericKeyedObjectPool<String, String> pool = new GenericKeyedObjectPool<String, String>(factory);
> + pool.setMaxTotalPerKey(1);
> + pool.setBlockWhenExhausted(false);
> + factory.exceptionOnCreate = true;
> + try {
> + pool.borrowObject("One");
> + } catch (Exception ex) {
> + // expected
> + }
> + factory.exceptionOnCreate = false;
> + pool.borrowObject("One");
> + }
>
> private static class DummyFactory
> extends BaseKeyedPooledObjectFactory<Object,Object> {
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org