From 3089eb2a57e0a51cbc60eff8e38d5bc42a7f8d0d Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Fri, 31 Jul 2026 11:39:49 +0800 Subject: [PATCH] Initialize procedure worker list eagerly --- .../confignode/procedure/ProcedureExecutor.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/ProcedureExecutor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/ProcedureExecutor.java index b5f9a021426b..774ca00a6add 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/ProcedureExecutor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/ProcedureExecutor.java @@ -69,8 +69,8 @@ public class ProcedureExecutor { new ThreadGroup(ThreadName.CONFIG_NODE_PROCEDURE_WORKER.getName()); // Metrics may be scraped before init() and concurrently with initialization during a ConfigNode - // leader transition. - private volatile CopyOnWriteArrayList workerThreads; + // leader transition, so keep an always-present thread-safe list. + private final CopyOnWriteArrayList workerThreads = new CopyOnWriteArrayList<>(); private TimeoutExecutorThread timeoutExecutor; @@ -132,7 +132,7 @@ public void init(int numThreads) { new TimeoutExecutorThread<>( this, threadGroup, ThreadName.CONFIG_NODE_WORKER_THREAD_MONITOR.getName()); workId.set(0); - workerThreads = new CopyOnWriteArrayList<>(); + workerThreads.clear(); for (int i = 0; i < corePoolSize; i++) { workerThreads.add(new WorkerThread(threadGroup)); } @@ -1028,15 +1028,11 @@ protected void periodicExecute(Env env) { } public int getWorkerThreadCount() { - final CopyOnWriteArrayList workers = workerThreads; - return workers == null ? 0 : workers.size(); + return workerThreads.size(); } public long getActiveWorkerThreadCount() { - final CopyOnWriteArrayList workers = workerThreads; - return workers == null - ? 0 - : workers.stream().filter(worker -> worker.activeProcedure.get() != null).count(); + return workerThreads.stream().filter(worker -> worker.activeProcedure.get() != null).count(); } public boolean isRunning() {