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.";