You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2012/02/21 23:30:33 UTC

svn commit: r1292064 - /lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java

Author: markrmiller
Date: Tue Feb 21 22:30:33 2012
New Revision: 1292064

URL: http://svn.apache.org/viewvc?rev=1292064&view=rev
Log:
fix a concurrency issue around writing hashmap to json

Modified:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java?rev=1292064&r1=1292063&r2=1292064&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/cloud/ZkController.java Tue Feb 21 22:30:33 2012
@@ -85,7 +85,7 @@ public final class ZkController {
   public final static String COLLECTION_PARAM_PREFIX="collection.";
   public final static String CONFIGNAME_PROP="configName";
 
-  private final Map<String, CoreState> coreStates = Collections.synchronizedMap(new HashMap<String, CoreState>());
+  private final Map<String, CoreState> coreStates = new HashMap<String, CoreState>();
   
   private SolrZkClient zkClient;
   private ZkCmdExecutor cmdExecutor;
@@ -900,22 +900,25 @@ public final class ZkController {
     }
     CoreState coreState = new CoreState(coreName,
         cloudDesc.getCollectionName(), props, numShards);
-    coreStates.put(shardZkNodeName, coreState);
     final String nodePath = "/node_states/" + getNodeName();
-
-    try {
-      zkClient.setData(nodePath, ZkStateReader.toJSON(coreStates.values()),
-          true);
-      
-    } catch (KeeperException e) {
-      throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
-          "could not publish node state", e);
-    } catch (InterruptedException e) {
-      // Restore the interrupted status
-      Thread.currentThread().interrupt();
-      throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
-          "could not publish node state", e);
+    
+    synchronized (coreStates) {
+      coreStates.put(shardZkNodeName, coreState);
+      try {
+        zkClient.setData(nodePath, ZkStateReader.toJSON(coreStates.values()),
+            true);
+        
+      } catch (KeeperException e) {
+        throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
+            "could not publish node state", e);
+      } catch (InterruptedException e) {
+        // Restore the interrupted status
+        Thread.currentThread().interrupt();
+        throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
+            "could not publish node state", e);
+      }
     }
+
   }
 
   private String doGetShardIdProcess(String coreName, CloudDescriptor descriptor)