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/27 19:32:17 UTC

svn commit: r1662777 - in /lucene/dev/branches/lucene_solr_4_10: ./ solr/ solr/core/ solr/core/src/test-files/solr/ solr/core/src/test/org/apache/solr/handler/component/ solr/test-framework/ solr/test-framework/src/java/org/apache/solr/cloud/ solr/test...

Author: shalin
Date: Fri Feb 27 18:32:16 2015
New Revision: 1662777

URL: http://svn.apache.org/r1662777
Log:
SOLR-7147: Introduce new TrackingShardHandlerFactory for monitoring what requests are sent to shards during tests

Added:
    lucene/dev/branches/lucene_solr_4_10/solr/core/src/test-files/solr/solr-trackingshardhandler.xml
      - copied, changed from r1662210, lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/solr-trackingshardhandler.xml
    lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java
      - copied, changed from r1662210, lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java
    lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/handler/
      - copied from r1662210, lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/handler/
Modified:
    lucene/dev/branches/lucene_solr_4_10/   (props changed)
    lucene/dev/branches/lucene_solr_4_10/solr/   (props changed)
    lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene_solr_4_10/solr/core/   (props changed)
    lucene/dev/branches/lucene_solr_4_10/solr/test-framework/   (props changed)
    lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java
    lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java

Modified: lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt?rev=1662777&r1=1662776&r2=1662777&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_10/solr/CHANGES.txt Fri Feb 27 18:32:16 2015
@@ -89,6 +89,12 @@ Bug Fixes
   
 * SOLR-7067: bin/solr won't run under bash 4.2+. (Steve Rowe)
 
+Other Changes
+----------------------
+
+* SOLR-7147: Introduce new TrackingShardHandlerFactory for monitoring what requests
+  are sent to shards during tests. (hossman, shalin)
+
 ==================  4.10.3 ==================
 
 Bug Fixes

Copied: lucene/dev/branches/lucene_solr_4_10/solr/core/src/test-files/solr/solr-trackingshardhandler.xml (from r1662210, lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/solr-trackingshardhandler.xml)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/solr/core/src/test-files/solr/solr-trackingshardhandler.xml?p2=lucene/dev/branches/lucene_solr_4_10/solr/core/src/test-files/solr/solr-trackingshardhandler.xml&p1=lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/solr-trackingshardhandler.xml&r1=1662210&r2=1662777&rev=1662777&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/solr-trackingshardhandler.xml (original)
+++ lucene/dev/branches/lucene_solr_4_10/solr/core/src/test-files/solr/solr-trackingshardhandler.xml Fri Feb 27 18:32:16 2015
@@ -22,8 +22,6 @@
 <solr>
 
   <str name="shareSchema">${shareSchema:false}</str>
-  <str name="configSetBaseDir">${configSetBaseDir:configsets}</str>
-  <str name="coreRootDirectory">${coreRootDirectory:.}</str>
 
   <solrcloud>
     <str name="host">127.0.0.1</str>

Copied: lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java (from r1662210, lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java?p2=lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java&p1=lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java&r1=1662210&r2=1662777&rev=1662777&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/solr/core/src/test/org/apache/solr/handler/component/TestTrackingShardHandlerFactory.java Fri Feb 27 18:32:16 2015
@@ -21,16 +21,14 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.solr.BaseDistributedSearchTestCase;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
-import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.CloudSolrServer;
 import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.servlet.SolrDispatchFilter;
-import org.junit.Test;
 
 /**
  * Test for {@link org.apache.solr.handler.component.TrackingShardHandlerFactory}
@@ -41,6 +39,8 @@ public class TestTrackingShardHandlerFac
 
   public TestTrackingShardHandlerFactory() {
     schemaString = "schema15.xml"; // we need a string id
+    fixShardCount = true;
+    shardCount = 2;
   }
 
   @Override
@@ -48,9 +48,8 @@ public class TestTrackingShardHandlerFac
     return "solr-trackingshardhandler.xml";
   }
 
-  @Test
-  @BaseDistributedSearchTestCase.ShardsFixed(num = 2)
-  public void testRequestTracking() throws Exception {
+  @Override
+  public void doTest() throws Exception {
     String collectionName = "testTwoPhase";
 
     List<JettySolrRunner> runners = new ArrayList<>(jettys);
@@ -75,7 +74,7 @@ public class TestTrackingShardHandlerFac
     assertNotNull(coreAdminRequests);
     assertEquals("Unexpected number of core admin requests were found", 2, coreAdminRequests.size());
 
-    CloudSolrClient client = cloudClient;
+    CloudSolrServer client = cloudClient;
 
     client.setDefaultCollection(collectionName);
         /*

Modified: lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java?rev=1662777&r1=1662776&r2=1662777&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java Fri Feb 27 18:32:16 2015
@@ -137,7 +137,7 @@ public abstract class AbstractDistribZkT
     waitForRecoveriesToFinish(collection, zkStateReader, verbose, failOnTimeout, 330);
   }
   
-  protected void waitForRecoveriesToFinish(String collection,
+  public static void waitForRecoveriesToFinish(String collection,
       ZkStateReader zkStateReader, boolean verbose, boolean failOnTimeout, int timeoutSeconds)
       throws Exception {
     log.info("Wait for recoveries to finish - collection: " + collection + " failOnTimeout:" + failOnTimeout + " timeout (sec):" + timeoutSeconds);
@@ -174,7 +174,7 @@ public abstract class AbstractDistribZkT
           if (verbose) System.out.println("Gave up waiting for recovery to finish..");
           if (failOnTimeout) {
             Diagnostics.logThreadDumps("Gave up waiting for recovery to finish.  THREAD DUMP:");
-            printLayout();
+            zkStateReader.getZkClient().printLayoutToStdOut();
             fail("There are still nodes recoverying - waited for " + timeoutSeconds + " seconds");
             // won't get here
             return;

Modified: lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java?rev=1662777&r1=1662210&r2=1662777&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java Fri Feb 27 18:32:16 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() {