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 2021/06/28 14:16:42 UTC

[commons-pool] branch master updated: Add and use AbandonedConfig.copy(AbandonedConfig) to fix CPD code duplication issues in GenericKeyedObjectPool and GenericObjectPool.

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 38a8341  Add and use AbandonedConfig.copy(AbandonedConfig) to fix CPD code duplication issues in GenericKeyedObjectPool and GenericObjectPool.
38a8341 is described below

commit 38a83412b960d128e1795db449f0dc29c70e3644
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Mon Jun 28 10:16:38 2021 -0400

    Add and use AbandonedConfig.copy(AbandonedConfig) to fix CPD code
    duplication issues in GenericKeyedObjectPool and GenericObjectPool.
    
    Also use lambdas.
---
 src/changes/changes.xml                            |  3 ++
 .../apache/commons/pool2/impl/AbandonedConfig.java | 34 ++++++++++++++++++++++
 .../commons/pool2/impl/GenericKeyedObjectPool.java | 24 ++++-----------
 .../commons/pool2/impl/GenericObjectPool.java      | 14 +--------
 4 files changed, 43 insertions(+), 32 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 4d98e39..5e4335e 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -72,6 +72,9 @@ The <action> type attribute can be add,update,fix,remove.
     <action issue="POOL-395" dev="ggregory" type="add" due-to="Gary Gregory, Arash Nikoo">
       Improve exception thrown in GenericObjectPool.borrowObject when pool is exhausted. Added BaseGenericObjectPool.setMessagesStatistics(boolean).
     </action>
+    <action issue="POOL-395" dev="ggregory" type="add" due-to="Gary Gregory, Arash Nikoo">
+      Add and use AbandonedConfig.copy(AbandonedConfig) to fix CPD code duplication issues in GenericKeyedObjectPool and GenericObjectPool.
+    </action>
     <!-- FIXES -->
     <action dev="ggregory" type="fix" due-to="Gary Gregory">
       Fix "[WARNING] Old version of checkstyle detected. Consider updating to >= v8.30." Update Checktyle to 8.44.
diff --git a/src/main/java/org/apache/commons/pool2/impl/AbandonedConfig.java b/src/main/java/org/apache/commons/pool2/impl/AbandonedConfig.java
index 6187189..31e1250 100644
--- a/src/main/java/org/apache/commons/pool2/impl/AbandonedConfig.java
+++ b/src/main/java/org/apache/commons/pool2/impl/AbandonedConfig.java
@@ -35,6 +35,17 @@ public class AbandonedConfig {
     private static final Duration DEFAULT_REMOVE_ABANDONED_TIMEOUT = Duration.ofSeconds(300);
 
     /**
+     * Creates a new instance with values from the given instance.
+     *
+     * @param abandonedConfig the source, may be null.
+     * @return A new instance or null if the input is null.
+     * @since 2.11.0
+     */
+    public static AbandonedConfig copy(final AbandonedConfig abandonedConfig) {
+        return abandonedConfig == null ? null : new AbandonedConfig(abandonedConfig);
+    }
+    
+    /**
      * Whether or not borrowObject performs abandoned object removal.
      */
     private boolean removeAbandonedOnBorrow;
@@ -79,6 +90,29 @@ public class AbandonedConfig {
     private boolean useUsageTracking = false;
 
     /**
+     * Creates a new instance.
+     */
+    public AbandonedConfig() {
+        // empty
+    }
+
+    /**
+     * Creates a new instance with values from the given instance.
+     *
+     * @param abandonedConfig the source.
+     */
+    @SuppressWarnings("resource")
+    private AbandonedConfig(AbandonedConfig abandonedConfig) {
+        this.setLogAbandoned(abandonedConfig.getLogAbandoned());
+        this.setLogWriter(abandonedConfig.getLogWriter());
+        this.setRemoveAbandonedOnBorrow(abandonedConfig.getRemoveAbandonedOnBorrow());
+        this.setRemoveAbandonedOnMaintenance(abandonedConfig.getRemoveAbandonedOnMaintenance());
+        this.setRemoveAbandonedTimeout(abandonedConfig.getRemoveAbandonedTimeoutDuration());
+        this.setUseUsageTracking(abandonedConfig.getUseUsageTracking());
+        this.setRequireFullStackTrace(abandonedConfig.getRequireFullStackTrace());
+    }
+
+    /**
      * Flag to log stack traces for application code which abandoned
      * an object.
      *
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 7dd3157..7d68cac 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
@@ -1191,12 +1191,10 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
     }
 
     @Override
-    public Map<String,Integer> getNumActivePerKey() {
-        final HashMap<String,Integer> result = new HashMap<>();
+    public Map<String, Integer> getNumActivePerKey() {
+        final HashMap<String, Integer> result = new HashMap<>();
 
-        final Iterator<Entry<K,ObjectDeque<T>>> iter = poolMap.entrySet().iterator();
-        while (iter.hasNext()) {
-            final Entry<K,ObjectDeque<T>> entry = iter.next();
+        poolMap.entrySet().forEach(entry -> {
             if (entry != null) {
                 final K key = entry.getKey();
                 final ObjectDeque<T> objectDequeue = entry.getValue();
@@ -1206,7 +1204,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
                             objectDequeue.getIdleObjects().size()));
                 }
             }
-        }
+        });
         return result;
     }
 
@@ -1732,20 +1730,8 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
      * @see AbandonedConfig
      * @since 2.10.0
      */
-    @SuppressWarnings("resource") // PrintWriter is managed elsewhere
     public void setAbandonedConfig(final AbandonedConfig abandonedConfig) {
-        if (abandonedConfig == null) {
-            this.abandonedConfig = null;
-        } else {
-            this.abandonedConfig = new AbandonedConfig();
-            this.abandonedConfig.setLogAbandoned(abandonedConfig.getLogAbandoned());
-            this.abandonedConfig.setLogWriter(abandonedConfig.getLogWriter());
-            this.abandonedConfig.setRemoveAbandonedOnBorrow(abandonedConfig.getRemoveAbandonedOnBorrow());
-            this.abandonedConfig.setRemoveAbandonedOnMaintenance(abandonedConfig.getRemoveAbandonedOnMaintenance());
-            this.abandonedConfig.setRemoveAbandonedTimeout(abandonedConfig.getRemoveAbandonedTimeoutDuration());
-            this.abandonedConfig.setUseUsageTracking(abandonedConfig.getUseUsageTracking());
-            this.abandonedConfig.setRequireFullStackTrace(abandonedConfig.getRequireFullStackTrace());
-        }
+        this.abandonedConfig = AbandonedConfig.copy(abandonedConfig);
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
index 93cef67..7ab55c2 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
@@ -1217,20 +1217,8 @@ public class GenericObjectPool<T> extends BaseGenericObjectPool<T>
      *
      * @see AbandonedConfig
      */
-    @SuppressWarnings("resource") // PrintWriter is managed elsewhere
     public void setAbandonedConfig(final AbandonedConfig abandonedConfig) {
-        if (abandonedConfig == null) {
-            this.abandonedConfig = null;
-        } else {
-            this.abandonedConfig = new AbandonedConfig();
-            this.abandonedConfig.setLogAbandoned(abandonedConfig.getLogAbandoned());
-            this.abandonedConfig.setLogWriter(abandonedConfig.getLogWriter());
-            this.abandonedConfig.setRemoveAbandonedOnBorrow(abandonedConfig.getRemoveAbandonedOnBorrow());
-            this.abandonedConfig.setRemoveAbandonedOnMaintenance(abandonedConfig.getRemoveAbandonedOnMaintenance());
-            this.abandonedConfig.setRemoveAbandonedTimeout(abandonedConfig.getRemoveAbandonedTimeoutDuration());
-            this.abandonedConfig.setUseUsageTracking(abandonedConfig.getUseUsageTracking());
-            this.abandonedConfig.setRequireFullStackTrace(abandonedConfig.getRequireFullStackTrace());
-        }
+        this.abandonedConfig = AbandonedConfig.copy(abandonedConfig);
     }
 
     /**