tests: use stderr to interleave with logging, print out what docs/versions are missing from what shard

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1293050 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Yonik Seeley 2012-02-24 01:07:32 +00:00
parent b32b52578d
commit d63340aa32
1 changed files with 68 additions and 26 deletions

View File

@ -21,11 +21,7 @@ import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -37,6 +33,8 @@ import org.apache.solr.client.solrj.impl.CloudSolrServer;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.request.UpdateRequest; import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse; 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.SolrException;
import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.cloud.CloudState; import org.apache.solr.common.cloud.CloudState;
@ -638,7 +636,7 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
// new server should be part of first shard // new server should be part of first shard
// how many docs are on the new shard? // how many docs are on the new shard?
for (SolrServer client : shardToClient.get("shard1")) { for (SolrServer client : shardToClient.get("shard1")) {
if (VERBOSE) System.out.println("total:" if (VERBOSE) System.err.println("total:"
+ client.query(new SolrQuery("*:*")).getResults().getNumFound()); + client.query(new SolrQuery("*:*")).getResults().getNumFound());
} }
@ -660,7 +658,7 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
commit(); commit();
long deadShardCount = shardToClient.get(SHARD2).get(0).query(query).getResults().getNumFound(); 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"); query("q", "*:*", "sort", "n_tl1 desc");
@ -745,14 +743,14 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
testDebugQueries(); testDebugQueries();
if (VERBOSE) { if (VERBOSE) {
System.out.println(controlClient.query(new SolrQuery("*:*")).getResults() System.err.println(controlClient.query(new SolrQuery("*:*")).getResults()
.getNumFound()); .getNumFound());
for (SolrServer client : clients) { for (SolrServer client : clients) {
try { try {
SolrQuery q = new SolrQuery("*:*"); SolrQuery q = new SolrQuery("*:*");
q.set("distrib", false); q.set("distrib", false);
System.out.println(client.query(q).getResults() System.err.println(client.query(q).getResults()
.getNumFound()); .getNumFound());
} catch (Exception e) { } catch (Exception e) {
@ -989,7 +987,7 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
long num = -1; long num = -1;
long lastNum = -1; long lastNum = -1;
String failMessage = null; String failMessage = null;
if (verbose) System.out.println("check const of " + shard); if (verbose) System.err.println("check const of " + shard);
int cnt = 0; int cnt = 0;
assertEquals( assertEquals(
@ -998,17 +996,18 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
zkStateReader.getCloudState().getSlice(DEFAULT_COLLECTION, shard) zkStateReader.getCloudState().getSlice(DEFAULT_COLLECTION, shard)
.getShards().size(), solrClients.size()); .getShards().size(), solrClients.size());
SolrServer lastClient = null;
for (SolrServer client : solrClients) { for (SolrServer client : solrClients) {
ZkNodeProps props = clientToInfo.get(new CloudSolrServerClient(client)); ZkNodeProps props = clientToInfo.get(new CloudSolrServerClient(client));
if (verbose) System.out.println("client" + cnt++); if (verbose) System.err.println("client" + cnt++);
if (verbose) System.out.println("PROPS:" + props); if (verbose) System.err.println("PROPS:" + props);
try { try {
SolrQuery query = new SolrQuery("*:*"); SolrQuery query = new SolrQuery("*:*");
query.set("distrib", false); query.set("distrib", false);
num = client.query(query).getResults().getNumFound(); num = client.query(query).getResults().getNumFound();
} catch (SolrServerException e) { } catch (SolrServerException e) {
if (verbose) System.out.println("error contacting client: " if (verbose) System.err.println("error contacting client: "
+ e.getMessage() + "\n"); + e.getMessage() + "\n");
continue; continue;
} }
@ -1018,25 +1017,68 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
if (zkStateReader.getCloudState().liveNodesContain(nodeName)) { if (zkStateReader.getCloudState().liveNodesContain(nodeName)) {
live = true; 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( boolean active = props.get(ZkStateReader.STATE_PROP).equals(
ZkStateReader.ACTIVE); ZkStateReader.ACTIVE);
if (active && live) { if (active && live) {
if (lastNum > -1 && lastNum != num && failMessage == null) { if (lastNum > -1 && lastNum != num && failMessage == null) {
failMessage = shard + " is not consistent, expected:" + lastNum failMessage = shard + " is not consistent. Got " + lastNum + " from " + lastClient + "lastClient"
+ " and got:" + num; + " 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; lastNum = num;
lastClient = client;
} }
} }
return failMessage; 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 { protected void checkShardConsistency() throws Exception {
checkShardConsistency(true, false); checkShardConsistency(true, false);
} }
@ -1045,7 +1087,7 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
throws Exception { throws Exception {
long docs = controlClient.query(new SolrQuery("*:*")).getResults() long docs = controlClient.query(new SolrQuery("*:*")).getResults()
.getNumFound(); .getNumFound();
if (verbose) System.out.println("Control Docs:" + docs); if (verbose) System.err.println("Control Docs:" + docs);
updateMappingsFromZk(jettys, clients); updateMappingsFromZk(jettys, clients);
@ -1079,9 +1121,9 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
SolrQuery query = new SolrQuery("*:*"); SolrQuery query = new SolrQuery("*:*");
query.set("distrib", false); query.set("distrib", false);
long results = client.query(query).getResults().getNumFound(); 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); .getCoreUrl() + " : " + results);
if (verbose) System.out.println("shard:" if (verbose) System.err.println("shard:"
+ props.get(ZkStateReader.SHARD_ID_PROP)); + props.get(ZkStateReader.SHARD_ID_PROP));
cnt += results; cnt += results;
break; break;
@ -1116,7 +1158,7 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
// TODO: as we create the clients, we should build a map from shard to // TODO: as we create the clients, we should build a map from shard to
// node/client // node/client
// and node/client to shard? // 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() + controlClient.query(new SolrQuery("*:*")).getResults().getNumFound()
+ "\n\n"); + "\n\n");
long controlCount = controlClient.query(new SolrQuery("*:*")).getResults() long controlCount = controlClient.query(new SolrQuery("*:*")).getResults()
@ -1148,8 +1190,8 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
((CommonsHttpSolrServer) client).getBaseURL()).getPort() ((CommonsHttpSolrServer) client).getBaseURL()).getPort()
+ "_solr_"; + "_solr_";
if (verbose && shard.getKey().endsWith(shardName)) { if (verbose && shard.getKey().endsWith(shardName)) {
System.out.println("shard:" + slice.getKey()); System.err.println("shard:" + slice.getKey());
System.out.println(shard.getValue()); System.err.println(shard.getValue());
} }
} }
} }
@ -1163,9 +1205,9 @@ public class FullSolrCloudTest extends AbstractDistributedZkTestCase {
count = client.query(query).getResults().getNumFound(); 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() + controlClient.query(new SolrQuery("*:*")).getResults().getNumFound()
+ "\n\n"); + "\n\n");
SolrQuery query = new SolrQuery("*:*"); SolrQuery query = new SolrQuery("*:*");