You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2012/02/24 02:07:32 UTC

svn commit: r1293050 - /lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudTest.java

Author: yonik
Date: Fri Feb 24 01:07:32 2012
New Revision: 1293050

URL: http://svn.apache.org/viewvc?rev=1293050&view=rev
Log:
tests: use stderr to interleave with logging, print out what docs/versions are missing from what shard

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

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudTest.java?rev=1293050&r1=1293049&r2=1293050&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudTest.java Fri Feb 24 01:07:32 2012
@@ -21,11 +21,7 @@ import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -37,6 +33,8 @@ import org.apache.solr.client.solrj.impl
 import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.CloudState;
@@ -638,7 +636,7 @@ public class FullSolrCloudTest extends A
     // new server should be part of first shard
     // how many docs are on the new shard?
     for (SolrServer client : shardToClient.get("shard1")) {
-      if (VERBOSE) System.out.println("total:"
+      if (VERBOSE) System.err.println("total:"
           + client.query(new SolrQuery("*:*")).getResults().getNumFound());
     }
     
@@ -660,7 +658,7 @@ public class FullSolrCloudTest extends A
     commit();
     
     long deadShardCount = shardToClient.get(SHARD2).get(0).query(query).getResults().getNumFound();
-    System.out.println("dsc:" + deadShardCount);
+    System.err.println("dsc:" + deadShardCount);
     
     query("q", "*:*", "sort", "n_tl1 desc");
     
@@ -745,14 +743,14 @@ public class FullSolrCloudTest extends A
     testDebugQueries();
     
     if (VERBOSE) {
-      System.out.println(controlClient.query(new SolrQuery("*:*")).getResults()
+      System.err.println(controlClient.query(new SolrQuery("*:*")).getResults()
           .getNumFound());
       
       for (SolrServer client : clients) {
         try {
           SolrQuery q = new SolrQuery("*:*");
           q.set("distrib", false);
-          System.out.println(client.query(q).getResults()
+          System.err.println(client.query(q).getResults()
               .getNumFound());
         } catch (Exception e) {
           
@@ -989,7 +987,7 @@ public class FullSolrCloudTest extends A
     long num = -1;
     long lastNum = -1;
     String failMessage = null;
-    if (verbose) System.out.println("check const of " + shard);
+    if (verbose) System.err.println("check const of " + shard);
     int cnt = 0;
     
     assertEquals(
@@ -998,17 +996,18 @@ public class FullSolrCloudTest extends A
         zkStateReader.getCloudState().getSlice(DEFAULT_COLLECTION, shard)
             .getShards().size(), solrClients.size());
 
+    SolrServer lastClient = null;
     for (SolrServer client : solrClients) {
       ZkNodeProps props = clientToInfo.get(new CloudSolrServerClient(client));
-      if (verbose) System.out.println("client" + cnt++);
-      if (verbose) System.out.println("PROPS:" + props);
+      if (verbose) System.err.println("client" + cnt++);
+      if (verbose) System.err.println("PROPS:" + props);
       
       try {
         SolrQuery query = new SolrQuery("*:*");
         query.set("distrib", false);
         num = client.query(query).getResults().getNumFound();
       } catch (SolrServerException e) {
-        if (verbose) System.out.println("error contacting client: "
+        if (verbose) System.err.println("error contacting client: "
             + e.getMessage() + "\n");
         continue;
       }
@@ -1018,25 +1017,68 @@ public class FullSolrCloudTest extends A
       if (zkStateReader.getCloudState().liveNodesContain(nodeName)) {
         live = true;
       }
-      if (verbose) System.out.println(" live:" + live);
+      if (verbose) System.err.println(" live:" + live);
       
-      if (verbose) System.out.println(" num:" + num + "\n");
+      if (verbose) System.err.println(" num:" + num + "\n");
       
       boolean active = props.get(ZkStateReader.STATE_PROP).equals(
           ZkStateReader.ACTIVE);
       if (active && live) {
         if (lastNum > -1 && lastNum != num && failMessage == null) {
-          failMessage = shard + " is not consistent, expected:" + lastNum
-              + " and got:" + num;
+          failMessage = shard + " is not consistent.  Got " + lastNum + " from " + lastClient + "lastClient"
+              + " and got " + num + " from " + client;
+
+          if (verbose || true) {
+            System.err.println("######" + failMessage);
+            SolrQuery query = new SolrQuery("*:*");
+            query.set("distrib", false);
+            query.set("fl","id,_version_");
+            query.set("rows","1000");
+            query.set("sort","id asc");
+
+            SolrDocumentList lst1 = lastClient.query(query).getResults();
+            SolrDocumentList lst2 = client.query(query).getResults();
+
+            showDiff(lst1, lst2, lastClient.toString(), client.toString());
+          }
+
         }
         lastNum = num;
+        lastClient = client;
       }
     }
-    
     return failMessage;
     
   }
   
+  void showDiff(SolrDocumentList a, SolrDocumentList b, String aName, String bName) {
+    System.err.println("######"+aName+ ": " + a);
+    System.err.println("######"+bName+ ": " + b);
+    System.err.println("###### sizes=" + a.size() + "," + b.size());
+    
+    Set<Map> setA = new HashSet<Map>();
+    for (SolrDocument sdoc : a) {
+      setA.add(new HashMap(sdoc));
+    }
+
+    Set<Map> setB = new HashSet<Map>();
+    for (SolrDocument sdoc : b) {
+      setB.add(new HashMap(sdoc));
+    }
+
+    Set<Map> onlyInA = new HashSet<Map>(setA);
+    onlyInA.removeAll(setB);
+    Set<Map> onlyInB = new HashSet<Map>(setB);
+    onlyInB.removeAll(setA);
+
+    if (onlyInA.size() > 0) {
+      System.err.println("###### Only in " + aName + ": " + onlyInA);
+    }
+    if (onlyInB.size() > 0) {
+      System.err.println("###### Only in " + bName + ": " + onlyInB);
+    }
+  }
+  
   protected void checkShardConsistency() throws Exception {
     checkShardConsistency(true, false);
   }
@@ -1045,7 +1087,7 @@ public class FullSolrCloudTest extends A
       throws Exception {
     long docs = controlClient.query(new SolrQuery("*:*")).getResults()
         .getNumFound();
-    if (verbose) System.out.println("Control Docs:" + docs);
+    if (verbose) System.err.println("Control Docs:" + docs);
     
     updateMappingsFromZk(jettys, clients);
     
@@ -1079,9 +1121,9 @@ public class FullSolrCloudTest extends A
               SolrQuery query = new SolrQuery("*:*");
               query.set("distrib", false);
               long results = client.query(query).getResults().getNumFound();
-              if (verbose) System.out.println(new ZkCoreNodeProps(props)
+              if (verbose) System.err.println(new ZkCoreNodeProps(props)
                   .getCoreUrl() + " : " + results);
-              if (verbose) System.out.println("shard:"
+              if (verbose) System.err.println("shard:"
                   + props.get(ZkStateReader.SHARD_ID_PROP));
               cnt += results;
               break;
@@ -1116,7 +1158,7 @@ public class FullSolrCloudTest extends A
     // TODO: as we create the clients, we should build a map from shard to
     // node/client
     // and node/client to shard?
-    if (verbose) System.out.println("control docs:"
+    if (verbose) System.err.println("control docs:"
         + controlClient.query(new SolrQuery("*:*")).getResults().getNumFound()
         + "\n\n");
     long controlCount = controlClient.query(new SolrQuery("*:*")).getResults()
@@ -1148,8 +1190,8 @@ public class FullSolrCloudTest extends A
               ((CommonsHttpSolrServer) client).getBaseURL()).getPort()
               + "_solr_";
           if (verbose && shard.getKey().endsWith(shardName)) {
-            System.out.println("shard:" + slice.getKey());
-            System.out.println(shard.getValue());
+            System.err.println("shard:" + slice.getKey());
+            System.err.println(shard.getValue());
           }
         }
       }
@@ -1163,9 +1205,9 @@ public class FullSolrCloudTest extends A
         count = client.query(query).getResults().getNumFound();
       }
       
-      if (verbose) System.out.println("client docs:" + count + "\n\n");
+      if (verbose) System.err.println("client docs:" + count + "\n\n");
     }
-    if (verbose) System.out.println("control docs:"
+    if (verbose) System.err.println("control docs:"
         + controlClient.query(new SolrQuery("*:*")).getResults().getNumFound()
         + "\n\n");
     SolrQuery query = new SolrQuery("*:*");