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 2022/01/30 16:46:26 UTC
[plc4x] 01/01: Possible fix for a race condition which lead a test to fail with some probability.
This is an automated email from the ASF dual-hosted git repository.
jfeinauer pushed a commit to branch bugfix/fix-failing-test-cached-driver
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 4d02ceeed6ebe13fb43b1631a16bd184bcae8138
Author: julian <j....@pragmaticminds.de>
AuthorDate: Sun Jan 30 17:46:16 2022 +0100
Possible fix for a race condition which lead a test to fail with some probability.
---
.../plc4x/java/utils/connectionpool2/CachedDriverManager.java | 6 +++---
.../plc4x/java/utils/connectionpool2/CachedDriverManagerIT.java | 8 ++++++--
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/connectionpool2/CachedDriverManager.java b/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/connectionpool2/CachedDriverManager.java
index a291795..134495f 100644
--- a/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/connectionpool2/CachedDriverManager.java
+++ b/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/connectionpool2/CachedDriverManager.java
@@ -156,6 +156,7 @@ public class CachedDriverManager extends PlcDriverManager implements CachedDrive
if (!this.url.equals(url)) {
throw new IllegalArgumentException("This Cached Driver Manager only supports the Connection " + url);
}
+ CompletableFuture<PlcConnection> future;
synchronized (this) {
logger.trace("current queue size before check {}", queue.size());
if (queue.isEmpty() && isConnectionAvailable()) {
@@ -169,9 +170,8 @@ public class CachedDriverManager extends PlcDriverManager implements CachedDrive
} catch (Exception ignore) {
}
}
- }
- CompletableFuture<PlcConnection> future = new CompletableFuture<>();
- synchronized (this) {
+
+ future = new CompletableFuture<>();
logger.trace("current queue size before add {}", queue.size());
queue.add(future);
}
diff --git a/plc4j/tools/connection-cache/src/test/java/org/apache/plc4x/java/utils/connectionpool2/CachedDriverManagerIT.java b/plc4j/tools/connection-cache/src/test/java/org/apache/plc4x/java/utils/connectionpool2/CachedDriverManagerIT.java
index 81ce694..308fb11 100644
--- a/plc4j/tools/connection-cache/src/test/java/org/apache/plc4x/java/utils/connectionpool2/CachedDriverManagerIT.java
+++ b/plc4j/tools/connection-cache/src/test/java/org/apache/plc4x/java/utils/connectionpool2/CachedDriverManagerIT.java
@@ -31,6 +31,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -49,7 +50,7 @@ class CachedDriverManagerIT {
MockConnection plcMockConnection = mock(MockConnection.class);
when(mock.create()).thenReturn(plcMockConnection);
- CachedDriverManager driverManager = new CachedDriverManager("", mock, 100_000);
+ CachedDriverManager driverManager = new CachedDriverManager("", mock, 10_000);
AtomicInteger errorCounter = new AtomicInteger(0);
AtomicInteger successCounter = new AtomicInteger(0);
@@ -68,7 +69,10 @@ class CachedDriverManagerIT {
executorService.shutdown();
- executorService.awaitTermination(50, TimeUnit.SECONDS);
+ boolean forced = executorService.awaitTermination(50, TimeUnit.SECONDS);
+
+ // If this is false, a thread was still hanging => something failed
+ assertTrue(forced);
assertEquals(100, successCounter.get());
assertEquals(0, errorCounter.get());