You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2018/12/11 08:37:12 UTC

[incubator-plc4x] 01/01: [OPM, POOL] Added better defaults for Scrapers PlcPooledDriverManager.

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

jfeinauer pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit a67f31160276782f8081563287948cfbf2ae2d6e
Author: Julian Feinauer <j....@pragmaticminds.de>
AuthorDate: Tue Dec 11 09:36:15 2018 +0100

    [OPM,POOL] Added better defaults for Scrapers PlcPooledDriverManager.
---
 .../java/utils/connectionpool/PoolKeyFactory.java    |  1 +
 .../java/org/apache/plc4x/java/scraper/Scraper.java  | 20 +++++++++++++++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/plc4j/utils/connection-pool/src/main/java/org/apache/plc4x/java/utils/connectionpool/PoolKeyFactory.java b/plc4j/utils/connection-pool/src/main/java/org/apache/plc4x/java/utils/connectionpool/PoolKeyFactory.java
index e5d73c1..f72bdce 100644
--- a/plc4j/utils/connection-pool/src/main/java/org/apache/plc4x/java/utils/connectionpool/PoolKeyFactory.java
+++ b/plc4j/utils/connection-pool/src/main/java/org/apache/plc4x/java/utils/connectionpool/PoolKeyFactory.java
@@ -30,6 +30,7 @@ import java.util.regex.Pattern;
 
 public class PoolKeyFactory {
 
+    // TODO 11.12.18 jf: add a property to the drivers to keep this generic
     public PoolKey getPoolKey(String url, PlcAuthentication plcAuthentication) throws PlcConnectionException {
         Objects.requireNonNull(url);
         URI connectionUri;
diff --git a/plc4j/utils/scraper/src/main/java/org/apache/plc4x/java/scraper/Scraper.java b/plc4j/utils/scraper/src/main/java/org/apache/plc4x/java/scraper/Scraper.java
index a478272..725e58e 100644
--- a/plc4j/utils/scraper/src/main/java/org/apache/plc4x/java/scraper/Scraper.java
+++ b/plc4j/utils/scraper/src/main/java/org/apache/plc4x/java/scraper/Scraper.java
@@ -25,7 +25,10 @@ import org.apache.commons.lang3.Validate;
 import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 import org.apache.commons.lang3.tuple.Triple;
 import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
+import org.apache.commons.pool2.impl.GenericKeyedObjectPool;
+import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;
 import org.apache.plc4x.java.PlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
 import org.apache.plc4x.java.scraper.config.ScraperConfiguration;
 import org.apache.plc4x.java.scraper.util.PercentageAboveThreshold;
 import org.apache.plc4x.java.utils.connectionpool.PooledPlcDriverManager;
@@ -71,7 +74,22 @@ public class Scraper {
      * @param resultHandler
      */
     public Scraper(ScraperConfiguration config, ResultHandler resultHandler) {
-        this(resultHandler, new PooledPlcDriverManager(), config.getJobs());
+        this(resultHandler, createPooledDriverManager(), config.getJobs());
+    }
+
+    /**
+     * Min Idle per Key is set to 1 for situations where the network is broken.
+     * Then, on reconnect we can fail all getConnection calls (in the ScraperTask) fast until
+     * (in the background) the idle connection is created and the getConnection call returns fast.
+     */
+    private static PooledPlcDriverManager createPooledDriverManager() {
+        return new PooledPlcDriverManager(pooledPlcConnectionFactory -> {
+            GenericKeyedObjectPoolConfig<PlcConnection> poolConfig = new GenericKeyedObjectPoolConfig<>();
+            poolConfig.setMinIdlePerKey(1);  // This should avoid problems with long running connect attempts??
+            poolConfig.setTestOnBorrow(true);
+            poolConfig.setTestOnReturn(true);
+            return new GenericKeyedObjectPool<>(pooledPlcConnectionFactory, poolConfig);
+        });
     }
 
     /**