On 12/12/13, 10:32 PM, pste...@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-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to