You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/04/15 14:47:28 UTC

[commons-pool] branch master updated: Add KeyedObjectPool.getKeys()

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-pool.git


The following commit(s) were added to refs/heads/master by this push:
     new ccd36019 Add KeyedObjectPool.getKeys()
ccd36019 is described below

commit ccd36019f3a87b38405a8ba3ddcacfac855bdb7b
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Apr 15 10:47:22 2022 -0400

    Add KeyedObjectPool.getKeys()
---
 src/changes/changes.xml                            |  3 +++
 .../org/apache/commons/pool2/KeyedObjectPool.java  | 12 +++++++++++
 .../java/org/apache/commons/pool2/PoolUtils.java   | 25 +++++++++++++++++++++-
 .../commons/pool2/impl/GenericKeyedObjectPool.java |  1 +
 .../pool2/proxy/ProxiedKeyedObjectPool.java        |  6 ++++++
 .../org/apache/commons/pool2/TestPoolUtils.java    | 11 +++++-----
 6 files changed, 52 insertions(+), 6 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d40ccf13..84c1577e 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -64,6 +64,9 @@ The <action> type attribute can be add,update,fix,remove.
     <action dev="ggregory" type="add" due-to="Vamsi Pavan Kumar Sanka, Phil Steitz, Gary Gregory">
       Add GenericKeyedObjectPool.getKeys().
     </action>
+    <action dev="ggregory" type="add" due-to="Gary Gregory">
+      Add KeyedObjectPool.getKeys().
+    </action>
     <!-- UPDATE -->
     <action dev="ggregory" type="update" due-to="Dependabot">
       Bump actions/checkout from 2.3.4 to 3 #109, #112, #134.
diff --git a/src/main/java/org/apache/commons/pool2/KeyedObjectPool.java b/src/main/java/org/apache/commons/pool2/KeyedObjectPool.java
index 3996bfbf..7b0960c0 100644
--- a/src/main/java/org/apache/commons/pool2/KeyedObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/KeyedObjectPool.java
@@ -18,6 +18,8 @@ package org.apache.commons.pool2;
 
 import java.io.Closeable;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import java.util.NoSuchElementException;
 
 /**
@@ -210,6 +212,16 @@ public interface KeyedObjectPool<K, V> extends Closeable {
     @Override
     void close();
 
+    /**
+     * Gets a copy of the pool key list.
+     *
+     * @return a copy of the pool key list.
+     * @since 2.12.0
+     */
+    default List<K> getKeys() {
+        return Collections.emptyList();
+    }
+
     /**
      * Gets the total number of instances currently borrowed from this pool but
      * not yet returned. Returns a negative value if this information is not
diff --git a/src/main/java/org/apache/commons/pool2/PoolUtils.java b/src/main/java/org/apache/commons/pool2/PoolUtils.java
index ffbd89c3..023b040c 100644
--- a/src/main/java/org/apache/commons/pool2/PoolUtils.java
+++ b/src/main/java/org/apache/commons/pool2/PoolUtils.java
@@ -19,6 +19,7 @@ package org.apache.commons.pool2;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Timer;
@@ -223,6 +224,14 @@ public final class PoolUtils {
             return keyedPool;
         }
 
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public List<K> getKeys() {
+            return keyedPool.getKeys();
+        }
+
         /**
          * {@inheritDoc}
          */
@@ -681,7 +690,7 @@ public final class PoolUtils {
      * @param <K> object pool key type
      * @param <V> object pool value type
      */
-    private static final class SynchronizedKeyedObjectPool<K, V> implements
+    static final class SynchronizedKeyedObjectPool<K, V> implements
             KeyedObjectPool<K, V> {
 
         /**
@@ -785,6 +794,20 @@ public final class PoolUtils {
             }
         }
 
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public List<K> getKeys() {
+            final ReadLock readLock = readWriteLock.readLock();
+            readLock.lock();
+            try {
+                return keyedPool.getKeys();
+            } finally {
+                readLock.unlock();
+            }
+        }
+
         /**
          * {@inheritDoc}
          */
diff --git a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
index e5d17b50..02c68eaa 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
@@ -1112,6 +1112,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
      * @return a copy of the pool key list.
      * @since 2.12.0
      */
+    @Override
     @SuppressWarnings("unchecked")
     public List<K> getKeys() {
         return (List<K>) poolKeyList.clone();
diff --git a/src/main/java/org/apache/commons/pool2/proxy/ProxiedKeyedObjectPool.java b/src/main/java/org/apache/commons/pool2/proxy/ProxiedKeyedObjectPool.java
index c9877f7b..96f8ad86 100644
--- a/src/main/java/org/apache/commons/pool2/proxy/ProxiedKeyedObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/proxy/ProxiedKeyedObjectPool.java
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.pool2.proxy;
 
+import java.util.List;
 import java.util.NoSuchElementException;
 
 import org.apache.commons.pool2.KeyedObjectPool;
@@ -83,6 +84,11 @@ public class ProxiedKeyedObjectPool<K, V> implements KeyedObjectPool<K, V> {
         pool.close();
     }
 
+    @Override
+    public List<K> getKeys() {
+        return pool.getKeys();
+    }
+
     @Override
     public int getNumActive() {
         return pool.getNumActive();
diff --git a/src/test/java/org/apache/commons/pool2/TestPoolUtils.java b/src/test/java/org/apache/commons/pool2/TestPoolUtils.java
index de0efb2d..ceace74e 100644
--- a/src/test/java/org/apache/commons/pool2/TestPoolUtils.java
+++ b/src/test/java/org/apache/commons/pool2/TestPoolUtils.java
@@ -100,12 +100,13 @@ public class TestPoolUtils {
         return createProxy(clazz, new MethodCallLogger(logger));
     }
 
-    private static List<String> invokeEveryMethod(final KeyedObjectPool<Object,Object> kop) throws Exception {
+    private static List<String> invokeEveryMethod(final KeyedObjectPool<Object, Object> kop) throws Exception {
         kop.addObject(null);
         kop.borrowObject(null);
         kop.clear();
         kop.clear(null);
         kop.close();
+        kop.getKeys();
         kop.getNumActive();
         kop.getNumActive(null);
         kop.getNumIdle();
@@ -114,8 +115,8 @@ public class TestPoolUtils {
         kop.returnObject(null, new Object());
         kop.toString();
 
-        return Arrays.asList("addObject", "borrowObject", "clear", "clear", "close", "getNumActive", "getNumActive",
-                "getNumIdle", "getNumIdle", "invalidateObject", "returnObject", "toString");
+        return Arrays.asList("addObject", "borrowObject", "clear", "clear", "close", "getKeys", "getNumActive", "getNumActive", "getNumIdle", "getNumIdle",
+                "invalidateObject", "returnObject", "toString");
     }
 
     private static <K, V> List<String> invokeEveryMethod(final KeyedPooledObjectFactory<K, V> kpof) throws Exception {
@@ -748,8 +749,8 @@ public class TestPoolUtils {
 
         final List<String> calledMethods = new ArrayList<>();
         try (@SuppressWarnings("unchecked")
-        final KeyedObjectPool<Object, Object> kop = createProxy(KeyedObjectPool.class, calledMethods);
-                final KeyedObjectPool<Object, Object> skop = PoolUtils.synchronizedPool(kop)) {
+            final KeyedObjectPool<Object, Object> kop = createProxy(KeyedObjectPool.class, calledMethods);
+            final KeyedObjectPool<Object, Object> skop = PoolUtils.synchronizedPool(kop)) {
             final List<String> expectedMethods = invokeEveryMethod(skop);
             assertEquals(expectedMethods, calledMethods);
         }