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.feina...@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); + }); } /**