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/11/24 18:37:09 UTC
[incubator-plc4x] 10/11: [plc4j-scraper] Fix for S7 Connection.
Further implementation.
This is an automated email from the ASF dual-hosted git repository.
jfeinauer pushed a commit to branch feature/plc4j-scraper
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit 6b8bddff186309a25408523b6cc3683b7f80ef6b
Author: Julian Feinauer <j....@pragmaticminds.de>
AuthorDate: Sat Nov 24 18:45:39 2018 +0100
[plc4j-scraper] Fix for S7 Connection. Further implementation.
---
.../java/base/connection/NettyPlcConnection.java | 2 +-
.../org/apache/plc4x/java/scraper/ScraperTask.java | 23 ++++++++++++++++++++--
.../org/apache/plc4x/java/scraper/ScraperTest.java | 18 +++++++++++------
3 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/NettyPlcConnection.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/NettyPlcConnection.java
index 2f992b1..fd1ac78 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/NettyPlcConnection.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/NettyPlcConnection.java
@@ -97,7 +97,7 @@ public abstract class NettyPlcConnection extends AbstractPlcConnection {
@Override
public boolean isConnected() {
- return connected;
+ return connected && channel.isActive();
}
public Channel getChannel() {
diff --git a/plc4j/utils/scraper/src/main/java/org/apache/plc4x/java/scraper/ScraperTask.java b/plc4j/utils/scraper/src/main/java/org/apache/plc4x/java/scraper/ScraperTask.java
index 9bbf5e4..b762c7a 100644
--- a/plc4j/utils/scraper/src/main/java/org/apache/plc4x/java/scraper/ScraperTask.java
+++ b/plc4j/utils/scraper/src/main/java/org/apache/plc4x/java/scraper/ScraperTask.java
@@ -24,6 +24,8 @@ import org.apache.commons.lang3.time.StopWatch;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
import org.apache.plc4x.java.PlcDriverManager;
import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
import org.apache.plc4x.java.api.messages.PlcReadRequest;
import org.apache.plc4x.java.api.messages.PlcReadResponse;
import org.apache.plc4x.java.api.types.PlcResponseCode;
@@ -83,7 +85,16 @@ public class ScraperTask implements Runnable {
requestCounter.incrementAndGet();
StopWatch stopWatch = new StopWatch();
stopWatch.start();
- try (PlcConnection connection = driverManager.getConnection(connectionString)) {
+ PlcConnection connection = null;
+ try {
+ CompletableFuture<PlcConnection> future = CompletableFuture.supplyAsync(() -> {
+ try {
+ return driverManager.getConnection(connectionString);
+ } catch (PlcConnectionException e) {
+ throw new PlcRuntimeException(e);
+ }
+ }, handlerService);
+ connection = future.get(10*requestTimeoutMs, TimeUnit.MILLISECONDS);
LOGGER.trace("Connection to {} established: {}", connectionString, connection);
PlcReadResponse response;
try {
@@ -111,9 +122,16 @@ public class ScraperTask implements Runnable {
// Handle response (Async)
CompletableFuture.runAsync(() -> handle(transformResponseToMap(response)), handlerService);
} catch (Exception e) {
- failedStatistics.addValue(1.0);
LOGGER.debug("Exception during scrape", e);
handleException(e);
+ } finally {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (Exception e) {
+ // intentionally do nothing
+ }
+ }
}
}
@@ -166,6 +184,7 @@ public class ScraperTask implements Runnable {
}
public void handleException(Exception e) {
+ LOGGER.debug("Exception: ", e);
failedStatistics.addValue(1.0);
}
diff --git a/plc4j/utils/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java b/plc4j/utils/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
index 3a25f34..bb33c1a 100644
--- a/plc4j/utils/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
+++ b/plc4j/utils/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
@@ -21,6 +21,8 @@ package org.apache.plc4x.java.scraper;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.pool2.KeyedObjectPool;
+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.api.exceptions.PlcConnectionException;
@@ -51,16 +53,20 @@ class ScraperTest {
public static final String CONN_STRING_TIM = "s7://10.10.64.22/0/1";
public static final String FIELD_STRING_TIM = "%DB225:DBW0:INT";
- public static final String CONN_STRING_CH = "s7://10.10.64.20/0/1";
+ public static final String CONN_STRING_CH = "s7://10.10.64.20/0/1";
public static final String FIELD_STRING_CH = "%DB3:DBD32:DINT";
@Test
void real_stuff() throws InterruptedException {
- PlcDriverManager driverManager = new PooledPlcDriverManager(new PooledPlcDriverManager.PoolCreator() {
- @Override
- public KeyedObjectPool<PoolKey, PlcConnection> createPool(PooledPlcConnectionFactory pooledPlcConnectionFactory) {
- return null;
- }
+ PlcDriverManager driverManager = new PooledPlcDriverManager(pooledPlcConnectionFactory -> {
+ GenericKeyedObjectPoolConfig<PlcConnection> config = new GenericKeyedObjectPoolConfig<>();
+ config.setMaxWaitMillis(-1);
+ config.setMaxTotal(3);
+ config.setMinIdlePerKey(0);
+ config.setBlockWhenExhausted(true);
+ config.setTestOnBorrow(true);
+ config.setTestOnReturn(true);
+ return new GenericKeyedObjectPool<>(pooledPlcConnectionFactory, config);
});
Scraper scraper = new Scraper(driverManager, Arrays.asList(