This is an automated email from the ASF dual-hosted git repository.

gerlowskija pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new 98dadd88fac SOLR-17761: Prevent CircuitBreakerRegistry static init 
races (#3349)
98dadd88fac is described below

commit 98dadd88fac56a3b084e57f5241e2a6bcf461034
Author: Jason Gerlowski <[email protected]>
AuthorDate: Fri May 16 09:34:59 2025 -0400

    SOLR-17761: Prevent CircuitBreakerRegistry static init races (#3349)
    
    Making 'globalCircuitBreakerMap' a ConcurrentHashMap ensures that
    multiple CircuitBreakerRegistry's won't race or trigger
    ConcurrentModificationException's trying to initialize the static state
    on startup.
---
 solr/CHANGES.txt                                                       | 2 ++
 .../org/apache/solr/util/circuitbreaker/CircuitBreakerRegistry.java    | 3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 2d894f15068..7bdbbd8aaae 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -93,6 +93,8 @@ Bug Fixes
 
 * SOLR-17745: Cancel leader election was being skipped on core container 
shutdown due to incorrect zkClient check (Matthew Biscocho, Luke Kot-Zaniewski)
 
+* SOLR-17761: Global circuit breakers can no longer trigger 
ConcurrentModificationException's on Solr startup (Jason Gerlowski)
+
 Dependency Upgrades
 ---------------------
 * SOLR-17471: Upgrade Lucene to 9.12.1. (Pierre Salagnac, Christine Poerschke)
diff --git 
a/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreakerRegistry.java
 
b/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreakerRegistry.java
index d602706a2cd..91e284b823f 100644
--- 
a/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreakerRegistry.java
+++ 
b/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreakerRegistry.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -51,7 +52,7 @@ public class CircuitBreakerRegistry implements Closeable {
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   private final Map<SolrRequestType, List<CircuitBreaker>> circuitBreakerMap = 
new HashMap<>();
   private static final Map<SolrRequestType, List<CircuitBreaker>> 
globalCircuitBreakerMap =
-      new HashMap<>();
+      new ConcurrentHashMap<>();
   private static final Pattern SYSPROP_REGEX =
       
Pattern.compile("solr.circuitbreaker\\.(update|query)\\.(cpu|mem|loadavg)");
   public static final String SYSPROP_PREFIX = "solr.circuitbreaker.";

Reply via email to