From 32162cf544ddb14e31fcfade931ace483f54917d Mon Sep 17 00:00:00 2001 From: Dmitry Konstantinov Date: Thu, 18 Dec 2025 20:40:14 +0000 Subject: [PATCH] Change default for cassandra.set_sep_thread_name to false to reduce CPU usage Add an extra optimization if it is enabled: invoke Thread.setName only if a phase changed patch by Dmitry Konstantinov; reviewed by Francisco Guerrero, Jyothsna Konisa for CASSANDRA-21089 --- CHANGES.txt | 1 + src/java/org/apache/cassandra/concurrent/SEPWorker.java | 7 ++++++- .../cassandra/config/CassandraRelevantProperties.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index a46f8afa2a..7672ce8207 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 6.0-alpha2 + * Change default for cassandra.set_sep_thread_name to false to reduce CPU usage (CASSANDRA-21089) * Avoid permission checks for masked columns when the table doesn't have any (CASSANDRA-21299) * Reduce allocations and array copies due to buffer resizing in LocalDataResponse during row serialization (CASSANDRA-21285) * Implement a guardrail for client driver versions (CASSANDRA-21146) diff --git a/src/java/org/apache/cassandra/concurrent/SEPWorker.java b/src/java/org/apache/cassandra/concurrent/SEPWorker.java index 27efbdbfa7..8f1a5e9aa2 100644 --- a/src/java/org/apache/cassandra/concurrent/SEPWorker.java +++ b/src/java/org/apache/cassandra/concurrent/SEPWorker.java @@ -53,6 +53,8 @@ final class SEPWorker extends AtomicReference implements Runnabl private final AtomicReference currentTask = new AtomicReference<>(); + private String lastUsedExecutorName; + SEPWorker(ThreadGroup threadGroup, Long workerId, Work initialState, SharedExecutorPool pool) { this.pool = pool; @@ -129,8 +131,11 @@ final class SEPWorker extends AtomicReference implements Runnabl assigned = get().assigned; if (assigned == null) continue; - if (SET_THREAD_NAME) + if (SET_THREAD_NAME && assigned.name != lastUsedExecutorName) // .equals is not used intentionally + { Thread.currentThread().setName(assigned.name + workerIdThreadSuffix); + lastUsedExecutorName = assigned.name; + } task = assigned.tasks.poll(); currentTask.lazySet(task); diff --git a/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java b/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java index c4adaf0c2a..c72577e7ec 100644 --- a/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java +++ b/src/java/org/apache/cassandra/config/CassandraRelevantProperties.java @@ -536,7 +536,7 @@ public enum CassandraRelevantProperties */ SEED_COUNT_WARN_THRESHOLD("cassandra.seed_count_warn_threshold"), SERIALIZATION_EMPTY_TYPE_NONEMPTY_BEHAVIOR("cassandra.serialization.emptytype.nonempty_behavior"), - SET_SEP_THREAD_NAME("cassandra.set_sep_thread_name", "true"), + SET_SEP_THREAD_NAME("cassandra.set_sep_thread_name", "false"), SHUTDOWN_ANNOUNCE_DELAY_IN_MS("cassandra.shutdown_announce_in_ms", "2000"), SIMULATOR_ITERATIONS("simulator.iterations", "3"), SIMULATOR_SEED("cassandra.simulator.seed"),