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);