You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2014/11/05 15:22:43 UTC
svn commit: r1636875 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/cloud/Overseer.java
Author: shalin
Date: Wed Nov 5 14:22:43 2014
New Revision: 1636875
URL: http://svn.apache.org/r1636875
Log:
SOLR-6685: ConcurrentModificationException in Overseer Status API
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1636875&r1=1636874&r2=1636875&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Wed Nov 5 14:22:43 2014
@@ -267,6 +267,8 @@ Bug Fixes
* SOLR-2927: Solr does not unregister all mbeans upon exception in constructor
causing memory leaks. (tom liu, Sharath Babu, Cyrille Roy, shalin)
+* SOLR-6685: ConcurrentModificationException in Overseer Status API. (shalin)
+
Optimizations
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java?rev=1636875&r1=1636874&r2=1636875&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/Overseer.java Wed Nov 5 14:22:43 2014
@@ -40,6 +40,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
@@ -1962,7 +1963,7 @@ public class Overseer implements Closeab
public static class Stats {
static final int MAX_STORED_FAILURES = 10;
- final Map<String, Stat> stats = Collections.synchronizedMap(new HashMap<String, Stat>());
+ final Map<String, Stat> stats = new ConcurrentHashMap<>();
public Map<String, Stat> getStats() {
return stats;
@@ -1980,19 +1981,16 @@ public class Overseer implements Closeab
public void success(String operation) {
String op = operation.toLowerCase(Locale.ROOT);
- synchronized (stats) {
- Stat stat = stats.get(op);
- if (stat == null) {
- stat = new Stat();
- stats.put(op, stat);
- }
- stat.success.incrementAndGet();
+ Stat stat = stats.get(op);
+ if (stat == null) {
+ stat = new Stat();
+ stats.put(op, stat);
}
+ stat.success.incrementAndGet();
}
public void error(String operation) {
String op = operation.toLowerCase(Locale.ROOT);
- synchronized (stats) {
Stat stat = stats.get(op);
if (stat == null) {
stat = new Stat();
@@ -2000,26 +1998,20 @@ public class Overseer implements Closeab
}
stat.errors.incrementAndGet();
}
- }
public TimerContext time(String operation) {
String op = operation.toLowerCase(Locale.ROOT);
- Stat stat;
- synchronized (stats) {
- stat = stats.get(op);
+ Stat stat = stats.get(op);
if (stat == null) {
stat = new Stat();
stats.put(op, stat);
}
- }
return stat.requestTime.time();
}
public void storeFailureDetails(String operation, ZkNodeProps request, SolrResponse resp) {
String op = operation.toLowerCase(Locale.ROOT);
- Stat stat ;
- synchronized (stats) {
- stat = stats.get(op);
+ Stat stat = stats.get(op);
if (stat == null) {
stat = new Stat();
stats.put(op, stat);
@@ -2032,7 +2024,6 @@ public class Overseer implements Closeab
failedOps.addLast(new FailedOp(request, resp));
}
}
- }
public List<FailedOp> getFailureDetails(String operation) {
Stat stat = stats.get(operation.toLowerCase(Locale.ROOT));