diff --git a/CHANGES.txt b/CHANGES.txt index b093b8b31c..f2712c5088 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,7 @@ * Remove bashisms for mx4j tool in cassandra-env.sh (CASSANDRA-19416) * Add new concurrent_merkle_tree_requests config property to prevent OOM during multi-range and/or multi-table repairs (CASSANDRA-19336) Merged from 3.11: + * Move ClientWarn.State#warnings to a thread-safe list (CASSANDRA-19427) Merged from 3.0: * Fix SCM URL link (CASSANDRA-19422) * Backport CASSANDRA-16418 to 3.x (CASSANDRA-18824) diff --git a/src/java/org/apache/cassandra/service/ClientWarn.java b/src/java/org/apache/cassandra/service/ClientWarn.java index 5a6a878681..06d4c31ba2 100644 --- a/src/java/org/apache/cassandra/service/ClientWarn.java +++ b/src/java/org/apache/cassandra/service/ClientWarn.java @@ -17,7 +17,7 @@ */ package org.apache.cassandra.service; -import java.util.ArrayList; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.List; import io.netty.util.concurrent.FastThreadLocal; @@ -71,7 +71,9 @@ public class ClientWarn implements ExecutorLocal public static class State { - private final List warnings = new ArrayList<>(); + // This must be a thread-safe list. Even though it's wrapped in a ThreadLocal, it's propagated to each thread + // from shared state, so multiple threads can reference the same State. + private final List warnings = new CopyOnWriteArrayList<>(); private void add(String warning) {