Skip to content

Commit 8bff947

Browse files
Bouncheckdkropachev
authored andcommitted
Operate on immutable copy of logs in AdvancedShardAwarenessIT
Not doing so can lead to concurrent modification exception, since the collection may change during the iteration. Those changes itself are not relevant at that point in time.
1 parent 5e7f1b3 commit 8bff947

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

integration-tests/src/test/java/com/datastax/oss/driver/core/pool/AdvancedShardAwarenessIT.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.datastax.oss.driver.internal.core.pool.ChannelPool;
1818
import com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures;
1919
import com.datastax.oss.driver.internal.core.util.concurrent.Reconnection;
20+
import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList;
2021
import com.google.common.collect.ImmutableMap;
2122
import com.google.common.collect.ImmutableSet;
2223
import com.google.common.util.concurrent.Uninterruptibles;
@@ -128,9 +129,10 @@ public void should_initialize_all_channels(boolean reuseAddress) {
128129
.withConfigLoader(loader)
129130
.build()) {
130131
Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
132+
List<ILoggingEvent> logsCopy = ImmutableList.copyOf(appender.list);
131133
expectedOccurences.forEach(
132-
(pattern, times) -> assertMatchesExactly(pattern, times, appender.list));
133-
forbiddenOccurences.forEach(pattern -> assertNoLogMatches(pattern, appender.list));
134+
(pattern, times) -> assertMatchesExactly(pattern, times, logsCopy));
135+
forbiddenOccurences.forEach(pattern -> assertNoLogMatches(pattern, logsCopy));
134136
}
135137
}
136138

@@ -150,7 +152,8 @@ public void should_see_mismatched_shard() {
150152
.withConfigLoader(loader)
151153
.build()) {
152154
Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
153-
assertMatchesAtLeast(shardMismatchPattern, 5, appender.list);
155+
List<ILoggingEvent> logsCopy = ImmutableList.copyOf(appender.list);
156+
assertMatchesAtLeast(shardMismatchPattern, 5, logsCopy);
154157
}
155158
}
156159

@@ -178,8 +181,9 @@ public void should_struggle_to_fill_pools() {
178181
CqlSession session3 = CompletableFutures.getUninterruptibly(stage3);
179182
CqlSession session4 = CompletableFutures.getUninterruptibly(stage4); ) {
180183
Uninterruptibles.sleepUninterruptibly(20, TimeUnit.SECONDS);
181-
assertNoLogMatches(shardMismatchPattern, appender.list);
182-
assertMatchesAtLeast(generalReconnectionPattern, 8, appender.list);
184+
List<ILoggingEvent> logsCopy = ImmutableList.copyOf(appender.list);
185+
assertNoLogMatches(shardMismatchPattern, logsCopy);
186+
assertMatchesAtLeast(generalReconnectionPattern, 8, logsCopy);
183187
}
184188
}
185189

@@ -226,11 +230,12 @@ public void should_not_struggle_to_fill_pools() {
226230
+ Pattern.quote(node2)
227231
+ ":19042.*Reconnection attempt complete, 66/66 channels.*"),
228232
1 * sessions);
233+
List<ILoggingEvent> logsCopy = ImmutableList.copyOf(appender.list);
229234
expectedOccurences.forEach(
230-
(pattern, times) -> assertMatchesAtLeast(pattern, times, appender.list));
231-
assertNoLogMatches(shardMismatchPattern, appender.list);
232-
assertMatchesAtMost(reconnectionPattern1, tolerance, appender.list);
233-
assertMatchesAtMost(reconnectionPattern2, tolerance, appender.list);
235+
(pattern, times) -> assertMatchesAtLeast(pattern, times, logsCopy));
236+
assertNoLogMatches(shardMismatchPattern, logsCopy);
237+
assertMatchesAtMost(reconnectionPattern1, tolerance, logsCopy);
238+
assertMatchesAtMost(reconnectionPattern2, tolerance, logsCopy);
234239
}
235240
}
236241

0 commit comments

Comments
 (0)