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/08/07 12:06:30 UTC

[commons-pool] 03/03: Simplify: Keys and values cannot be null inside a ConcurrentHashMap.

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

commit d2d4ef8442a337e5f039731884901d350d90b359
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun Aug 7 08:06:22 2022 -0400

    Simplify: Keys and values cannot be null inside a ConcurrentHashMap.
    
    Javadoc: "Like Hashtable but unlike HashMap, this classdoes not allow null to be used as a key or value."
---
 .../commons/pool2/impl/GenericKeyedObjectPool.java | 44 ++++++++--------------
 1 file changed, 15 insertions(+), 29 deletions(-)

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 3b56daa7..aece8351 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
@@ -640,13 +640,9 @@ public class GenericKeyedObjectPool<K, T, E extends Exception> extends BaseGener
         final Map<PooledObject<T>, K> map = new TreeMap<>();
 
         poolMap.forEach((key, value) -> {
-            // Protect against possible NPE if key has been removed in another
-            // thread. Not worth locking the keys while this loop completes.
-            if (value != null) {
-                // Each item into the map using the PooledObject object as the
-                // key. It then gets sorted based on the idle time
-                value.getIdleObjects().forEach(p -> map.put(p, key));
-            }
+            // Each item into the map using the PooledObject object as the
+            // key. It then gets sorted based on the idle time
+            value.getIdleObjects().forEach(p -> map.put(p, key));
         });
 
         // Now iterate created map and kill the first 15% plus one to account
@@ -1196,11 +1192,9 @@ public class GenericKeyedObjectPool<K, T, E extends Exception> extends BaseGener
         final HashMap<String, Integer> result = new HashMap<>();
 
         poolMap.forEach((key, objectDequeue) -> {
-            if (key != null && objectDequeue != null) {
-                result.put(key.toString(), Integer.valueOf(
-                    objectDequeue.getAllObjects().size() -
-                    objectDequeue.getIdleObjects().size()));
-            }
+            result.put(key.toString(), Integer.valueOf(
+                objectDequeue.getAllObjects().size() -
+                objectDequeue.getIdleObjects().size()));
         });
         return result;
     }
@@ -1266,9 +1260,7 @@ public class GenericKeyedObjectPool<K, T, E extends Exception> extends BaseGener
         for (final Entry<K, ObjectDeque<T>> entry : poolMap.entrySet()) {
             final K k = entry.getKey();
             final ObjectDeque<T> deque = entry.getValue();
-            if (deque != null) {
-                result.put(k.toString(), getBlockWhenExhausted() ? Integer.valueOf(deque.getIdleObjects().getTakeQueueLength()) : ZERO);
-            }
+            result.put(k.toString(), getBlockWhenExhausted() ? Integer.valueOf(deque.getIdleObjects().getTakeQueueLength()) : ZERO);
         }
         return result;
     }
@@ -1289,7 +1281,7 @@ public class GenericKeyedObjectPool<K, T, E extends Exception> extends BaseGener
      *         {@code false}
      */
     private boolean hasBorrowWaiters() {
-        return getBlockWhenExhausted() && poolMap.values().stream().anyMatch(deque -> deque != null && deque.getIdleObjects().hasTakeWaiters());
+        return getBlockWhenExhausted() && poolMap.values().stream().anyMatch(deque -> deque.getIdleObjects().hasTakeWaiters());
     }
 
     /**
@@ -1360,11 +1352,7 @@ public class GenericKeyedObjectPool<K, T, E extends Exception> extends BaseGener
     public Map<String, List<DefaultPooledObjectInfo>> listAllObjects() {
         final Map<String, List<DefaultPooledObjectInfo>> result = new HashMap<>();
 
-        poolMap.forEach((k, value) -> {
-            if (value != null) {
-                result.put(k.toString(), value.getAllObjects().values().stream().map(DefaultPooledObjectInfo::new).collect(Collectors.toList()));
-            }
-        });
+        poolMap.forEach((k, v) -> result.put(k.toString(), v.getAllObjects().values().stream().map(DefaultPooledObjectInfo::new).collect(Collectors.toList())));
         return result;
     }
 
@@ -1579,14 +1567,12 @@ public class GenericKeyedObjectPool<K, T, E extends Exception> extends BaseGener
         for (final Entry<K, GenericKeyedObjectPool<K, T, E>.ObjectDeque<T>> entry : poolMap.entrySet()) {
             final K k = entry.getKey();
             final ObjectDeque<T> deque = entry.getValue();
-            if (deque != null) {
-                final LinkedBlockingDeque<PooledObject<T>> pool = deque.getIdleObjects();
-                final int queueLength = pool.getTakeQueueLength();
-                if (getNumActive(k) < maxTotalPerKeySave && queueLength > maxQueueLength) {
-                    maxQueueLength = queueLength;
-                    mostLoaded = pool;
-                    loadedKey = k;
-                }
+            final LinkedBlockingDeque<PooledObject<T>> pool = deque.getIdleObjects();
+            final int queueLength = pool.getTakeQueueLength();
+            if (getNumActive(k) < maxTotalPerKeySave && queueLength > maxQueueLength) {
+                maxQueueLength = queueLength;
+                mostLoaded = pool;
+                loadedKey = k;
             }
         }