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 2015/02/25 21:19:29 UTC

svn commit: r1662301 - in /lucene/dev/branches/branch_5x: ./ solr/ solr/test-framework/ solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java

Author: shalin
Date: Wed Feb 25 20:19:28 2015
New Revision: 1662301

URL: http://svn.apache.org/r1662301
Log:
SOLR-7147: Handle multiple replicas correctly in getShardRequests

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/solr/   (props changed)
    lucene/dev/branches/branch_5x/solr/test-framework/   (props changed)
    lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java

Modified: lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java?rev=1662301&r1=1662300&r2=1662301&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java (original)
+++ lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java Wed Feb 25 20:19:28 2015
@@ -18,11 +18,12 @@ package org.apache.solr.handler.componen
  */
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Queue;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.cloud.MiniSolrCloudCluster;
@@ -32,6 +33,7 @@ import org.apache.solr.common.cloud.Slic
 import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.servlet.SolrDispatchFilter;
 
@@ -186,7 +188,7 @@ public class TrackingShardHandlerFactory
    * @see org.apache.solr.handler.component.TrackingShardHandlerFactory#setTrackingQueue(java.util.List, java.util.Queue)
    */
   public static class RequestTrackingQueue extends LinkedList<ShardRequestAndParams> {
-    private final Map<String, List<ShardRequestAndParams>> requests = new HashMap<>();
+    private final Map<String, List<ShardRequestAndParams>> requests = new ConcurrentHashMap<>();
 
     @Override
     public boolean offer(ShardRequestAndParams shardRequestAndParams) {
@@ -244,15 +246,17 @@ public class TrackingShardHandlerFactory
       Slice slice = collection.getSlice(shardId);
       assert slice != null;
 
-      List<TrackingShardHandlerFactory.ShardRequestAndParams> results = new ArrayList<>();
-      for (Map.Entry<String, Replica> entry : slice.getReplicasMap().entrySet()) {
-        String coreUrl = new ZkCoreNodeProps(entry.getValue()).getCoreUrl();
-        List<TrackingShardHandlerFactory.ShardRequestAndParams> list = requests.get(coreUrl);
-        if (list != null) {
-          results.addAll(list);
+      for (Map.Entry<String, List<ShardRequestAndParams>> entry : requests.entrySet()) {
+        // multiple shard addresses may be present separated by '|'
+        List<String> list = StrUtils.splitSmart(entry.getKey(), '|');
+        for (Map.Entry<String, Replica> replica : slice.getReplicasMap().entrySet()) {
+          String coreUrl = new ZkCoreNodeProps(replica.getValue()).getCoreUrl();
+          if (list.contains(coreUrl)) {
+            return new ArrayList<>(entry.getValue());
+          }
         }
       }
-      return results;
+      return Collections.emptyList();
     }
 
     /**
@@ -278,7 +282,7 @@ public class TrackingShardHandlerFactory
      * Retrieves all requests recorded by this collection as a Map of shard address (string url)
      * to a list of {@link org.apache.solr.handler.component.TrackingShardHandlerFactory.ShardRequestAndParams}
      *
-     * @return a {@link java.util.Map} of url strings to {@link org.apache.solr.handler.component.TrackingShardHandlerFactory.ShardRequestAndParams} objects
+     * @return a {@link java.util.concurrent.ConcurrentHashMap} of url strings to {@link org.apache.solr.handler.component.TrackingShardHandlerFactory.ShardRequestAndParams} objects
      * or empty map if none have been recorded
      */
     public Map<String, List<ShardRequestAndParams>> getAllRequests() {