You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2012/09/21 19:22:27 UTC
svn commit: r1388574 [40/45] - in /lucene/dev/branches/LUCENE-2878: ./
dev-tools/ dev-tools/eclipse/ dev-tools/eclipse/dot.settings/
dev-tools/idea/ dev-tools/idea/.idea/ dev-tools/idea/.idea/libraries/
dev-tools/idea/lucene/ dev-tools/idea/lucene/anal...
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java Fri Sep 21 17:21:34 2012
@@ -149,7 +149,7 @@ public class AnalysisAfterCoreReloadTest
private SolrServer createServer( String name ) {
try {
// setup the server...
- String url = "http://localhost:"+port+context+"/"+name;
+ String url = "http://127.0.0.1:"+port+context+"/"+name;
HttpSolrServer s = new HttpSolrServer( url );
s.setConnectionTimeout(SolrTestCaseJ4.DEFAULT_CONNECTION_TIMEOUT);
s.setDefaultMaxConnectionsPerHost(100);
@@ -171,4 +171,4 @@ public class AnalysisAfterCoreReloadTest
return "solrconfig.xml";
}
-}
\ No newline at end of file
+}
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java Fri Sep 21 17:21:34 2012
@@ -33,6 +33,8 @@ import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.index.LogMergePolicy;
+import org.apache.lucene.index.StorableField;
+import org.apache.lucene.index.StoredDocument;
import org.apache.lucene.util.English;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
@@ -419,7 +421,7 @@ public class BasicFunctionalityTest exte
IndexSchema ischema = new IndexSchema(solrConfig, getSchemaFile(), null);
SchemaField f; // Solr field type
- IndexableField luf; // Lucene field
+ StorableField luf; // Lucene field
f = ischema.getField("test_basictv");
luf = f.createField("test", 0f);
@@ -621,7 +623,7 @@ public class BasicFunctionalityTest exte
core.execute(core.getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
DocList dl = ((ResultContext) rsp.getValues().get("response")).docs;
- Document d = req.getSearcher().doc(dl.iterator().nextDoc());
+ StoredDocument d = req.getSearcher().doc(dl.iterator().nextDoc());
// ensure field is not lazy, only works for Non-Numeric fields currently (if you change schema behind test, this may fail)
assertFalse( ((Field) d.getField("test_hlt")).getClass().getSimpleName().equals("LazyField"));
assertFalse( ((Field) d.getField("title")).getClass().getSimpleName().equals("LazyField"));
@@ -644,7 +646,7 @@ public class BasicFunctionalityTest exte
DocList dl = ((ResultContext) rsp.getValues().get("response")).docs;
DocIterator di = dl.iterator();
- Document d = req.getSearcher().doc(di.nextDoc());
+ StoredDocument d = req.getSearcher().doc(di.nextDoc());
// ensure field is lazy
assertTrue( (d.getField("test_hlt")).getClass().getSimpleName().equals("LazyField"));
assertFalse( (d.getField("title")).getClass().getSimpleName().equals("LazyField"));
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java Fri Sep 21 17:21:34 2012
@@ -140,7 +140,7 @@ public class TestDistributedGrouping ext
commit();
- // test grouping
+ // test grouping
// The second sort = id asc . The sorting behaviour is different in dist mode. See TopDocs#merge
// The shard the result came from matters in the order if both document sortvalues are equal
query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", 10, "sort", i1 + " asc, id asc");
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/TestSolrCoreProperties.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/TestSolrCoreProperties.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/TestSolrCoreProperties.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/TestSolrCoreProperties.java Fri Sep 21 17:21:34 2012
@@ -50,7 +50,7 @@ public class TestSolrCoreProperties exte
solrJetty = new JettySolrRunner(getHomeDir(), "/solr", 0);
solrJetty.start();
- String url = "http://localhost:" + solrJetty.getLocalPort() + "/solr";
+ String url = "http://127.0.0.1:" + solrJetty.getLocalPort() + "/solr";
client = new HttpSolrServer(url);
}
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/analysis/TestReversedWildcardFilterFactory.java Fri Sep 21 17:21:34 2012
@@ -162,7 +162,7 @@ public class TestReversedWildcardFilterF
Query q = qp.parse(query);
if (!(q instanceof AutomatonQuery))
return false;
- // this is a hack to get the protected Automaton field in AutomatonQuery,
+ // this is a hack to get the protected Automaton field in AutomatonQuery,
// may break in later lucene versions - we have no getter... for good reasons.
final Field automatonField = AutomatonQuery.class.getDeclaredField("automaton");
automatonField.setAccessible(true);
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java Fri Sep 21 17:21:34 2012
@@ -39,11 +39,7 @@ import org.apache.solr.servlet.SolrDispa
* work as expected.
*/
public class BasicDistributedZk2Test extends AbstractFullDistribZkTestBase {
-
- public BasicDistributedZk2Test() {
- super();
- }
-
+
/*
* (non-Javadoc)
*
@@ -107,7 +103,7 @@ public class BasicDistributedZk2Test ext
ZkNodeProps leaderProps = zkStateReader.getLeaderProps(
DEFAULT_COLLECTION, SHARD2);
- String nodeName = leaderProps.get(ZkStateReader.NODE_NAME_PROP);
+ String nodeName = leaderProps.getStr(ZkStateReader.NODE_NAME_PROP);
chaosMonkey.stopShardExcept(SHARD2, nodeName);
SolrServer client = getClient(nodeName);
@@ -227,7 +223,7 @@ public class BasicDistributedZk2Test ext
query("q", "*:*", "sort", "n_tl1 desc");
- // try adding a doc with CloudSolrServer
+
cloudClient.setDefaultCollection(DEFAULT_COLLECTION);
long numFound2 = cloudClient.query(new SolrQuery("*:*")).getResults().getNumFound();
@@ -239,6 +235,7 @@ public class BasicDistributedZk2Test ext
controlClient.add(doc);
+ // try adding a doc with CloudSolrServer
UpdateRequest ureq = new UpdateRequest();
ureq.add(doc);
// ureq.setParam("update.chain", DISTRIB_UPDATE_CHAIN);
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java Fri Sep 21 17:21:34 2012
@@ -58,6 +58,7 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.cloud.ClusterState;
+import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.ZkCoreNodeProps;
import org.apache.solr.common.cloud.ZkNodeProps;
@@ -69,13 +70,14 @@ import org.apache.solr.common.params.Upd
import org.apache.solr.common.util.NamedList;
import org.apache.solr.update.SolrCmdDistributor.Request;
import org.apache.solr.util.DefaultSolrThreadFactory;
+import org.junit.Before;
/**
* This test simply does a bunch of basic things in solrcloud mode and asserts things
* work as expected.
*/
@Slow
-public class BasicDistributedZkTest extends AbstractDistribZkTestBase {
+public class BasicDistributedZkTest extends AbstractFullDistribZkTestBase {
private static final String DEFAULT_COLLECTION = "collection1";
private static final boolean DEBUG = false;
@@ -108,8 +110,19 @@ public class BasicDistributedZkTest exte
CompletionService<Request> completionService;
Set<Future<Request>> pending;
+
+ @Before
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ System.setProperty("numShards", Integer.toString(sliceCount));
+ }
+
+
public BasicDistributedZkTest() {
fixShardCount = true;
+
+ sliceCount = 2;
shardCount = 3;
completionService = new ExecutorCompletionService<Request>(executor);
pending = new HashSet<Future<Request>>();
@@ -137,6 +150,14 @@ public class BasicDistributedZkTest exte
public void doTest() throws Exception {
// setLoggingLevel(null);
+
+ // make sure we have leaders for each shard
+ for (int j = 1; j < sliceCount; j++) {
+ zkStateReader.getLeaderProps(DEFAULT_COLLECTION, "shard" + j, 10000);
+ } // make sure we again have leaders for each shard
+
+ waitForRecoveriesToFinish(false);
+
del("*:*");
indexr(id,1, i1, 100, tlong, 100,t1,"now is the time for all good men"
@@ -179,74 +200,74 @@ public class BasicDistributedZkTest exte
// random value sort
for (String f : fieldNames) {
- query("q","*:*", "sort",f+" desc");
- query("q","*:*", "sort",f+" asc");
+ query(false, new String[] {"q","*:*", "sort",f+" desc"});
+ query(false, new String[] {"q","*:*", "sort",f+" asc"});
}
// these queries should be exactly ordered and scores should exactly match
- query("q","*:*", "sort",i1+" desc");
- query("q","*:*", "sort",i1+" asc");
- query("q","*:*", "sort",i1+" desc", "fl","*,score");
- query("q","*:*", "sort","n_tl1 asc", "fl","*,score");
- query("q","*:*", "sort","n_tl1 desc");
+ query(false, new String[] {"q","*:*", "sort",i1+" desc"});
+ query(false, new String[] {"q","*:*", "sort",i1+" asc"});
+ query(false, new String[] {"q","*:*", "sort",i1+" desc", "fl","*,score"});
+ query(false, new String[] {"q","*:*", "sort","n_tl1 asc", "fl","*,score"});
+ query(false, new String[] {"q","*:*", "sort","n_tl1 desc"});
handle.put("maxScore", SKIPVAL);
- query("q","{!func}"+i1);// does not expect maxScore. So if it comes ,ignore it. JavaBinCodec.writeSolrDocumentList()
+ query(false, new String[] {"q","{!func}"+i1});// does not expect maxScore. So if it comes ,ignore it. JavaBinCodec.writeSolrDocumentList()
//is agnostic of request params.
handle.remove("maxScore");
- query("q","{!func}"+i1, "fl","*,score"); // even scores should match exactly here
+ query(false, new String[] {"q","{!func}"+i1, "fl","*,score"}); // even scores should match exactly here
handle.put("highlighting", UNORDERED);
handle.put("response", UNORDERED);
handle.put("maxScore", SKIPVAL);
- query("q","quick");
- query("q","all","fl","id","start","0");
- query("q","all","fl","foofoofoo","start","0"); // no fields in returned docs
- query("q","all","fl","id","start","100");
+ query(false, new String[] {"q","quick"});
+ query(false, new String[] {"q","all","fl","id","start","0"});
+ query(false, new String[] {"q","all","fl","foofoofoo","start","0"}); // no fields in returned docs
+ query(false, new String[] {"q","all","fl","id","start","100"});
handle.put("score", SKIPVAL);
- query("q","quick","fl","*,score");
- query("q","all","fl","*,score","start","1");
- query("q","all","fl","*,score","start","100");
-
- query("q","now their fox sat had put","fl","*,score",
- "hl","true","hl.fl",t1);
-
- query("q","now their fox sat had put","fl","foofoofoo",
- "hl","true","hl.fl",t1);
-
- query("q","matchesnothing","fl","*,score");
-
- query("q","*:*", "rows",100, "facet","true", "facet.field",t1);
- query("q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.limit",-1, "facet.sort","count");
- query("q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.limit",-1, "facet.sort","count", "facet.mincount",2);
- query("q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.limit",-1, "facet.sort","index");
- query("q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.limit",-1, "facet.sort","index", "facet.mincount",2);
- query("q","*:*", "rows",100, "facet","true", "facet.field",t1,"facet.limit",1);
- query("q","*:*", "rows",100, "facet","true", "facet.query","quick", "facet.query","all", "facet.query","*:*");
- query("q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.offset",1);
- query("q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.mincount",2);
+ query(false, new String[] {"q","quick","fl","*,score"});
+ query(false, new String[] {"q","all","fl","*,score","start","1"});
+ query(false, new String[] {"q","all","fl","*,score","start","100"});
+
+ query(false, new String[] {"q","now their fox sat had put","fl","*,score",
+ "hl","true","hl.fl",t1});
+
+ query(false, new String[] {"q","now their fox sat had put","fl","foofoofoo",
+ "hl","true","hl.fl",t1});
+
+ query(false, new String[] {"q","matchesnothing","fl","*,score"});
+
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",t1});
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.limit",-1, "facet.sort","count"});
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.limit",-1, "facet.sort","count", "facet.mincount",2});
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.limit",-1, "facet.sort","index"});
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.limit",-1, "facet.sort","index", "facet.mincount",2});
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",t1,"facet.limit",1});
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.query","quick", "facet.query","all", "facet.query","*:*"});
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.offset",1});
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",t1, "facet.mincount",2});
// test faceting multiple things at once
- query("q","*:*", "rows",100, "facet","true", "facet.query","quick", "facet.query","all", "facet.query","*:*"
- ,"facet.field",t1);
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.query","quick", "facet.query","all", "facet.query","*:*"
+ ,"facet.field",t1});
// test filter tagging, facet exclusion, and naming (multi-select facet support)
- query("q","*:*", "rows",100, "facet","true", "facet.query","{!key=myquick}quick", "facet.query","{!key=myall ex=a}all", "facet.query","*:*"
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.query","{!key=myquick}quick", "facet.query","{!key=myall ex=a}all", "facet.query","*:*"
,"facet.field","{!key=mykey ex=a}"+t1
,"facet.field","{!key=other ex=b}"+t1
,"facet.field","{!key=again ex=a,b}"+t1
,"facet.field",t1
- ,"fq","{!tag=a}id:[1 TO 7]", "fq","{!tag=b}id:[3 TO 9]"
+ ,"fq","{!tag=a}id:[1 TO 7]", "fq","{!tag=b}id:[3 TO 9]"}
);
- query("q", "*:*", "facet", "true", "facet.field", "{!ex=t1}SubjectTerms_mfacet", "fq", "{!tag=t1}SubjectTerms_mfacet:(test 1)", "facet.limit", "10", "facet.mincount", "1");
+ query(false, new Object[] {"q", "*:*", "facet", "true", "facet.field", "{!ex=t1}SubjectTerms_mfacet", "fq", "{!tag=t1}SubjectTerms_mfacet:(test 1)", "facet.limit", "10", "facet.mincount", "1"});
// test field that is valid in schema but missing in all shards
- query("q","*:*", "rows",100, "facet","true", "facet.field",missingField, "facet.mincount",2);
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",missingField, "facet.mincount",2});
// test field that is valid in schema and missing in some shards
- query("q","*:*", "rows",100, "facet","true", "facet.field",oddField, "facet.mincount",2);
+ query(false, new Object[] {"q","*:*", "rows",100, "facet","true", "facet.field",oddField, "facet.mincount",2});
- query("q","*:*", "sort",i1+" desc", "stats", "true", "stats.field", i1);
+ query(false, new Object[] {"q","*:*", "sort",i1+" desc", "stats", "true", "stats.field", i1});
/*** TODO: the failure may come back in "exception"
try {
@@ -262,9 +283,9 @@ public class BasicDistributedZkTest exte
// This makes it much more likely that we may not get the top facet values and hence
// we turn of that checking.
handle.put("facet_fields", SKIPVAL);
- query("q","*:*", "rows",0, "facet","true", "facet.field",t1,"facet.limit",5, "facet.shard.limit",5);
+ query(false, new Object[] {"q","*:*", "rows",0, "facet","true", "facet.field",t1,"facet.limit",5, "facet.shard.limit",5});
// check a complex key name
- query("q","*:*", "rows",0, "facet","true", "facet.field","{!key='a b/c \\' \\} foo'}"+t1,"facet.limit",5, "facet.shard.limit",5);
+ query(false, new Object[] {"q","*:*", "rows",0, "facet","true", "facet.field","{!key='a b/c \\' \\} foo'}"+t1,"facet.limit",5, "facet.shard.limit",5});
handle.remove("facet_fields");
@@ -276,20 +297,20 @@ public class BasicDistributedZkTest exte
index_specific(i, id,100, i1, 107 ,t1,"oh no, a duplicate!");
}
commit();
- query("q","duplicate", "hl","true", "hl.fl", t1);
- query("q","fox duplicate horses", "hl","true", "hl.fl", t1);
- query("q","*:*", "rows",100);
+ query(false, new Object[] {"q","duplicate", "hl","true", "hl.fl", t1});
+ query(false, new Object[] {"q","fox duplicate horses", "hl","true", "hl.fl", t1});
+ query(false, new Object[] {"q","*:*", "rows",100});
}
// test debugging
handle.put("explain", SKIPVAL);
handle.put("debug", UNORDERED);
handle.put("time", SKIPVAL);
- query("q","now their fox sat had put","fl","*,score",CommonParams.DEBUG_QUERY, "true");
- query("q", "id:[1 TO 5]", CommonParams.DEBUG_QUERY, "true");
- query("q", "id:[1 TO 5]", CommonParams.DEBUG, CommonParams.TIMING);
- query("q", "id:[1 TO 5]", CommonParams.DEBUG, CommonParams.RESULTS);
- query("q", "id:[1 TO 5]", CommonParams.DEBUG, CommonParams.QUERY);
+ query(false, new Object[] {"q","now their fox sat had put","fl","*,score",CommonParams.DEBUG_QUERY, "true"});
+ query(false, new Object[] {"q", "id:[1 TO 5]", CommonParams.DEBUG_QUERY, "true"});
+ query(false, new Object[] {"q", "id:[1 TO 5]", CommonParams.DEBUG, CommonParams.TIMING});
+ query(false, new Object[] {"q", "id:[1 TO 5]", CommonParams.DEBUG, CommonParams.RESULTS});
+ query(false, new Object[] {"q", "id:[1 TO 5]", CommonParams.DEBUG, CommonParams.QUERY});
// TODO: This test currently fails because debug info is obtained only
// on shards with matches.
@@ -331,7 +352,7 @@ public class BasicDistributedZkTest exte
int numShards = _TestUtil.nextInt(random(), 0, shardCount) + 1;
int numReplicas = _TestUtil.nextInt(random(), 0, 5) + 1;
params.set("numShards", numShards);
- params.set("numReplicas", numReplicas);
+ params.set(OverseerCollectionProcessor.REPLICATION_FACTOR, numReplicas);
String collectionName = "awholynewcollection_" + i;
int clientIndex = random().nextInt(2);
List<Integer> list = new ArrayList<Integer>();
@@ -342,9 +363,15 @@ public class BasicDistributedZkTest exte
SolrRequest request = new QueryRequest(params);
request.setPath("/admin/collections");
- clients.get(clientIndex).request(request);
+ final String baseUrl = ((HttpSolrServer) clients.get(clientIndex)).getBaseURL().substring(
+ 0,
+ ((HttpSolrServer) clients.get(clientIndex)).getBaseURL().length()
+ - DEFAULT_COLLECTION.length() - 1);
+
+ createNewSolrServer("", baseUrl).request(request);
}
+
Set<Entry<String,List<Integer>>> collectionInfosEntrySet = collectionInfos.entrySet();
for (Entry<String,List<Integer>> entry : collectionInfosEntrySet) {
String collection = entry.getKey();
@@ -356,7 +383,11 @@ public class BasicDistributedZkTest exte
HttpSolrServer collectionClient = new HttpSolrServer(url);
// poll for a second - it can take a moment before we are ready to serve
- waitForNon404or503(collectionClient);
+ waitForNon403or404or503(collectionClient);
+ }
+
+ for (int i = 0; i < cnt; i++) {
+ waitForRecoveriesToFinish("awholynewcollection_" + i, zkStateReader, false);
}
List<String> collectionNameList = new ArrayList<String>();
@@ -399,7 +430,12 @@ public class BasicDistributedZkTest exte
request.setPath("/admin/collections");
// we can use this client because we just want base url
- clients.get(0).request(request);
+ final String baseUrl = ((HttpSolrServer) clients.get(0)).getBaseURL().substring(
+ 0,
+ ((HttpSolrServer) clients.get(0)).getBaseURL().length()
+ - DEFAULT_COLLECTION.length() - 1);
+
+ createNewSolrServer("", baseUrl).request(request);
// reloads make take a short while
boolean allTimesAreCorrect = waitForReloads(collectionName, urlToTimeBefore);
@@ -412,7 +448,7 @@ public class BasicDistributedZkTest exte
request = new QueryRequest(params);
request.setPath("/admin/collections");
- clients.get(0).request(request);
+ createNewSolrServer("", baseUrl).request(request);
// ensure its out of the state
checkForMissingCollection(collectionName);
@@ -459,11 +495,11 @@ public class BasicDistributedZkTest exte
Iterator<Entry<String,Slice>> it = slices.entrySet().iterator();
while (it.hasNext()) {
Entry<String,Slice> sliceEntry = it.next();
- Map<String,ZkNodeProps> sliceShards = sliceEntry.getValue().getShards();
- Iterator<Entry<String,ZkNodeProps>> shardIt = sliceShards.entrySet()
+ Map<String,Replica> sliceShards = sliceEntry.getValue().getReplicasMap();
+ Iterator<Entry<String,Replica>> shardIt = sliceShards.entrySet()
.iterator();
while (shardIt.hasNext()) {
- Entry<String,ZkNodeProps> shardEntry = shardIt.next();
+ Entry<String,Replica> shardEntry = shardIt.next();
ZkCoreNodeProps coreProps = new ZkCoreNodeProps(shardEntry.getValue());
CoreAdminResponse mcr = CoreAdminRequest.getStatus(
coreProps.getCoreName(),
@@ -488,11 +524,11 @@ public class BasicDistributedZkTest exte
for (Map.Entry<String,Slice> entry : slices.entrySet()) {
Slice slice = entry.getValue();
- Map<String,ZkNodeProps> shards = slice.getShards();
- Set<Map.Entry<String,ZkNodeProps>> shardEntries = shards.entrySet();
- for (Map.Entry<String,ZkNodeProps> shardEntry : shardEntries) {
+ Map<String,Replica> shards = slice.getReplicasMap();
+ Set<Map.Entry<String,Replica>> shardEntries = shards.entrySet();
+ for (Map.Entry<String,Replica> shardEntry : shardEntries) {
final ZkNodeProps node = shardEntry.getValue();
- if (clusterState.liveNodesContain(node.get(ZkStateReader.NODE_NAME_PROP))) {
+ if (clusterState.liveNodesContain(node.getStr(ZkStateReader.NODE_NAME_PROP))) {
return new ZkCoreNodeProps(node).getCoreUrl();
}
}
@@ -501,7 +537,7 @@ public class BasicDistributedZkTest exte
throw new RuntimeException("Could not find a live node for collection:" + collection);
}
- private void waitForNon404or503(HttpSolrServer collectionClient)
+ private void waitForNon403or404or503(HttpSolrServer collectionClient)
throws Exception {
SolrException exp = null;
long timeoutAt = System.currentTimeMillis() + 30000;
@@ -512,7 +548,7 @@ public class BasicDistributedZkTest exte
try {
collectionClient.query(new SolrQuery("*:*"));
} catch (SolrException e) {
- if (!(e.code() == 403 || e.code() == 503)) {
+ if (!(e.code() == 403 || e.code() == 503 || e.code() == 404)) {
throw e;
}
exp = e;
@@ -534,7 +570,6 @@ public class BasicDistributedZkTest exte
boolean found = false;
boolean sliceMatch = false;
while (System.currentTimeMillis() < timeoutAt) {
- solrj.getZkStateReader().updateClusterState(true);
ClusterState clusterState = solrj.getZkStateReader().getClusterState();
Map<String,Map<String,Slice>> collections = clusterState
.getCollectionStates();
@@ -543,35 +578,16 @@ public class BasicDistributedZkTest exte
// did we find expectedSlices slices/shards?
if (slices.size() == expectedSlices) {
sliceMatch = true;
- found = true;
- // also make sure each are active
- Iterator<Entry<String,Slice>> it = slices.entrySet().iterator();
- while (it.hasNext()) {
- Entry<String,Slice> sliceEntry = it.next();
- Map<String,ZkNodeProps> sliceShards = sliceEntry.getValue()
- .getShards();
- Iterator<Entry<String,ZkNodeProps>> shardIt = sliceShards
- .entrySet().iterator();
- while (shardIt.hasNext()) {
- Entry<String,ZkNodeProps> shardEntry = shardIt.next();
- if (!shardEntry.getValue().get(ZkStateReader.STATE_PROP)
- .equals(ZkStateReader.ACTIVE)) {
- found = false;
- break;
- }
- }
- }
- if (found) break;
+
}
+ found = true;
+ break;
}
- Thread.sleep(100);
+ Thread.sleep(500);
}
if (!found) {
- printLayout();
if (!sliceMatch) {
fail("Could not find new " + expectedSlices + " slice collection called " + collectionName);
- } else {
- fail("Found expected # of slices, but some nodes are not active for collection called " + collectionName);
}
}
}
@@ -647,6 +663,8 @@ public class BasicDistributedZkTest exte
// cloud level test mainly needed just to make sure that versions and errors are propagated correctly
private void doOptimisticLockingAndUpdating() throws Exception {
+ printLayout();
+
SolrInputDocument sd = sdoc("id", 1000, "_version_", -1);
indexDoc(sd);
@@ -716,10 +734,14 @@ public class BasicDistributedZkTest exte
}
private void testANewCollectionInOneInstanceWithManualShardAssignement() throws Exception {
+ System.clearProperty("numShards");
List<SolrServer> collectionClients = new ArrayList<SolrServer>();
SolrServer client = clients.get(0);
otherCollectionClients.put(oneInstanceCollection2, collectionClients);
- String baseUrl = ((HttpSolrServer) client).getBaseURL();
+ final String baseUrl = ((HttpSolrServer) client).getBaseURL().substring(
+ 0,
+ ((HttpSolrServer) client).getBaseURL().length()
+ - DEFAULT_COLLECTION.length() - 1);
createCollection(oneInstanceCollection2, collectionClients, baseUrl, 1, "slice1");
createCollection(oneInstanceCollection2, collectionClients, baseUrl, 2, "slice2");
createCollection(oneInstanceCollection2, collectionClients, baseUrl, 3, "slice2");
@@ -742,7 +764,9 @@ public class BasicDistributedZkTest exte
assertAllActive(oneInstanceCollection2, solrj.getZkStateReader());
- // TODO: enable when we don't falsely get slice1...
+ printLayout();
+
+ // TODO: enable when we don't falsely get slice1...
// solrj.getZkStateReader().getLeaderUrl(oneInstanceCollection2, "slice1", 30000);
// solrj.getZkStateReader().getLeaderUrl(oneInstanceCollection2, "slice2", 30000);
client2.add(getDoc(id, "1"));
@@ -777,13 +801,16 @@ public class BasicDistributedZkTest exte
zkStateReader.updateClusterState(true);
Map<String,Slice> slices = zkStateReader.getClusterState().getSlices(oneInstanceCollection2);
assertNotNull(slices);
- String roles = slices.get("slice1").getShards().values().iterator().next().get(ZkStateReader.ROLES_PROP);
+ String roles = slices.get("slice1").getReplicasMap().values().iterator().next().getStr(ZkStateReader.ROLES_PROP);
assertEquals("none", roles);
}
private void testSearchByCollectionName() throws SolrServerException {
SolrServer client = clients.get(0);
- String baseUrl = ((HttpSolrServer) client).getBaseURL();
+ final String baseUrl = ((HttpSolrServer) client).getBaseURL().substring(
+ 0,
+ ((HttpSolrServer) client).getBaseURL().length()
+ - DEFAULT_COLLECTION.length() - 1);
// the cores each have different names, but if we add the collection name to the url
// we should get mapped to the right core
@@ -797,7 +824,10 @@ public class BasicDistributedZkTest exte
List<SolrServer> collectionClients = new ArrayList<SolrServer>();
SolrServer client = clients.get(0);
otherCollectionClients.put(oneInstanceCollection , collectionClients);
- String baseUrl = ((HttpSolrServer) client).getBaseURL();
+ final String baseUrl = ((HttpSolrServer) client).getBaseURL().substring(
+ 0,
+ ((HttpSolrServer) client).getBaseURL().length()
+ - DEFAULT_COLLECTION.length() - 1);
createCollection(oneInstanceCollection, collectionClients, baseUrl, 1);
createCollection(oneInstanceCollection, collectionClients, baseUrl, 2);
createCollection(oneInstanceCollection, collectionClients, baseUrl, 3);
@@ -960,13 +990,17 @@ public class BasicDistributedZkTest exte
int unique = 0;
for (final SolrServer client : clients) {
unique++;
+ final String baseUrl = ((HttpSolrServer) client).getBaseURL()
+ .substring(
+ 0,
+ ((HttpSolrServer) client).getBaseURL().length()
+ - DEFAULT_COLLECTION.length() -1);
final int frozeUnique = unique;
Callable call = new Callable() {
public Object call() {
HttpSolrServer server;
try {
- server = new HttpSolrServer(
- ((HttpSolrServer) client).getBaseURL());
+ server = new HttpSolrServer(baseUrl);
Create createCmd = new Create();
createCmd.setCoreName(collection);
@@ -982,8 +1016,7 @@ public class BasicDistributedZkTest exte
}
};
- collectionClients.add(createNewSolrServer(collection,
- ((HttpSolrServer) client).getBaseURL()));
+ collectionClients.add(createNewSolrServer(collection, baseUrl));
pending.add(completionService.submit(call));
while (pending != null && pending.size() > 0) {
@@ -1042,6 +1075,7 @@ public class BasicDistributedZkTest exte
if (solrj != null) {
solrj.shutdown();
}
+ System.clearProperty("numShards");
System.clearProperty("zkHost");
}
}
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java Fri Sep 21 17:21:34 2012
@@ -42,7 +42,7 @@ import org.slf4j.LoggerFactory;
public class ChaosMonkeyNothingIsSafeTest extends AbstractFullDistribZkTestBase {
public static Logger log = LoggerFactory.getLogger(ChaosMonkeyNothingIsSafeTest.class);
- private static final int BASE_RUN_LENGTH = 180000;
+ private static final int BASE_RUN_LENGTH = 60000;
@BeforeClass
public static void beforeSuperClass() {
@@ -56,8 +56,8 @@ public class ChaosMonkeyNothingIsSafeTes
@Override
public void setUp() throws Exception {
super.setUp();
- // TODO use @Noisy annotation as we expect lots of exceptions
- //ignoreException(".*");
+ // can help to hide this when testing and looking at logs
+ //ignoreException("shard update error");
System.setProperty("numShards", Integer.toString(sliceCount));
}
@@ -71,8 +71,8 @@ public class ChaosMonkeyNothingIsSafeTes
public ChaosMonkeyNothingIsSafeTest() {
super();
- sliceCount = 2;
- shardCount = 6;
+ sliceCount = 1;
+ shardCount = 7;
}
@Override
@@ -83,9 +83,16 @@ public class ChaosMonkeyNothingIsSafeTes
handle.put("QTime", SKIPVAL);
handle.put("timestamp", SKIPVAL);
+ // make sure we have leaders for each shard
+ for (int j = 1; j < sliceCount; j++) {
+ zkStateReader.getLeaderProps(DEFAULT_COLLECTION, "shard" + j, 10000);
+ } // make sure we again have leaders for each shard
+
+ waitForRecoveriesToFinish(false);
+
// we cannot do delete by query
// as it's not supported for recovery
- // del("*:*");
+ del("*:*");
List<StopableThread> threads = new ArrayList<StopableThread>();
int threadCount = 1;
@@ -105,13 +112,18 @@ public class ChaosMonkeyNothingIsSafeTes
searchThread.start();
}
- FullThrottleStopableIndexingThread ftIndexThread = new FullThrottleStopableIndexingThread(
- clients, i * 50000, true);
- threads.add(ftIndexThread);
- ftIndexThread.start();
+ // TODO: only do this sometimes so that we can sometimes compare against control
+ boolean runFullThrottle = random().nextBoolean();
+ if (runFullThrottle) {
+ FullThrottleStopableIndexingThread ftIndexThread = new FullThrottleStopableIndexingThread(
+ clients, i * 50000, true);
+ threads.add(ftIndexThread);
+ ftIndexThread.start();
+ }
- chaosMonkey.startTheMonkey(true, 1500);
- int runLength = atLeast(BASE_RUN_LENGTH);
+ chaosMonkey.startTheMonkey(true, 10000);
+ //int runLength = atLeast(BASE_RUN_LENGTH);
+ int runLength = BASE_RUN_LENGTH;
try {
Thread.sleep(runLength);
} finally {
@@ -127,17 +139,19 @@ public class ChaosMonkeyNothingIsSafeTes
indexThread.join();
}
- // fails will happen...
- // for (StopableIndexingThread indexThread : threads) {
- // assertEquals(0, indexThread.getFails());
- // }
+ // we expect full throttle fails, but not cloud client...
+ for (StopableThread indexThread : threads) {
+ if (indexThread instanceof StopableIndexingThread && !(indexThread instanceof FullThrottleStopableIndexingThread)) {
+ //assertEquals(0, ((StopableIndexingThread) indexThread).getFails());
+ }
+ }
// try and wait for any replications and what not to finish...
Thread.sleep(2000);
// wait until there are no recoveries...
- waitForThingsToLevelOut(Math.round((runLength / 1000.0f / 5.0f)));
+ waitForThingsToLevelOut(Integer.MAX_VALUE);//Math.round((runLength / 1000.0f / 3.0f)));
// make sure we again have leaders for each shard
for (int j = 1; j < sliceCount; j++) {
@@ -151,13 +165,19 @@ public class ChaosMonkeyNothingIsSafeTes
zkStateReader.updateClusterState(true);
assertTrue(zkStateReader.getClusterState().getLiveNodes().size() > 0);
- checkShardConsistency(false, true);
+
+ // full throttle thread can
+ // have request fails
+ checkShardConsistency(!runFullThrottle, true);
+
+ long ctrlDocs = controlClient.query(new SolrQuery("*:*")).getResults()
+ .getNumFound();
// ensure we have added more than 0 docs
long cloudClientDocs = cloudClient.query(new SolrQuery("*:*"))
.getResults().getNumFound();
- assertTrue(cloudClientDocs > 0);
+ assertTrue("Found " + ctrlDocs + " control docs", cloudClientDocs > 0);
if (VERBOSE) System.out.println("control docs:"
+ controlClient.query(new SolrQuery("*:*")).getResults()
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeySafeLeaderTest.java Fri Sep 21 17:21:34 2012
@@ -50,11 +50,6 @@ public class ChaosMonkeySafeLeaderTest e
@Override
public void setUp() throws Exception {
super.setUp();
- // we expect this time of exception as shards go up and down...
- //ignoreException(".*");
-
- // sometimes we cannot get the same port
- ignoreException("java\\.net\\.BindException: Address already in use");
System.setProperty("numShards", Integer.toString(sliceCount));
}
@@ -69,8 +64,8 @@ public class ChaosMonkeySafeLeaderTest e
public ChaosMonkeySafeLeaderTest() {
super();
- sliceCount = atLeast(2);
- shardCount = atLeast(sliceCount*2);
+ sliceCount = 3;//atLeast(2);
+ shardCount = 12;//atLeast(sliceCount*2);
}
@Override
@@ -114,7 +109,7 @@ public class ChaosMonkeySafeLeaderTest e
// try and wait for any replications and what not to finish...
- waitForThingsToLevelOut(Math.round((runLength / 1000.0f / 5.0f)));
+ waitForThingsToLevelOut(Integer.MAX_VALUE);//Math.round((runLength / 1000.0f / 3.0f)));
checkShardConsistency(true, true);
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ClusterStateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ClusterStateTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ClusterStateTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ClusterStateTest.java Fri Sep 21 17:21:34 2012
@@ -25,7 +25,7 @@ import java.util.Set;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkNodeProps;
+import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.ZkStateReader;
import org.junit.Test;
@@ -38,16 +38,16 @@ public class ClusterStateTest extends So
liveNodes.add("node2");
Map<String,Slice> slices = new HashMap<String,Slice>();
- Map<String,ZkNodeProps> sliceToProps = new HashMap<String,ZkNodeProps>();
- Map<String,String> props = new HashMap<String,String>();
+ Map<String,Replica> sliceToProps = new HashMap<String,Replica>();
+ Map<String,Object> props = new HashMap<String,Object>();
props.put("prop1", "value");
props.put("prop2", "value2");
- ZkNodeProps zkNodeProps = new ZkNodeProps(props);
- sliceToProps.put("node1", zkNodeProps);
- Slice slice = new Slice("shard1", sliceToProps);
+ Replica replica = new Replica("node1", props);
+ sliceToProps.put("node1", replica);
+ Slice slice = new Slice("shard1", sliceToProps, null);
slices.put("shard1", slice);
- Slice slice2 = new Slice("shard2", sliceToProps);
+ Slice slice2 = new Slice("shard2", sliceToProps, null);
slices.put("shard2", slice2);
collectionStates.put("collection1", slices);
collectionStates.put("collection2", slices);
@@ -60,8 +60,8 @@ public class ClusterStateTest extends So
assertEquals("Provided liveNodes not used properly", 2, loadedClusterState
.getLiveNodes().size());
assertEquals("No collections found", 2, loadedClusterState.getCollections().size());
- assertEquals("Poperties not copied properly", zkNodeProps.get("prop1"), loadedClusterState.getSlice("collection1", "shard1").getShards().get("node1").get("prop1"));
- assertEquals("Poperties not copied properly", zkNodeProps.get("prop2"), loadedClusterState.getSlice("collection1", "shard1").getShards().get("node1").get("prop2"));
+ assertEquals("Poperties not copied properly", replica.getStr("prop1"), loadedClusterState.getSlice("collection1", "shard1").getReplicasMap().get("node1").getStr("prop1"));
+ assertEquals("Poperties not copied properly", replica.getStr("prop2"), loadedClusterState.getSlice("collection1", "shard1").getReplicasMap().get("node1").getStr("prop2"));
loadedClusterState = ClusterState.load(null, new byte[0], liveNodes);
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ClusterStateUpdateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ClusterStateUpdateTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ClusterStateUpdateTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ClusterStateUpdateTest.java Fri Sep 21 17:21:34 2012
@@ -25,6 +25,7 @@ import java.util.Set;
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.ClusterState;
+import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
@@ -139,7 +140,7 @@ public class ClusterStateUpdateTest exte
System.setProperty("solrcloud.update.delay", "1");
- Map<String,String> props2 = new HashMap<String,String>();
+ Map<String,Object> props2 = new HashMap<String,Object>();
props2.put("configName", "conf1");
ZkNodeProps zkProps2 = new ZkNodeProps(props2);
@@ -173,7 +174,7 @@ public class ClusterStateUpdateTest exte
slices = clusterState2.getSlices("testcore");
if (slices != null && slices.containsKey("shard1")
- && slices.get("shard1").getShards().size() > 0) {
+ && slices.get("shard1").getReplicasMap().size() > 0) {
break;
}
Thread.sleep(500);
@@ -185,17 +186,17 @@ public class ClusterStateUpdateTest exte
Slice slice = slices.get("shard1");
assertEquals("shard1", slice.getName());
- Map<String,ZkNodeProps> shards = slice.getShards();
+ Map<String,Replica> shards = slice.getReplicasMap();
assertEquals(1, shards.size());
- ZkNodeProps zkProps = shards.get(host + ":1661_solr_testcore");
+ Replica zkProps = shards.get(host + ":1661_solr_testcore");
assertNotNull(zkProps);
- assertEquals(host + ":1661_solr", zkProps.get(ZkStateReader.NODE_NAME_PROP));
+ assertEquals(host + ":1661_solr", zkProps.getStr(ZkStateReader.NODE_NAME_PROP));
- assertEquals("http://" + host + ":1661/solr", zkProps.get(ZkStateReader.BASE_URL_PROP));
+ assertEquals("http://" + host + ":1661/solr", zkProps.getStr(ZkStateReader.BASE_URL_PROP));
Set<String> liveNodes = clusterState2.getLiveNodes();
assertNotNull(liveNodes);
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java Fri Sep 21 17:21:34 2012
@@ -211,11 +211,12 @@ public class LeaderElectionIntegrationTe
@Test
public void testLeaderElectionAfterClientTimeout() throws Exception {
// TODO: work out the best timing here...
- System.setProperty("zkClientTimeout", "500");
+ System.setProperty("zkClientTimeout", Integer.toString(ZkTestServer.TICK_TIME * 2 + 100));
// timeout the leader
String leader = getLeader();
int leaderPort = getLeaderPort(leader);
- containerMap.get(leaderPort).getZkController().getZkClient().getSolrZooKeeper().pauseCnxn(2000);
+ ZkController zkController = containerMap.get(leaderPort).getZkController();
+ zkController.getZkClient().getSolrZooKeeper().pauseCnxn(zkController.getClientTimeout() + 100);
for (int i = 0; i < 60; i++) { // wait till leader is changed
if (leaderPort != getLeaderPort(getLeader())) {
@@ -224,6 +225,9 @@ public class LeaderElectionIntegrationTe
Thread.sleep(100);
}
+ // make sure we have waited long enough for the first leader to have come back
+ Thread.sleep(ZkTestServer.TICK_TIME * 2 + 100);
+
if (VERBOSE) System.out.println("kill everyone");
// kill everyone but the first leader that should have reconnected by now
for (Map.Entry<Integer,CoreContainer> entry : containerMap.entrySet()) {
@@ -232,11 +236,15 @@ public class LeaderElectionIntegrationTe
}
}
- for (int i = 0; i < 60; i++) { // wait till leader is changed
- if (leaderPort == getLeaderPort(getLeader())) {
- break;
+ for (int i = 0; i < 320; i++) { // wait till leader is changed
+ try {
+ if (leaderPort == getLeaderPort(getLeader())) {
+ break;
+ }
+ Thread.sleep(100);
+ } catch (Exception e) {
+ continue;
}
- Thread.sleep(100);
}
// the original leader should be leader again now - everyone else is down
@@ -249,7 +257,7 @@ public class LeaderElectionIntegrationTe
private String getLeader() throws InterruptedException {
ZkNodeProps props = reader.getLeaderProps("collection1", "shard1", 30000);
- String leader = props.get(ZkStateReader.NODE_NAME_PROP);
+ String leader = props.getStr(ZkStateReader.NODE_NAME_PROP);
return leader;
}
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java Fri Sep 21 17:21:34 2012
@@ -124,9 +124,21 @@ public class LeaderElectionTest extends
try {
setupOnConnect();
} catch (InterruptedException e) {
+ log.error("setup failed", e);
+
+ if (this.zkClient != null) {
+ this.zkClient.close();
+ }
+
return;
} catch (Throwable e) {
- // e.printStackTrace();
+ log.error("setup failed", e);
+
+ if (this.zkClient != null) {
+ this.zkClient.close();
+ }
+
+ return;
}
while (!stop) {
@@ -221,76 +233,77 @@ public class LeaderElectionTest extends
for (int i = 0; i < 15; i++) {
ClientThread thread = new ClientThread(i);
-
threads.add(thread);
}
-
- for (Thread thread : threads) {
- thread.start();
- }
-
-
- while(true) { //wait for election to complete
- int doneCount = 0;
- for (ClientThread thread : threads) {
- if(thread.electionDone) {
- doneCount++;
+ try {
+ for (Thread thread : threads) {
+ thread.start();
+ }
+
+ while (true) { // wait for election to complete
+ int doneCount = 0;
+ for (ClientThread thread : threads) {
+ if (thread.electionDone) {
+ doneCount++;
+ }
}
+ if (doneCount == 15) {
+ break;
+ }
+ Thread.sleep(100);
}
- if(doneCount==15) {
- break;
+
+ int leaderThread = getLeaderThread();
+
+ // whoever the leader is, should be the n_0 seq
+ assertEquals(0, threads.get(leaderThread).seq);
+
+ // kill n_0, 1, 3 and 4
+ ((ClientThread) seqToThread.get(0)).close();
+
+ waitForLeader(threads, 1);
+
+ leaderThread = getLeaderThread();
+
+ // whoever the leader is, should be the n_1 seq
+
+ assertEquals(1, threads.get(leaderThread).seq);
+
+ ((ClientThread) seqToThread.get(4)).close();
+ ((ClientThread) seqToThread.get(1)).close();
+ ((ClientThread) seqToThread.get(3)).close();
+
+ // whoever the leader is, should be the n_2 seq
+
+ waitForLeader(threads, 2);
+
+ leaderThread = getLeaderThread();
+ assertEquals(2, threads.get(leaderThread).seq);
+
+ // kill n_5, 2, 6, 7, and 8
+ ((ClientThread) seqToThread.get(5)).close();
+ ((ClientThread) seqToThread.get(2)).close();
+ ((ClientThread) seqToThread.get(6)).close();
+ ((ClientThread) seqToThread.get(7)).close();
+ ((ClientThread) seqToThread.get(8)).close();
+
+ waitForLeader(threads, 9);
+ leaderThread = getLeaderThread();
+
+ // whoever the leader is, should be the n_9 seq
+ assertEquals(9, threads.get(leaderThread).seq);
+
+ } finally {
+ // cleanup any threads still running
+ for (ClientThread thread : threads) {
+ thread.close();
+ thread.interrupt();
+
+ }
+
+ for (Thread thread : threads) {
+ thread.join();
}
- Thread.sleep(100);
- }
-
- int leaderThread = getLeaderThread();
-
- // whoever the leader is, should be the n_0 seq
- assertEquals(0, threads.get(leaderThread).seq);
-
- // kill n_0, 1, 3 and 4
- ((ClientThread) seqToThread.get(0)).close();
-
- waitForLeader(threads, 1);
-
- leaderThread = getLeaderThread();
-
- // whoever the leader is, should be the n_1 seq
-
- assertEquals(1, threads.get(leaderThread).seq);
-
- ((ClientThread) seqToThread.get(4)).close();
- ((ClientThread) seqToThread.get(1)).close();
- ((ClientThread) seqToThread.get(3)).close();
-
- // whoever the leader is, should be the n_2 seq
-
- waitForLeader(threads, 2);
-
- leaderThread = getLeaderThread();
- assertEquals(2, threads.get(leaderThread).seq);
-
- // kill n_5, 2, 6, 7, and 8
- ((ClientThread) seqToThread.get(5)).close();
- ((ClientThread) seqToThread.get(2)).close();
- ((ClientThread) seqToThread.get(6)).close();
- ((ClientThread) seqToThread.get(7)).close();
- ((ClientThread) seqToThread.get(8)).close();
-
- waitForLeader(threads, 9);
- leaderThread = getLeaderThread();
-
- // whoever the leader is, should be the n_9 seq
- assertEquals(9, threads.get(leaderThread).seq);
-
- // cleanup any threads still running
- for (ClientThread thread : threads) {
- thread.close();
- thread.interrupt();
- }
-
- for (Thread thread : threads) {
- thread.join();
}
}
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java Fri Sep 21 17:21:34 2012
@@ -22,9 +22,7 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
-import java.util.Random;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -41,7 +39,6 @@ import org.apache.solr.common.cloud.Slic
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
-import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.handler.component.HttpShardHandlerFactory;
import org.apache.solr.util.DefaultSolrThreadFactory;
import org.apache.zookeeper.CreateMode;
@@ -95,16 +92,12 @@ public class OverseerTest extends SolrTe
}
}
- public void close(){
- try {
- deleteNode(ZkStateReader.LIVE_NODES_ZKNODE + "/" + nodeName);
- zkClient.close();
- } catch (InterruptedException e) {
- //e.printStackTrace();
- }
+ public void close() {
+ deleteNode(ZkStateReader.LIVE_NODES_ZKNODE + "/" + nodeName);
+ zkClient.close();
}
- public void publishState(String coreName, String stateName, int numShards)
+ public String publishState(String coreName, String stateName, int numShards)
throws KeeperException, InterruptedException, IOException {
if (stateName == null) {
ElectionContext ec = electionContext.remove(coreName);
@@ -131,7 +124,7 @@ public class OverseerTest extends SolrTe
q.offer(ZkStateReader.toJSON(m));
}
- for (int i = 0; i < 30; i++) {
+ for (int i = 0; i < 120; i++) {
String shardId = getShardId(coreName);
if (shardId != null) {
try {
@@ -147,10 +140,11 @@ public class OverseerTest extends SolrTe
elector, shardId, collection, nodeName + "_" + coreName, props,
zkStateReader);
elector.joinElection(ctx);
- break;
+ return shardId;
}
- Thread.sleep(200);
+ Thread.sleep(500);
}
+ return null;
}
private String getShardId(final String coreName) {
@@ -158,7 +152,7 @@ public class OverseerTest extends SolrTe
collection);
if (slices != null) {
for (Slice slice : slices.values()) {
- if (slice.getShards().containsKey(nodeName + "_" + coreName)) {
+ if (slice.getReplicasMap().containsKey(nodeName + "_" + coreName)) {
return slice.getName();
}
}
@@ -169,14 +163,13 @@ public class OverseerTest extends SolrTe
@BeforeClass
public static void beforeClass() throws Exception {
- System.setProperty("solrcloud.skip.autorecovery", "true");
initCore();
}
@AfterClass
public static void afterClass() throws Exception {
- System.clearProperty("solrcloud.skip.autorecovery");
initCore();
+ Thread.sleep(3000); //XXX wait for threads to die...
}
@Test
@@ -186,53 +179,34 @@ public class OverseerTest extends SolrTe
ZkTestServer server = new ZkTestServer(zkDir);
- ZkController zkController = null;
+ MockZKController zkController = null;
SolrZkClient zkClient = null;
+ SolrZkClient overseerClient = null;
+
try {
server.run();
AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
-
+
zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
zkClient.makePath(ZkStateReader.LIVE_NODES_ZKNODE, true);
+ overseerClient = electNewOverseer(server.getZkAddress());
+
ZkStateReader reader = new ZkStateReader(zkClient);
reader.createClusterStateWatchersAndUpdate();
-
- zkController = new ZkController(null, server.getZkAddress(), TIMEOUT, 10000,
- "localhost", "8983", "solr", new CurrentCoreDescriptorProvider() {
-
- @Override
- public List<CoreDescriptor> getCurrentDescriptors() {
- // do nothing
- return null;
- }
- });
-
- System.setProperty("bootstrap_confdir", getFile("solr/collection1/conf")
- .getAbsolutePath());
+
+ zkController = new MockZKController(server.getZkAddress(), "127.0.0.1", "collection1");
final int numShards=6;
- final String[] ids = new String[numShards];
for (int i = 0; i < numShards; i++) {
- CloudDescriptor collection1Desc = new CloudDescriptor();
- collection1Desc.setNumShards(3);
- collection1Desc.setCollectionName("collection1");
- CoreDescriptor desc1 = new CoreDescriptor(null, "core" + (i + 1), "");
- desc1.setCloudDescriptor(collection1Desc);
- zkController.preRegister(desc1);
- ids[i] = zkController.register("core" + (i + 1), desc1);
+ assertNotNull("shard got no id?", zkController.publishState("core" + (i+1), ZkStateReader.ACTIVE, 3));
}
-
- assertEquals("shard1", ids[0]);
- assertEquals("shard2", ids[1]);
- assertEquals("shard3", ids[2]);
- assertEquals("shard1", ids[3]);
- assertEquals("shard2", ids[4]);
- assertEquals("shard3", ids[5]);
- waitForCollections(reader, "collection1");
+ assertEquals(2, reader.getClusterState().getSlice("collection1", "shard1").getReplicasMap().size());
+ assertEquals(2, reader.getClusterState().getSlice("collection1", "shard2").getReplicasMap().size());
+ assertEquals(2, reader.getClusterState().getSlice("collection1", "shard3").getReplicasMap().size());
//make sure leaders are in cloud state
assertNotNull(reader.getLeaderUrl("collection1", "shard1", 15000));
@@ -240,7 +214,6 @@ public class OverseerTest extends SolrTe
assertNotNull(reader.getLeaderUrl("collection1", "shard3", 15000));
} finally {
- System.clearProperty("bootstrap_confdir");
if (DEBUG) {
if (zkController != null) {
zkClient.printLayoutToStdOut();
@@ -250,6 +223,7 @@ public class OverseerTest extends SolrTe
if (zkController != null) {
zkController.close();
}
+ close(overseerClient);
server.shutdown();
}
}
@@ -265,10 +239,11 @@ public class OverseerTest extends SolrTe
ZkTestServer server = new ZkTestServer(zkDir);
- System.setProperty(ZkStateReader.NUM_SHARDS_PROP, Integer.toString(sliceCount));
SolrZkClient zkClient = null;
ZkStateReader reader = null;
- final ZkController[] controllers = new ZkController[nodeCount];
+ SolrZkClient overseerClient = null;
+
+ final MockZKController[] controllers = new MockZKController[nodeCount];
final ExecutorService[] nodeExecutors = new ExecutorService[nodeCount];
try {
server.run();
@@ -277,27 +252,15 @@ public class OverseerTest extends SolrTe
zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
zkClient.makePath(ZkStateReader.LIVE_NODES_ZKNODE, true);
+
+ overseerClient = electNewOverseer(server.getZkAddress());
reader = new ZkStateReader(zkClient);
reader.createClusterStateWatchersAndUpdate();
for (int i = 0; i < nodeCount; i++) {
-
- controllers[i] = new ZkController(null, server.getZkAddress(), TIMEOUT, 10000,
- "localhost", "898" + i, "solr", new CurrentCoreDescriptorProvider() {
-
- @Override
- public List<CoreDescriptor> getCurrentDescriptors() {
- // do nothing
- return null;
- }
- });
- }
-
- System.setProperty("bootstrap_confdir", getFile("solr/collection1/conf")
- .getAbsolutePath());
-
-
+ controllers[i] = new MockZKController(server.getZkAddress(), "node" + i, "collection1");
+ }
for (int i = 0; i < nodeCount; i++) {
nodeExecutors[i] = Executors.newFixedThreadPool(1, new DefaultSolrThreadFactory("testShardAssignment"));
}
@@ -309,18 +272,11 @@ public class OverseerTest extends SolrTe
Runnable coreStarter = new Runnable() {
@Override
public void run() {
- final CloudDescriptor collection1Desc = new CloudDescriptor();
- collection1Desc.setCollectionName("collection1");
- collection1Desc.setNumShards(sliceCount);
final String coreName = "core" + slot;
- final CoreDescriptor desc = new CoreDescriptor(null, coreName, "");
- desc.setCloudDescriptor(collection1Desc);
try {
- controllers[slot % nodeCount].preRegister(desc);
- ids[slot] = controllers[slot % nodeCount]
- .register(coreName, desc);
+ ids[slot]=controllers[slot % nodeCount].publishState(coreName, ZkStateReader.ACTIVE, sliceCount);
} catch (Throwable e) {
e.printStackTrace();
fail("register threw exception:" + e.getClass());
@@ -340,21 +296,25 @@ public class OverseerTest extends SolrTe
}
// make sure all cores have been assigned a id in cloudstate
+ int cloudStateSliceCount = 0;
for (int i = 0; i < 40; i++) {
+ cloudStateSliceCount = 0;
reader.updateClusterState(true);
ClusterState state = reader.getClusterState();
Map<String,Slice> slices = state.getSlices("collection1");
- int count = 0;
for (String name : slices.keySet()) {
- count += slices.get(name).getShards().size();
+ cloudStateSliceCount += slices.get(name).getReplicasMap().size();
}
- if (coreCount == count) break;
+ if (coreCount == cloudStateSliceCount) break;
Thread.sleep(200);
}
+ assertEquals("Unable to verify all cores have been assigned an id in cloudstate",
+ coreCount, cloudStateSliceCount);
- // make sure all cores have been returned a id
+ // make sure all cores have been returned an id
+ int assignedCount = 0;
for (int i = 0; i < 90; i++) {
- int assignedCount = 0;
+ assignedCount = 0;
for (int j = 0; j < coreCount; j++) {
if (ids[j] != null) {
assignedCount++;
@@ -365,6 +325,8 @@ public class OverseerTest extends SolrTe
}
Thread.sleep(500);
}
+ assertEquals("Unable to verify all cores have been returned an id",
+ coreCount, assignedCount);
final HashMap<String, AtomicInteger> counters = new HashMap<String,AtomicInteger>();
for (int i = 1; i < sliceCount+1; i++) {
@@ -390,18 +352,17 @@ public class OverseerTest extends SolrTe
//make sure leaders are in cloud state
for (int i = 0; i < sliceCount; i++) {
- assertNotNull(reader.getLeaderUrl("collection1", "shard" + (i + 1)), 15000);
+ assertNotNull(reader.getLeaderUrl("collection1", "shard" + (i + 1), 15000));
}
} finally {
- System.clearProperty(ZkStateReader.NUM_SHARDS_PROP);
- System.clearProperty("bootstrap_confdir");
if (DEBUG) {
if (controllers[0] != null) {
zkClient.printLayoutToStdOut();
}
}
close(zkClient);
+ close(overseerClient);
close(reader);
for (int i = 0; i < controllers.length; i++)
if (controllers[i] != null) {
@@ -474,8 +435,8 @@ public class OverseerTest extends SolrTe
waitForCollections(reader, "collection1");
assertEquals(reader.getClusterState().toString(), ZkStateReader.RECOVERING,
- reader.getClusterState().getSlice("collection1", "shard1").getShards()
- .get("node1_core1").get(ZkStateReader.STATE_PROP));
+ reader.getClusterState().getSlice("collection1", "shard1").getReplicasMap()
+ .get("node1_core1").getStr(ZkStateReader.STATE_PROP));
//publish node state (active)
m = new ZkNodeProps(Overseer.QUEUE_OPERATION, "state",
@@ -506,7 +467,7 @@ public class OverseerTest extends SolrTe
while(maxIterations-->0) {
Slice slice = reader.getClusterState().getSlice("collection1", "shard1");
if(slice!=null) {
- coreState = slice.getShards().get("node1_core1").get(ZkStateReader.STATE_PROP);
+ coreState = slice.getReplicasMap().get("node1_core1").getStr(ZkStateReader.STATE_PROP);
if(coreState.equals(expectedState)) {
return;
}
@@ -522,14 +483,14 @@ public class OverseerTest extends SolrTe
reader.updateClusterState(true); // poll state
ZkNodeProps props = reader.getClusterState().getLeader(collection, shard);
if(props!=null) {
- if(expectedCore.equals(props.get(ZkStateReader.CORE_NAME_PROP))) {
+ if(expectedCore.equals(props.getStr(ZkStateReader.CORE_NAME_PROP))) {
return;
}
}
Thread.sleep(100);
}
- assertEquals("Unexpected shard leader coll:" + collection + " shard:" + shard, expectedCore, (reader.getClusterState().getLeader(collection, shard)!=null)?reader.getClusterState().getLeader(collection, shard).get(ZkStateReader.CORE_NAME_PROP):null);
+ assertEquals("Unexpected shard leader coll:" + collection + " shard:" + shard, expectedCore, (reader.getClusterState().getLeader(collection, shard)!=null)?reader.getClusterState().getLeader(collection, shard).getStr(ZkStateReader.CORE_NAME_PROP):null);
}
@Test
@@ -586,7 +547,7 @@ public class OverseerTest extends SolrTe
assertEquals("Live nodes count does not match", 1, reader.getClusterState()
.getLiveNodes().size());
assertEquals("Shard count does not match", 1, reader.getClusterState()
- .getSlice("collection1", "shard1").getShards().size());
+ .getSlice("collection1", "shard1").getReplicasMap().size());
version = getClusterStateVersion(controllerClient);
mockController.publishState("core1", null,1);
while(version == getClusterStateVersion(controllerClient));
@@ -618,7 +579,6 @@ public class OverseerTest extends SolrTe
public void run() {
try {
overseerClient = electNewOverseer(zkAddress);
- Random rnd = random();
while (run) {
if (killCounter.get()>0) {
try {
@@ -754,7 +714,7 @@ public class OverseerTest extends SolrTe
int numFound = 0;
for (Map<String,Slice> collection : state.getCollectionStates().values()) {
for (Slice slice : collection.values()) {
- if (slice.getShards().get("node1_core1") != null) {
+ if (slice.getReplicasMap().get("node1_core1") != null) {
numFound++;
}
}
@@ -874,11 +834,11 @@ public class OverseerTest extends SolrTe
for(int i=0;i<100;i++) {
Slice s = reader.getClusterState().getSlice("collection1", "s1");
- if(s!=null && s.getShards().size()==3) break;
+ if(s!=null && s.getReplicasMap().size()==3) break;
Thread.sleep(100);
}
assertNotNull(reader.getClusterState().getSlice("collection1", "s1"));
- assertEquals(3, reader.getClusterState().getSlice("collection1", "s1").getShards().size());
+ assertEquals(3, reader.getClusterState().getSlice("collection1", "s1").getReplicasMap().size());
} finally {
close(overseerClient);
close(zkClient);
@@ -893,9 +853,9 @@ public class OverseerTest extends SolrTe
}
}
- private void close(SolrZkClient overseerClient) throws InterruptedException {
- if (overseerClient != null) {
- overseerClient.close();
+ private void close(SolrZkClient client) throws InterruptedException {
+ if (client != null) {
+ client.close();
}
}
@@ -920,4 +880,4 @@ public class OverseerTest extends SolrTe
return zkClient;
}
-}
\ No newline at end of file
+}
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/TestHashPartitioner.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/TestHashPartitioner.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/TestHashPartitioner.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/TestHashPartitioner.java Fri Sep 21 17:21:34 2012
@@ -27,18 +27,39 @@ public class TestHashPartitioner extends
public void testMapHashes() throws Exception {
HashPartitioner hp = new HashPartitioner();
-
- for (int i = 1; i <= 30000; i++) {
- List<Range> ranges = hp.partitionRange(i);
-
+ List<Range> ranges;
+
+ // make sure the partitioner uses the "natural" boundaries and doesn't suffer from an off-by-one
+ ranges = hp.partitionRange(2, hp.fullRange());
+ assertEquals(Integer.MIN_VALUE, ranges.get(0).min);
+ assertEquals(0x80000000, ranges.get(0).min);
+ assertEquals(0xffffffff, ranges.get(0).max);
+ assertEquals(0x00000000, ranges.get(1).min);
+ assertEquals(0x7fffffff, ranges.get(1).max);
+
+ ranges = hp.partitionRange(2, 0, 0x7fffffff);
+ assertEquals(0x00000000, ranges.get(0).min);
+ assertEquals(0x3fffffff, ranges.get(0).max);
+ assertEquals(0x40000000, ranges.get(1).min);
+ assertEquals(0x7fffffff, ranges.get(1).max);
+
+ for (int i = 1; i <= 30000; i += 13) {
+ ranges = hp.partitionRange(i, hp.fullRange());
assertEquals(i, ranges.size());
-
assertTrue("First range does not start before " + Integer.MIN_VALUE
+ " it is:" + ranges.get(0).min,
ranges.get(0).min <= Integer.MIN_VALUE);
assertTrue("Last range does not end after " + Integer.MAX_VALUE
+ " it is:" + ranges.get(ranges.size() - 1).max,
ranges.get(ranges.size() - 1).max >= Integer.MAX_VALUE);
+
+ for (Range range : ranges) {
+ String s = range.toString();
+ Range newRange = hp.fromString(s);
+ assertEquals(range, newRange);
+ }
+
+
}
}
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/TestMultiCoreConfBootstrap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/TestMultiCoreConfBootstrap.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/TestMultiCoreConfBootstrap.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/TestMultiCoreConfBootstrap.java Fri Sep 21 17:21:34 2012
@@ -25,9 +25,7 @@ import org.apache.solr.core.CoreContaine
import org.apache.solr.util.AbstractSolrTestCase;
import org.apache.solr.util.ExternalPaths;
import org.junit.After;
-import org.junit.AfterClass;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,27 +34,25 @@ public class TestMultiCoreConfBootstrap
protected static Logger log = LoggerFactory.getLogger(TestMultiCoreConfBootstrap.class);
protected CoreContainer cores = null;
private String home;
-
- protected static ZkTestServer zkServer;
- protected static String zkDir;
-
- @BeforeClass
- public static void beforeClass() {
- createTempDir();
- }
- @AfterClass
- public static void afterClass() {
- zkServer = null;
- zkDir = null;
- }
+ protected File dataDir2;
+ protected ZkTestServer zkServer;
+ protected String zkDir;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
+
+ createTempDir();
+ dataDir2 = new File(TEMP_DIR, getSimpleClassName() + "-core1-"
+ + System.currentTimeMillis());
+ dataDir2.mkdirs();
+
home = ExternalPaths.EXAMPLE_MULTICORE_HOME;
System.setProperty("solr.solr.home", home);
+ System.setProperty( "solr.core0.data.dir", dataDir.getCanonicalPath() );
+ System.setProperty( "solr.core1.data.dir", dataDir2.getCanonicalPath() );
zkDir = dataDir.getAbsolutePath() + File.separator
+ "zookeeper/server1/data";
@@ -82,14 +78,11 @@ public class TestMultiCoreConfBootstrap
zkServer.shutdown();
- File dataDir1 = new File(home + File.separator + "core0","data");
- File dataDir2 = new File(home + File.separator + "core1","data");
-
String skip = System.getProperty("solr.test.leavedatadir");
if (null != skip && 0 != skip.trim().length()) {
log.info("NOTE: per solr.test.leavedatadir, dataDir will not be removed: " + dataDir.getAbsolutePath());
} else {
- if (!AbstractSolrTestCase.recurseDelete(dataDir1)) {
+ if (!AbstractSolrTestCase.recurseDelete(dataDir)) {
log.warn("!!!! WARNING: best effort to remove " + dataDir.getAbsolutePath() + " FAILED !!!!!");
}
if (!AbstractSolrTestCase.recurseDelete(dataDir2)) {
@@ -97,6 +90,9 @@ public class TestMultiCoreConfBootstrap
}
}
+ zkServer = null;
+ zkDir = null;
+
super.tearDown();
}
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkCLITest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkCLITest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkCLITest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkCLITest.java Fri Sep 21 17:21:34 2012
@@ -20,7 +20,6 @@ package org.apache.solr.cloud;
import java.io.File;
import java.util.List;
-import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
@@ -136,7 +135,7 @@ public class ZkCLITest extends SolrTestC
ZkNodeProps collectionProps = ZkNodeProps.load(zkClient.getData(ZkStateReader.COLLECTIONS_ZKNODE + "/collection1", null, null, true));
assertTrue(collectionProps.containsKey("configName"));
- assertEquals(confsetname, collectionProps.get("configName"));
+ assertEquals(confsetname, collectionProps.getStr("configName"));
// test down config
File confDir = new File(TEMP_DIR,
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java Fri Sep 21 17:21:34 2012
@@ -22,13 +22,12 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import junit.framework.Assert;
-
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.util.ExternalPaths;
import org.apache.zookeeper.CreateMode;
@@ -54,6 +53,7 @@ public class ZkControllerTest extends So
public void testReadConfigName() throws Exception {
String zkDir = dataDir.getAbsolutePath() + File.separator
+ "zookeeper/server1/data";
+ CoreContainer cc = null;
ZkTestServer server = new ZkTestServer(zkDir);
try {
@@ -67,7 +67,7 @@ public class ZkControllerTest extends So
zkClient.makePath(ZkController.CONFIGS_ZKNODE + "/" + actualConfigName, true);
- Map<String,String> props = new HashMap<String,String>();
+ Map<String,Object> props = new HashMap<String,Object>();
props.put("configName", actualConfigName);
ZkNodeProps zkProps = new ZkNodeProps(props);
zkClient.makePath(ZkStateReader.COLLECTIONS_ZKNODE + "/"
@@ -78,8 +78,11 @@ public class ZkControllerTest extends So
zkClient.printLayoutToStdOut();
}
zkClient.close();
- ZkController zkController = new ZkController(null, server.getZkAddress(), TIMEOUT, 10000,
- "localhost", "8983", "solr", new CurrentCoreDescriptorProvider() {
+
+ cc = getCoreContainer();
+
+ ZkController zkController = new ZkController(cc, server.getZkAddress(), TIMEOUT, 10000,
+ "127.0.0.1", "8983", "solr", new CurrentCoreDescriptorProvider() {
@Override
public List<CoreDescriptor> getCurrentDescriptors() {
@@ -94,7 +97,9 @@ public class ZkControllerTest extends So
zkController.close();
}
} finally {
-
+ if (cc != null) {
+ cc.shutdown();
+ }
server.shutdown();
}
@@ -108,13 +113,16 @@ public class ZkControllerTest extends So
ZkTestServer server = new ZkTestServer(zkDir);
ZkController zkController = null;
boolean testFinished = false;
+ CoreContainer cc = null;
try {
server.run();
AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
- zkController = new ZkController(null, server.getZkAddress(),
- TIMEOUT, 10000, "localhost", "8983", "solr", new CurrentCoreDescriptorProvider() {
+ cc = getCoreContainer();
+
+ zkController = new ZkController(cc, server.getZkAddress(),
+ TIMEOUT, 10000, "127.0.0.1", "8983", "solr", new CurrentCoreDescriptorProvider() {
@Override
public List<CoreDescriptor> getCurrentDescriptors() {
@@ -142,109 +150,16 @@ public class ZkControllerTest extends So
if (zkController != null) {
zkController.close();
}
+ if (cc != null) {
+ cc.shutdown();
+ }
server.shutdown();
}
}
-
- @Test
- public void testCoreUnload() throws Exception {
-
- String zkDir = dataDir.getAbsolutePath() + File.separator
- + "zookeeper/server1/data";
-
- ZkTestServer server = new ZkTestServer(zkDir);
-
- ZkController zkController = null;
- SolrZkClient zkClient = null;
- try {
- server.run();
- AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
- AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
-
- zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
- zkClient.makePath(ZkStateReader.LIVE_NODES_ZKNODE, true);
-
- ZkStateReader reader = new ZkStateReader(zkClient);
- reader.createClusterStateWatchersAndUpdate();
-
- System.setProperty(ZkStateReader.NUM_SHARDS_PROP, "1");
- System.setProperty("solrcloud.skip.autorecovery", "true");
-
- zkController = new ZkController(null, server.getZkAddress(), TIMEOUT,
- 10000, "localhost", "8983", "solr",
- new CurrentCoreDescriptorProvider() {
-
- @Override
- public List<CoreDescriptor> getCurrentDescriptors() {
- // do nothing
- return null;
- }
- });
-
- System.setProperty("bootstrap_confdir", getFile("solr/collection1/conf")
- .getAbsolutePath());
-
- final int numShards = 2;
- final String[] ids = new String[numShards];
-
- for (int i = 0; i < numShards; i++) {
- CloudDescriptor collection1Desc = new CloudDescriptor();
- collection1Desc.setCollectionName("collection1");
- CoreDescriptor desc1 = new CoreDescriptor(null, "core" + (i + 1), "");
- desc1.setCloudDescriptor(collection1Desc);
- zkController.preRegister(desc1);
- ids[i] = zkController.register("core" + (i + 1), desc1);
- }
-
- assertEquals("shard1", ids[0]);
- assertEquals("shard1", ids[1]);
-
- assertNotNull(reader.getLeaderUrl("collection1", "shard1", 15000));
-
- assertEquals("Shard(s) missing from cloudstate", 2, zkController.getZkStateReader().getClusterState().getSlice("collection1", "shard1").getShards().size());
-
- // unregister current leader
- final ZkNodeProps shard1LeaderProps = reader.getLeaderProps(
- "collection1", "shard1");
- final String leaderUrl = reader.getLeaderUrl("collection1", "shard1",
- 15000);
-
- final CloudDescriptor collection1Desc = new CloudDescriptor();
- collection1Desc.setCollectionName("collection1");
- final CoreDescriptor desc1 = new CoreDescriptor(null,
- shard1LeaderProps.get(ZkStateReader.CORE_NAME_PROP), "");
- desc1.setCloudDescriptor(collection1Desc);
- zkController.unregister(
- shard1LeaderProps.get(ZkStateReader.CORE_NAME_PROP), collection1Desc);
- assertNotSame(
- "New leader was not promoted after unregistering the current leader.",
- leaderUrl, reader.getLeaderUrl("collection1", "shard1", 15000));
- assertNotNull("New leader was null.",
- reader.getLeaderUrl("collection1", "shard1", 15000));
-
- for(int i=0;i<30;i++) {
- if(zkController.getZkStateReader().getClusterState().getSlice("collection1", "shard1").getShards().size()==1) break;
- Thread.sleep(500);
- }
- assertEquals("shard was not unregistered", 1, zkController.getZkStateReader().getClusterState().getSlice("collection1", "shard1").getShards().size());
- } finally {
- System.clearProperty("solrcloud.skip.autorecovery");
- System.clearProperty(ZkStateReader.NUM_SHARDS_PROP);
- System.clearProperty("bootstrap_confdir");
- if (DEBUG) {
- if (zkController != null) {
- zkClient.printLayoutToStdOut();
- }
- }
- if (zkClient != null) {
- zkClient.close();
- }
- if (zkController != null) {
- zkController.close();
- }
- server.shutdown();
- }
+
+ private CoreContainer getCoreContainer() {
+ return new CoreContainer(TEMP_DIR.getAbsolutePath());
}
@Override
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java Fri Sep 21 17:21:34 2012
@@ -30,7 +30,7 @@ public class ZkNodePropsTest extends Sol
@Test
public void testBasic() throws IOException {
- Map<String,String> props = new HashMap<String,String>();
+ Map<String,Object> props = new HashMap<String,Object>();
props.put("prop1", "value1");
props.put("prop2", "value2");
props.put("prop3", "value3");
@@ -42,11 +42,11 @@ public class ZkNodePropsTest extends Sol
byte[] bytes = ZkStateReader.toJSON(zkProps);
ZkNodeProps props2 = ZkNodeProps.load(bytes);
- assertEquals("value1", props2.get("prop1"));
- assertEquals("value2", props2.get("prop2"));
- assertEquals("value3", props2.get("prop3"));
- assertEquals("value4", props2.get("prop4"));
- assertEquals("value5", props2.get("prop5"));
- assertEquals("value6", props2.get("prop6"));
+ assertEquals("value1", props2.getStr("prop1"));
+ assertEquals("value2", props2.getStr("prop2"));
+ assertEquals("value3", props2.getStr("prop3"));
+ assertEquals("value4", props2.getStr("prop4"));
+ assertEquals("value5", props2.getStr("prop5"));
+ assertEquals("value6", props2.getStr("prop6"));
}
}
Modified: lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkSolrClientTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkSolrClientTest.java?rev=1388574&r1=1388573&r2=1388574&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkSolrClientTest.java (original)
+++ lucene/dev/branches/LUCENE-2878/solr/core/src/test/org/apache/solr/cloud/ZkSolrClientTest.java Fri Sep 21 17:21:34 2012
@@ -18,6 +18,8 @@ package org.apache.solr.cloud;
*/
import java.io.File;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.atomic.AtomicInteger;
import junit.framework.Assert;
@@ -172,6 +174,7 @@ public class ZkSolrClientTest extends Ab
AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
final SolrZkClient zkClient = new SolrZkClient(server.getZkAddress(), AbstractZkTestCase.TIMEOUT);
try {
+ final CountDownLatch latch = new CountDownLatch(1);
zkClient.makePath("/collections", true);
zkClient.getChildren("/collections", new Watcher() {
@@ -184,6 +187,7 @@ public class ZkSolrClientTest extends Ab
// remake watch
try {
zkClient.getChildren("/collections", this, true);
+ latch.countDown();
} catch (KeeperException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
@@ -193,6 +197,7 @@ public class ZkSolrClientTest extends Ab
}, true);
zkClient.makePath("/collections/collection99/shards", true);
+ latch.await(); //wait until watch has been re-created
zkClient.makePath("collections/collection99/config=collection1", true);