From 099fdf2673092417a5160196ab2d4e03128ac29c Mon Sep 17 00:00:00 2001 From: Abe Ratnofsky Date: Fri, 23 Feb 2024 11:34:46 -0500 Subject: [PATCH] Move ClientWarn.State#warnings to a thread-safe list patch by Abe Ratnofsky; reviewed by Caleb Rackliffe, Stefan Miklosovic for CASSANDRA-19427 --- CHANGES.txt | 1 + src/java/org/apache/cassandra/service/ClientWarn.java | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 59bfb73065..7227024396 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.11.17 + * Move ClientWarn.State#warnings to a thread-safe list (CASSANDRA-19427) * Fix delayed SSTable release with unsafe_aggressive_sstable_expiration (CASSANDRA-18756) * Revert CASSANDRA-18543 (CASSANDRA-18854) * Fix NPE when using udfContext in UDF after a restart of a node (CASSANDRA-18739) 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) {