You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2014/12/01 18:25:47 UTC

svn commit: r1642718 [11/12] - in /lucene/dev/branches/lucene2878: ./ dev-tools/ dev-tools/eclipse/dot.settings/ dev-tools/idea/.idea/ dev-tools/idea/lucene/benchmark/src/ dev-tools/idea/lucene/highlighter/ dev-tools/maven/ dev-tools/maven/solr/webapp/...

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-schemaless.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-schemaless.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-schemaless.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-schemaless.xml Mon Dec  1 17:25:39 2014
@@ -39,21 +39,14 @@
     <bool name="httpCaching">true</bool>
   </requestHandler>
 
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
+
   <requestHandler name="/update" class="solr.UpdateRequestHandler">
     <lst name="defaults">
       <str name="update.chain">add-unknown-fields-to-the-schema</str>
     </lst>
   </requestHandler>
 
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
-
-  <!-- Add unknown fields to the schema 
+  <!-- Add unknown fields to the schema
   
        An example field type guessing update processor that will
        attempt to parse string-typed field values as Booleans, Longs,

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave.xml Mon Dec  1 17:25:39 2014
@@ -40,8 +40,6 @@
   <requestHandler name="lazy" class="solr.StandardRequestHandler" startup="lazy">
   </requestHandler>
 
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
   <requestHandler name="/replication" class="solr.ReplicationHandler">
 	<lst name="slave">
 		<str name="masterUrl">http://127.0.0.1:TEST_PORT/solr</str>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave1.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave1.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave1.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-slave1.xml Mon Dec  1 17:25:39 2014
@@ -40,11 +40,6 @@
   <requestHandler name="lazy" class="solr.StandardRequestHandler" startup="lazy">
   </requestHandler>
 
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
-  <requestHandler name="/replication" class="solr.ReplicationHandler">
-
-  </requestHandler>
 
   <!-- enable streaming for testing... -->
   <requestDispatcher handleSelect="true">

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog-with-delayingcomponent.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog-with-delayingcomponent.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog-with-delayingcomponent.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog-with-delayingcomponent.xml Mon Dec  1 17:25:39 2014
@@ -46,16 +46,6 @@
   <requestHandler name="standard" class="solr.StandardRequestHandler">
   </requestHandler>
 
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
-
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
-
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
   <updateHandler class="solr.DirectUpdateHandler2">
     <updateLog>
       <str name="dir">${solr.ulog.dir:}</str>
@@ -85,8 +75,6 @@
     <processor class="solr.RunUpdateProcessorFactory" />
   </updateRequestProcessorChain>
 
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
   <requestHandler name="/admin/file" class="solr.admin.ShowFileRequestHandler" >
     <lst name="invariants">
       <str name="hidden">bogus.txt</str>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tlog.xml Mon Dec  1 17:25:39 2014
@@ -46,16 +46,6 @@
   <requestHandler name="standard" class="solr.StandardRequestHandler">
   </requestHandler>
 
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
-  
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" /> 
-
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
   <updateHandler class="solr.DirectUpdateHandler2">
     <updateLog>
       <str name="dir">${solr.ulog.dir:}</str>
@@ -85,7 +75,6 @@
     <processor class="solr.RunUpdateProcessorFactory" />
   </updateRequestProcessorChain>
 
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
 
   <requestHandler name="/admin/file" class="solr.admin.ShowFileRequestHandler" >
     <lst name="invariants">

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tolerant-search.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tolerant-search.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tolerant-search.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-tolerant-search.xml Mon Dec  1 17:25:39 2014
@@ -48,10 +48,5 @@
 	
 	<queryResponseWriter name="javabin"
                        class="solr.TestTolerantSearch$BadResponseWriter" />
-
-	<requestHandler name="/admin/"
-		class="org.apache.solr.handler.admin.AdminHandlers" />
-
-	<requestHandler name="/update" class="solr.UpdateRequestHandler" />
 </config>
 

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-withgethandler.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-withgethandler.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-withgethandler.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-withgethandler.xml Mon Dec  1 17:25:39 2014
@@ -45,14 +45,7 @@
 
   </requestHandler>
 
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
+  <requestHandler name="/dump" class="solr.DumpRequestHandler">
   </requestHandler>
 </config>
 

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml Mon Dec  1 17:25:39 2014
@@ -190,8 +190,6 @@
   <queryResponseWriter name="xml" default="true"
                        class="solr.XMLResponseWriter" />
 
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" /> 
-
   <!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
        If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
        based HashBitset. -->
@@ -206,12 +204,6 @@
   	<bool name="httpCaching">true</bool>
   </requestHandler>
 
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-     <lst name="defaults">
-       <str name="omitHeader">true</str>
-     </lst>
-  </requestHandler>
-
   <requestHandler name="dismax" class="solr.SearchHandler" >
     <lst name="defaults">
      <str name="defType">dismax</str>
@@ -235,8 +227,6 @@
 
   <requestHandler name="mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler"/>
 
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
   <requestHandler name="/admin/file" class="solr.admin.ShowFileRequestHandler" >
     <lst name="invariants">
       <str name="hidden">bogus.txt</str>
@@ -267,7 +257,7 @@
     </lst>
   </requestHandler>
 
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
+
 
   <searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent">
     <!-- This is slightly different from the field value so we can test dealing with token offset changes -->

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig_perf.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig_perf.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig_perf.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig_perf.xml Mon Dec  1 17:25:39 2014
@@ -71,6 +71,4 @@
   <requestHandler name="standard" class="solr.SearchHandler" default="true">
   </requestHandler>
 
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-
 </config>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/MinimalSchemaTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/MinimalSchemaTest.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/MinimalSchemaTest.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/MinimalSchemaTest.java Mon Dec  1 17:25:39 2014
@@ -105,10 +105,14 @@ public class MinimalSchemaTest extends S
     Set<String> handlerNames = h.getCore().getRequestHandlers().keySet();
     for (String handler : handlerNames) {
       try {
-        if (handler.startsWith("/update")) {
-          continue;
-        }
-        if (handler.startsWith("/mlt")) {
+
+
+        if (handler.startsWith("/update") ||
+            handler.startsWith("/admin") ||
+            handler.startsWith("/schema") ||
+            handler.startsWith("/config") ||
+            handler.startsWith("/mlt")
+            ) {
           continue;
         }
 

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/DeleteShardTest.java Mon Dec  1 17:25:39 2014
@@ -21,6 +21,7 @@ import org.apache.solr.client.solrj.Solr
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.HttpSolrServer;
 import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.cloud.overseer.OverseerAction;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.Slice;
@@ -157,7 +158,7 @@ public class DeleteShardTest extends Abs
       KeeperException, InterruptedException {
     DistributedQueue inQueue = Overseer.getInQueue(cloudClient.getZkStateReader().getZkClient());
     Map<String, Object> propMap = new HashMap<>();
-    propMap.put(Overseer.QUEUE_OPERATION, Overseer.OverseerAction.UPDATESHARDSTATE.toLower());
+    propMap.put(Overseer.QUEUE_OPERATION, OverseerAction.UPDATESHARDSTATE.toLower());
     propMap.put(slice, state);
     propMap.put(ZkStateReader.COLLECTION_PROP, "collection1");
     ZkNodeProps m = new ZkNodeProps(propMap);

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java Mon Dec  1 17:25:39 2014
@@ -38,6 +38,7 @@ import org.apache.solr.client.solrj.Solr
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.CloudSolrServer;
 import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.cloud.overseer.OverseerAction;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
@@ -106,7 +107,7 @@ public class OverseerRolesTest  extends 
     Map m = (Map) ZkStateReader.fromJSON(data);
     String s = (String) m.get("id");
     String leader = LeaderElector.getNodeName(s);
-    Overseer.getInQueue(zk).offer(ZkStateReader.toJSON(new ZkNodeProps(Overseer.QUEUE_OPERATION, Overseer.OverseerAction.QUIT.toLower())));
+    Overseer.getInQueue(zk).offer(ZkStateReader.toJSON(new ZkNodeProps(Overseer.QUEUE_OPERATION, OverseerAction.QUIT.toLower())));
     long timeout = System.currentTimeMillis()+10000;
     String newLeader=null;
     for(;System.currentTimeMillis() < timeout;){

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java Mon Dec  1 17:25:39 2014
@@ -36,6 +36,7 @@ import javax.xml.parsers.ParserConfigura
 
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.cloud.overseer.OverseerAction;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
@@ -43,10 +44,14 @@ 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.common.params.CollectionParams;
 import org.apache.solr.handler.component.HttpShardHandlerFactory;
 import org.apache.solr.update.UpdateShardHandler;
 import org.apache.solr.util.DefaultSolrThreadFactory;
 import org.apache.solr.util.MockConfigSolr;
+import org.apache.solr.util.stats.Snapshot;
+import org.apache.solr.util.stats.Timer;
+import org.apache.solr.util.stats.TimerContext;
 import org.apache.zookeeper.CreateMode;
 import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.KeeperException.NoNodeException;
@@ -54,6 +59,7 @@ import org.apache.zookeeper.KeeperExcept
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.xml.sax.SAXException;
 
@@ -112,7 +118,7 @@ public class OverseerTest extends SolrTe
         if (ec != null) {
           ec.cancelElection();
         }
-        ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, Overseer.OverseerAction.DELETECORE.toLower(),
+        ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, OverseerAction.DELETECORE.toLower(),
             ZkStateReader.NODE_NAME_PROP, nodeName,
             ZkStateReader.CORE_NAME_PROP, coreName,
             ZkStateReader.CORE_NODE_NAME_PROP, coreNodeName,
@@ -121,7 +127,7 @@ public class OverseerTest extends SolrTe
             q.offer(ZkStateReader.toJSON(m));
          return null;
       } else {
-        ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, Overseer.OverseerAction.STATE.toLower(),
+        ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, OverseerAction.STATE.toLower(),
         ZkStateReader.STATE_PROP, stateName,
         ZkStateReader.NODE_NAME_PROP, nodeName,
         ZkStateReader.CORE_NAME_PROP, coreName,
@@ -525,7 +531,7 @@ public class OverseerTest extends SolrTe
 
       DistributedQueue q = Overseer.getInQueue(zkClient);
       
-      ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, Overseer.OverseerAction.STATE.toLower(),
+      ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, OverseerAction.STATE.toLower(),
           ZkStateReader.BASE_URL_PROP, "http://127.0.0.1/solr",
           ZkStateReader.NODE_NAME_PROP, "node1",
           ZkStateReader.COLLECTION_PROP, "collection1",
@@ -878,6 +884,135 @@ public class OverseerTest extends SolrTe
     }
   }
 
+  @Test
+  @Ignore
+  public void testPerformance() throws Exception {
+    String zkDir = createTempDir("OverseerTest.testPerformance").toFile().getAbsolutePath();
+
+    ZkTestServer server = new ZkTestServer(zkDir);
+
+    SolrZkClient controllerClient = null;
+    SolrZkClient overseerClient = null;
+    ZkStateReader reader = null;
+    MockZKController mockController = null;
+
+    try {
+      server.run();
+      controllerClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
+
+      AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
+      AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
+      controllerClient.makePath(ZkStateReader.LIVE_NODES_ZKNODE, true);
+
+      reader = new ZkStateReader(controllerClient);
+      reader.createClusterStateWatchersAndUpdate();
+
+      mockController = new MockZKController(server.getZkAddress(), "node1");
+
+      final int MAX_COLLECTIONS = 10, MAX_CORES = 10, MAX_STATE_CHANGES = 20000, STATE_FORMAT = 2;
+
+      for (int i=0; i<MAX_COLLECTIONS; i++)  {
+        ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, CollectionParams.CollectionAction.CREATE.toLower(),
+            "name", "perf" + i,
+            ZkStateReader.NUM_SHARDS_PROP, "1",
+            "stateFormat", String.valueOf(STATE_FORMAT),
+            ZkStateReader.REPLICATION_FACTOR, "1",
+            ZkStateReader.MAX_SHARDS_PER_NODE, "1"
+            );
+        DistributedQueue q = Overseer.getInQueue(controllerClient);
+        q.offer(ZkStateReader.toJSON(m));
+        controllerClient.makePath("/collections/perf" + i, true);
+      }
+
+      for (int i = 0, j = 0, k = 0; i < MAX_STATE_CHANGES; i++, j++, k++) {
+        ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, OverseerAction.STATE.toLower(),
+            ZkStateReader.STATE_PROP, ZkStateReader.RECOVERING,
+            ZkStateReader.NODE_NAME_PROP,  "node1",
+            ZkStateReader.CORE_NAME_PROP, "core" + k,
+            ZkStateReader.CORE_NODE_NAME_PROP, "node1",
+            ZkStateReader.COLLECTION_PROP, "perf" + j,
+            ZkStateReader.NUM_SHARDS_PROP, "1",
+            ZkStateReader.BASE_URL_PROP, "http://" +  "node1"
+            + "/solr/");
+        DistributedQueue q = Overseer.getInQueue(controllerClient);
+        q.offer(ZkStateReader.toJSON(m));
+        if (j >= MAX_COLLECTIONS - 1) j = 0;
+        if (k >= MAX_CORES - 1) k = 0;
+        if (i > 0 && i % 100 == 0) log.info("Published {} items", i);
+      }
+
+      // let's publish a sentinel collection which we'll use to wait for overseer to complete operations
+      ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, OverseerAction.STATE.toLower(),
+          ZkStateReader.STATE_PROP, ZkStateReader.ACTIVE,
+          ZkStateReader.NODE_NAME_PROP, "node1",
+          ZkStateReader.CORE_NAME_PROP, "core1",
+          ZkStateReader.CORE_NODE_NAME_PROP, "node1",
+          ZkStateReader.COLLECTION_PROP, "perf_sentinel",
+          ZkStateReader.NUM_SHARDS_PROP, "1",
+          ZkStateReader.BASE_URL_PROP, "http://" + "node1"
+          + "/solr/");
+      DistributedQueue q = Overseer.getInQueue(controllerClient);
+      q.offer(ZkStateReader.toJSON(m));
+
+      Timer t = new Timer();
+      TimerContext context = t.time();
+      try {
+        overseerClient = electNewOverseer(server.getZkAddress());
+        assertTrue(overseers.size() > 0);
+
+        while (true)  {
+          reader.updateClusterState(true);
+          ClusterState state = reader.getClusterState();
+          if (state.hasCollection("perf_sentinel")) {
+            break;
+          }
+          Thread.sleep(1000);
+        }
+      } finally {
+        context.stop();
+      }
+
+      log.info("Overseer loop finished processing: ");
+      printTimingStats(t);
+
+      Overseer overseer = overseers.get(0);
+      Overseer.Stats stats = overseer.getStats();
+
+      String[] interestingOps = {"state", "update_state", "am_i_leader", ""};
+      Arrays.sort(interestingOps);
+      for (Map.Entry<String, Overseer.Stat> entry : stats.getStats().entrySet()) {
+        String op = entry.getKey();
+        if (Arrays.binarySearch(interestingOps, op) < 0)
+          continue;
+        Overseer.Stat stat = entry.getValue();
+        log.info("op: {}, success: {}, failure: {}", op, stat.success.get(), stat.errors.get());
+        Timer timer = stat.requestTime;
+        printTimingStats(timer);
+      }
+
+    } finally {
+      close(overseerClient);
+      close(mockController);
+      close(controllerClient);
+      close(reader);
+      server.shutdown();
+    }
+  }
+
+  private void printTimingStats(Timer timer) {
+    Snapshot snapshot = timer.getSnapshot();
+    log.info("\t totalTime: {}", timer.getSum());
+    log.info("\t avgRequestsPerMinute: {}", timer.getMeanRate());
+    log.info("\t 5minRateRequestsPerMinute: {}", timer.getFiveMinuteRate());
+    log.info("\t 15minRateRequestsPerMinute: {}", timer.getFifteenMinuteRate());
+    log.info("\t avgTimePerRequest: {}", timer.getMean());
+    log.info("\t medianRequestTime: {}", snapshot.getMedian());
+    log.info("\t 75thPctlRequestTime: {}", snapshot.get75thPercentile());
+    log.info("\t 95thPctlRequestTime: {}", snapshot.get95thPercentile());
+    log.info("\t 99thPctlRequestTime: {}", snapshot.get99thPercentile());
+    log.info("\t 999thPctlRequestTime: {}", snapshot.get999thPercentile());
+  }
+
   private void close(MockZKController mockController) {
     if (mockController != null) {
       mockController.close();
@@ -928,7 +1063,7 @@ public class OverseerTest extends SolrTe
       
       //submit to proper queue
       queue = Overseer.getInQueue(zkClient);
-      m = new ZkNodeProps(Overseer.QUEUE_OPERATION, Overseer.OverseerAction.STATE.toLower(),
+      m = new ZkNodeProps(Overseer.QUEUE_OPERATION, OverseerAction.STATE.toLower(),
           ZkStateReader.BASE_URL_PROP, "http://127.0.0.1/solr",
           ZkStateReader.NODE_NAME_PROP, "node1",
           ZkStateReader.SHARD_ID_PROP, "s1",

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestConfig.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestConfig.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestConfig.java Mon Dec  1 17:25:39 2014
@@ -107,10 +107,6 @@ public class TestConfig extends SolrTest
     ShowFileRequestHandler handler = (ShowFileRequestHandler) h.getCore().getRequestHandler("/admin/file");
     assertTrue("file handler should have been automatically registered", handler != null);
 
-    //System.out.println( handler.getHiddenFiles() );
-    // should not contain: <gettableFiles>solrconfig.xml schema.xml admin-extra.html</gettableFiles>
-    assertFalse(handler.getHiddenFiles().contains("schema.xml".toUpperCase(Locale.ROOT)));
-    assertTrue(handler.getHiddenFiles().contains("PROTWORDS.TXT"));
   }
 
   // If defaults change, add test methods to cover each version

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestConfigSets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestConfigSets.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestConfigSets.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestConfigSets.java Mon Dec  1 17:25:39 2014
@@ -121,7 +121,7 @@ public class TestConfigSets extends Solr
     // We initially don't have a /get handler defined
     SolrCore core = container.create(new CoreDescriptor(container, "core1", testDirectory + "/core", "configSet", "configset-2"));
     assertThat("No /get handler should be defined in the initial configuration",
-        core.getRequestHandler("/get"), is(nullValue()));
+        core.getRequestHandler("/dump"), is(nullValue()));
 
     // Now copy in a config with a /get handler and reload
     FileUtils.copyFile(getFile("solr/collection1/conf/solrconfig-withgethandler.xml"),
@@ -130,7 +130,7 @@ public class TestConfigSets extends Solr
 
     core = container.getCore("core1");
     assertThat("A /get handler should be defined in the reloaded configuration",
-        core.getRequestHandler("/get"), is(notNullValue()));
+        core.getRequestHandler("/dump"), is(notNullValue()));
     core.close();
 
     container.shutdown();

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestInitParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestInitParams.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestInitParams.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestInitParams.java Mon Dec  1 17:25:39 2014
@@ -18,6 +18,7 @@ package org.apache.solr.core;
  */
 
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.response.SolrQueryResponse;
@@ -25,6 +26,9 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import java.util.Arrays;
+import java.util.HashMap;
+
+import static java.util.Collections.singletonMap;
 
 public class TestInitParams extends SolrTestCaseJ4 {
   @BeforeClass
@@ -46,6 +50,14 @@ public class TestInitParams extends Solr
       def = (NamedList) nl.get(PluginInfo.APPENDS);
       assertEquals("C", def.get("c"));
     }
+
+    InitParams initParams = h.getCore().getSolrConfig().getInitParams().get("a");
+
+    PluginInfo pluginInfo = new PluginInfo("requestHandler",
+        new HashMap<String, String>(),
+        new NamedList<>(singletonMap("defaults", new NamedList(ZkNodeProps.makeMap("a", "A1")))), null);
+    initParams.apply(pluginInfo);
+    assertEquals( "A",initParams.defaults.get("a"));
   }
 
   @Test

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java Mon Dec  1 17:25:39 2014
@@ -32,9 +32,9 @@ import javax.management.remote.JMXConnec
 import javax.management.remote.JMXConnectorFactory;
 import javax.management.remote.JMXServiceURL;
 import javax.management.remote.rmi.RMIConnectorServer;
+
 import java.io.IOException;
 import java.net.ServerSocket;
-import java.net.URL;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.server.RMIServerSocketFactory;
 import java.util.Set;
@@ -175,51 +175,4 @@ public class TestJmxMonitoredMap extends
 
   }
 
-  private class MockInfoMBean implements SolrInfoMBean {
-    @Override
-    public String getName() {
-      return "mock";
-    }
-
-    @Override
-    public Category getCategory() {
-      return Category.OTHER;
-    }
-
-    @Override
-    public String getDescription() {
-      return "mock";
-    }
-
-    @Override
-    public URL[] getDocs() {
-      // TODO Auto-generated method stub
-      return null;
-    }
-
-    @Override
-    public String getVersion() {
-      return "mock";
-    }
-
-    @Override
-    public String getSource() {
-      return "mock";
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public NamedList getStatistics() {
-      NamedList myList = new NamedList<Integer>();
-      myList.add("Integer", 123);
-      myList.add("Double",567.534);
-      myList.add("Long", 32352463l);
-      myList.add("Short", (short) 32768);
-      myList.add("Byte", (byte) 254);
-      myList.add("Float", 3.456f);
-      myList.add("String","testing");
-      return myList;
-    }
-  }
-
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/core/TestSolrConfigHandler.java Mon Dec  1 17:25:39 2014
@@ -19,15 +19,25 @@ package org.apache.solr.core;
 
 
 import java.io.File;
+import java.io.IOException;
 import java.io.StringReader;
-import java.util.List;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.Map;
 import java.util.SortedMap;
 import java.util.TreeMap;
+import java.util.concurrent.TimeUnit;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.commons.io.FileUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.util.EntityUtils;
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.impl.CloudSolrServer;
+import org.apache.solr.client.solrj.impl.HttpSolrServer;
+import org.apache.solr.handler.TestSolrConfigHandlerConcurrent;
 import org.apache.solr.util.RestTestBase;
 import org.apache.solr.util.RestTestHarness;
 import org.eclipse.jetty.servlet.ServletHolder;
@@ -77,13 +87,11 @@ public class TestSolrConfigHandler exten
 
 
   public void testProperty() throws Exception{
+    RestTestHarness harness = restTestHarness;
     String payload= "{\n" +
         " 'set-property' : { 'updateHandler.autoCommit.maxDocs':100, 'updateHandler.autoCommit.maxTime':10 } \n" +
         " }";
-    RestTestHarness harness = restTestHarness;
-    String response = harness.post("/config?wt=json", SolrTestCaseJ4.json(payload));
-    Map map = (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
-    assertNull(response,  map.get("errors"));
+    runConfigCommand( harness,"/config?wt=json", payload);
 
     Map m = (Map) getRespMap("/config/overlay?wt=json" ,harness).get("overlay");
     Map props = (Map) m.get("props");
@@ -99,9 +107,7 @@ public class TestSolrConfigHandler exten
     payload= "{\n" +
         " 'unset-property' :  'updateHandler.autoCommit.maxDocs'} \n" +
         " }";
-    response = harness.post("/config?wt=json", SolrTestCaseJ4.json(payload));
-    map = (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
-    assertNull(response,  map.get("errors"));
+    runConfigCommand(harness, "/config?wt=json", payload);
 
     m = (Map) getRespMap("/config/overlay?wt=json" ,harness).get("overlay");
     props = (Map) m.get("props");
@@ -111,14 +117,12 @@ public class TestSolrConfigHandler exten
   }
 
   public void testUserProp() throws Exception{
+    RestTestHarness harness = restTestHarness;
     String payload= "{\n" +
         " 'set-user-property' : { 'my.custom.variable.a':'MODIFIEDA'," +
         " 'my.custom.variable.b':'MODIFIEDB' } \n" +
         " }";
-    RestTestHarness harness = restTestHarness;
-    String response = harness.post("/config?wt=json", SolrTestCaseJ4.json(payload));
-    Map map = (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
-    assertNull(response,  map.get("errors"));
+    runConfigCommand(harness,"/config?wt=json", payload);
 
     Map m = (Map) getRespMap("/config/overlay?wt=json" ,harness).get("overlay");
     Map props = (Map) m.get("userProps");
@@ -132,14 +136,93 @@ public class TestSolrConfigHandler exten
     assertEquals("MODIFIEDA", m.get("a"));
     assertEquals("MODIFIEDB", m.get("b"));
 
+  }
 
+  public void testReqHandlerAPIs() throws Exception {
+    reqhandlertests(restTestHarness, null,null);
+  }
 
+  private static void runConfigCommand(RestTestHarness harness, String uri,  String payload) throws IOException {
+    String response = harness.post(uri, SolrTestCaseJ4.json(payload));
+    Map map = (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
+    assertNull(response,  map.get("errors"));
   }
 
 
+  public static void reqhandlertests(RestTestHarness writeHarness,String testServerBaseUrl, CloudSolrServer cloudSolrServer) throws Exception {
+    String payload = "{\n" +
+        "'create-requesthandler' : { 'name' : '/x', 'class': 'org.apache.solr.handler.DumpRequestHandler' , 'startup' : 'lazy'}\n" +
+        "}";
+    runConfigCommand(writeHarness,"/config?wt=json", payload);
+
+    boolean success = false;
+    long startTime = System.nanoTime();
+    long maxTimeoutSeconds = 10;
+    while ( TimeUnit.SECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutSeconds) {
+      String uri = "/config/overlay?wt=json";
+      Map m = testServerBaseUrl ==null?  getRespMap(uri,writeHarness) : TestSolrConfigHandlerConcurrent.getAsMap(testServerBaseUrl+uri ,cloudSolrServer) ;
+      if("lazy".equals( ConfigOverlay.getObjectByPath(m,  true, Arrays.asList("overlay", "requestHandler", "/x","startup")))) {
+        Map map = getRespMap("/x?wt=json",writeHarness);
+        if(map.containsKey("params")) {
+          success = true;
+          break;
+        }
+      }
+      Thread.sleep(100);
+
+    }
+
+    assertTrue( "Could not register requestHandler  ", success);
+
+    payload = "{\n" +
+        "'update-requesthandler' : { 'name' : '/x', 'class': 'org.apache.solr.handler.DumpRequestHandler' , 'startup' : 'lazy' , 'a':'b'}\n" +
+        "}";
+    runConfigCommand(writeHarness,"/config?wt=json", payload);
+
+    success = false;
+    startTime = System.nanoTime();
+    maxTimeoutSeconds = 10;
+    while ( TimeUnit.SECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutSeconds) {
+      String uri = "/config/overlay?wt=json";
+      Map m = testServerBaseUrl ==null?  getRespMap(uri,writeHarness) : TestSolrConfigHandlerConcurrent.getAsMap(testServerBaseUrl+uri ,cloudSolrServer) ;
+      if("b".equals( ConfigOverlay.getObjectByPath(m,  true, Arrays.asList("overlay", "requestHandler", "/x","a")))) {
+          success = true;
+          break;
+      }
+      Thread.sleep(100);
+
+    }
+
+    assertTrue( "Could not update requestHandler  ", success);
+
+    payload = "{\n" +
+        "'delete-requesthandler' : '/x'" +
+        "}";
+    runConfigCommand(writeHarness,"/config?wt=json", payload);
+    success = false;
+    startTime = System.nanoTime();
+    maxTimeoutSeconds = 10;
+    while ( TimeUnit.SECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutSeconds) {
+      String uri = "/config/overlay?wt=json";
+      Map m = testServerBaseUrl ==null?  getRespMap(uri,writeHarness) : TestSolrConfigHandlerConcurrent.getAsMap(testServerBaseUrl+uri ,cloudSolrServer) ;
+      if(null == ConfigOverlay.getObjectByPath(m,  true, Arrays.asList("overlay", "requestHandler", "/x","a"))) {
+        success = true;
+        break;
+      }
+      Thread.sleep(100);
+
+    }
+    assertTrue( "Could not delete requestHandler  ", success);
+
+  }
+
 
   public static Map getRespMap(String path, RestTestHarness restHarness) throws Exception {
     String response = restHarness.query(path);
-    return (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
+    try {
+      return (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
+    } catch (JSONParser.ParseException e) {
+      return Collections.emptyMap();
+    }
   }
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerConcurrent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerConcurrent.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerConcurrent.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerConcurrent.java Mon Dec  1 17:25:39 2014
@@ -28,10 +28,17 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.util.EntityUtils;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.impl.CloudSolrServer;
 import org.apache.solr.client.solrj.impl.HttpSolrServer;
 import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
+import org.apache.solr.common.cloud.DocCollection;
+import org.apache.solr.common.cloud.Replica;
+import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.core.ConfigOverlay;
 import org.apache.solr.util.RESTfulServerProvider;
@@ -67,7 +74,6 @@ public class TestSolrConfigHandlerConcur
 
   @Override
   public void doTest() throws Exception {
-
     Map editable_prop_map = (Map) new ObjectBuilder(new JSONParser(new StringReader(
         ConfigOverlay.MAPPING))).getObject();
     Map caches = (Map) editable_prop_map.get("query");
@@ -143,31 +149,39 @@ public class TestSolrConfigHandlerConcur
         return;
       }
 
+      DocCollection coll = cloudClient.getZkStateReader().getClusterState().getCollection("collection1");
+      List<String> urls = new ArrayList<>();
+      for (Slice slice : coll.getSlices()) {
+        for (Replica replica : slice.getReplicas())
+          urls.add(""+replica.get(ZkStateReader.BASE_URL_PROP) + "/"+replica.get(ZkStateReader.CORE_NAME_PROP));
+      }
+
+
       //get another node
-      RestTestHarness harness = restTestHarnesses.get(r.nextInt(restTestHarnesses.size()));
+      String url = urls.get(urls.size());
+
       long startTime = System.nanoTime();
-      boolean success = false;
-      long maxTimeoutSeconds = 10;
+      long maxTimeoutSeconds = 20;
       while ( TimeUnit.SECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutSeconds) {
         Thread.sleep(100);
         errmessages.clear();
-        Map respMap = getAsMap("/config/overlay?wt=json", harness);
+        Map respMap = getAsMap(url+"/config/overlay?wt=json", cloudClient);
         Map m = (Map) respMap.get("overlay");
         if(m!= null) m = (Map) m.get("props");
         if(m == null) {
-          errmessages.add(MessageFormat.format( "overlay does not exist for cache: {} , iteration: {} response {} ", cacheName, i, respMap.toString()));
+          errmessages.add(MessageFormat.format( "overlay does not exist for cache: {0} , iteration: {1} response {2} ", cacheName, i, respMap.toString()));
           continue;
         }
 
 
         Object o = getObjectByPath(m, true, asList("query", cacheName, "size"));
-        if(!val1.equals(o)) errmessages.add(MessageFormat.format("'size' property not set, expected = {}, actual {}", val1,o));
+        if(!val1.equals(o)) errmessages.add(MessageFormat.format("'size' property not set, expected = {0}, actual {1}", val1,o));
 
         o = getObjectByPath(m, true, asList("query", cacheName, "initialSize"));
-        if(!val2.equals(o)) errmessages.add(MessageFormat.format("'initialSize' property not set, expected = {}, actual {}", val2,o));
+        if(!val2.equals(o)) errmessages.add(MessageFormat.format("'initialSize' property not set, expected = {0}, actual {1}", val2,o));
 
         o = getObjectByPath(m, true, asList("query", cacheName, "autowarmCount"));
-        if(!val3.equals(o)) errmessages.add(MessageFormat.format("'autowarmCount' property not set, expected = {}, actual {}", val3,o));
+        if(!val3.equals(o)) errmessages.add(MessageFormat.format("'autowarmCount' property not set, expected = {0}, actual {1}", val3,o));
         if(errmessages.isEmpty()) break;
       }
       if(!errmessages.isEmpty()) {
@@ -178,5 +192,15 @@ public class TestSolrConfigHandlerConcur
 
   }
 
-
+  public static Map getAsMap(String uri, CloudSolrServer cloudClient) throws Exception {
+    HttpGet get = new HttpGet(uri) ;
+    HttpEntity entity = null;
+    try {
+      entity = cloudClient.getLbServer().getHttpClient().execute(get).getEntity();
+      String response = EntityUtils.toString(entity, StandardCharsets.UTF_8);
+      return (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
+    } finally {
+      EntityUtils.consumeQuietly(entity);
+    }
+  }
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/rest/SolrRestletTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/rest/SolrRestletTestBase.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/rest/SolrRestletTestBase.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/rest/SolrRestletTestBase.java Mon Dec  1 17:25:39 2014
@@ -47,10 +47,6 @@ abstract public class SolrRestletTestBas
     solrSchemaRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrSchemaRestApi");
     extraServlets.put(solrSchemaRestApi, "/schema/*");  // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
 
-    final ServletHolder solrConfigRestApi = new ServletHolder("SolrConfigRestApi", ServerServlet.class);
-    solrConfigRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrConfigRestApi");
-    extraServlets.put(solrConfigRestApi, "/config/*");
-
     createJettyAndHarness(TEST_HOME(), "solrconfig.xml", "schema-rest.xml", "/solr", true, extraServlets);
   }
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/rest/TestRestManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/rest/TestRestManager.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/rest/TestRestManager.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/rest/TestRestManager.java Mon Dec  1 17:25:39 2014
@@ -125,7 +125,6 @@ public class TestRestManager extends Sol
     Set<String> reservedEndpoints = registry.getReservedEndpoints();
     assertTrue(reservedEndpoints.size() > 2);
     assertTrue(reservedEndpoints.contains(RestManager.SCHEMA_BASE_PATH + RestManager.MANAGED_ENDPOINT));
-    assertTrue(reservedEndpoints.contains(RestManager.CONFIG_BASE_PATH + RestManager.MANAGED_ENDPOINT));
     for (String endpoint : reservedEndpoints) {
 
       try {

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/schema/TestBulkSchemaConcurrent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/schema/TestBulkSchemaConcurrent.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/schema/TestBulkSchemaConcurrent.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/schema/TestBulkSchemaConcurrent.java Mon Dec  1 17:25:39 2014
@@ -25,6 +25,7 @@ import org.apache.solr.cloud.AbstractFul
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.util.RESTfulServerProvider;
 import org.apache.solr.util.RestTestHarness;
+import org.junit.BeforeClass;
 import org.noggit.JSONParser;
 import org.noggit.ObjectBuilder;
 import org.slf4j.Logger;
@@ -48,6 +49,16 @@ public class TestBulkSchemaConcurrent  e
   static final Logger log =  LoggerFactory.getLogger(TestBulkSchemaConcurrent.class);
   private List<RestTestHarness> restTestHarnesses = new ArrayList<>();
 
+  @BeforeClass
+  public static void initSysProperties() {
+    System.setProperty("managed.schema.mutable", "true");
+    System.setProperty("enable.update.log", "true");
+  }
+
+  protected String getCloudSolrConfig() {
+    return "solrconfig-managed-schema.xml";
+  }
+
   private void setupHarnesses() {
     for (final SolrServer client : clients) {
       RestTestHarness harness = new RestTestHarness(new RESTfulServerProvider() {
@@ -101,7 +112,7 @@ public class TestBulkSchemaConcurrent  e
 
     }
 
-    assertTrue(success);
+    assertTrue(collectErrors.toString(), success);
 
 
   }
@@ -138,7 +149,7 @@ public class TestBulkSchemaConcurrent  e
 
 
     RestTestHarness publisher = restTestHarnesses.get(r.nextInt(restTestHarnesses.size()));
-    payload = payload.replace("replaceFieldA1", aField);
+    payload = payload.replace("replaceFieldA", aField);
 
     payload = payload.replace("replaceDynamicField", dynamicFldName);
     payload = payload.replace("dynamicFieldLol","lol"+seed);

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestCollapseQParserPlugin.java Mon Dec  1 17:25:39 2014
@@ -17,18 +17,16 @@
 
 package org.apache.solr.search;
 
+import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import com.carrotsearch.hppc.IntOpenHashSet;
-
-import java.io.IOException;
-import java.util.*;
-import java.util.Random;
 
+//We want codecs that support DocValues, and ones supporting blank/empty values.
+@SuppressCodecs({"Appending","Lucene3x","Lucene40","Lucene41","Lucene42"})
 public class TestCollapseQParserPlugin extends SolrTestCaseJ4 {
 
   @BeforeClass
@@ -48,10 +46,12 @@ public class TestCollapseQParserPlugin e
 
   @Test
   public void testCollapseQueries() throws Exception {
-    String[] doc = {"id","1", "term_s", "YYYY", "group_s", "group1", "test_ti", "5", "test_tl", "10", "test_tf", "2000"};
+    final String group = (random().nextBoolean() ? "group_s" : "group_s_dv");
+    
+    String[] doc = {"id","1", "term_s", "YYYY", group, "group1", "test_ti", "5", "test_tl", "10", "test_tf", "2000"};
     assertU(adoc(doc));
     assertU(commit());
-    String[] doc1 = {"id","2", "term_s","YYYY", "group_s", "group1", "test_ti", "50", "test_tl", "100", "test_tf", "200"};
+    String[] doc1 = {"id","2", "term_s","YYYY", group, "group1", "test_ti", "50", "test_tl", "100", "test_tf", "200"};
     assertU(adoc(doc1));
 
 
@@ -63,10 +63,10 @@ public class TestCollapseQParserPlugin e
     assertU(adoc(doc3));
 
 
-    String[] doc4 = {"id","5", "term_s", "YYYY", "group_s", "group2", "test_ti", "4", "test_tl", "10", "test_tf", "2000"};
+    String[] doc4 = {"id","5", "term_s", "YYYY", group, "group2", "test_ti", "4", "test_tl", "10", "test_tf", "2000"};
     assertU(adoc(doc4));
     assertU(commit());
-    String[] doc5 = {"id","6", "term_s","YYYY", "group_s", "group2", "test_ti", "10", "test_tl", "100", "test_tf", "200"};
+    String[] doc5 = {"id","6", "term_s","YYYY", group, "group2", "test_ti", "10", "test_tl", "100", "test_tf", "200"};
     assertU(adoc(doc5));
     assertU(commit());
 
@@ -75,10 +75,10 @@ public class TestCollapseQParserPlugin e
     //Test collapse by score and following sort by score
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s}");
+    params.add("fq", "{!collapse field="+group+"}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
-    assertQ(req(params), "*[count(//doc)=2]",
+    assertQ(req(params, "indent", "on"), "*[count(//doc)=2]",
                        "//result/doc[1]/float[@name='id'][.='2.0']",
                        "//result/doc[2]/float[@name='id'][.='6.0']"
         );
@@ -87,7 +87,7 @@ public class TestCollapseQParserPlugin e
     // SOLR-5544 test ordering with empty sort param
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s nullPolicy=expand min=test_tf}");
+    params.add("fq", "{!collapse field="+group+" nullPolicy=expand min=test_tf}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
     params.add("sort","");
@@ -101,7 +101,7 @@ public class TestCollapseQParserPlugin e
     // Test value source collapse criteria
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s nullPolicy=collapse min=field(test_ti)}");
+    params.add("fq", "{!collapse field="+group+" nullPolicy=collapse min=field(test_ti)}");
     params.add("sort", "test_ti desc");
     assertQ(req(params), "*[count(//doc)=3]",
         "//result/doc[1]/float[@name='id'][.='4.0']",
@@ -112,7 +112,7 @@ public class TestCollapseQParserPlugin e
     // Test value source collapse criteria with cscore function
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s nullPolicy=collapse min=cscore()}");
+    params.add("fq", "{!collapse field="+group+" nullPolicy=collapse min=cscore()}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
     assertQ(req(params), "*[count(//doc)=3]",
@@ -124,7 +124,7 @@ public class TestCollapseQParserPlugin e
     // Test value source collapse criteria with compound cscore function
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s nullPolicy=collapse min=sum(cscore(),field(test_ti))}");
+    params.add("fq", "{!collapse field="+group+" nullPolicy=collapse min=sum(cscore(),field(test_ti))}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
     assertQ(req(params), "*[count(//doc)=3]",
@@ -137,7 +137,7 @@ public class TestCollapseQParserPlugin e
 
     params = new ModifiableSolrParams();
     params.add("q", "YYYY");
-    params.add("fq", "{!collapse field=group_s nullPolicy=collapse}");
+    params.add("fq", "{!collapse field="+group+" nullPolicy=collapse}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
     params.add("qf", "term_s");
@@ -151,7 +151,7 @@ public class TestCollapseQParserPlugin e
     //Test SOLR-5773 with score collapse criteria
     params = new ModifiableSolrParams();
     params.add("q", "YYYY");
-    params.add("fq", "{!collapse field=group_s nullPolicy=collapse}");
+    params.add("fq", "{!collapse field="+group+" nullPolicy=collapse}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
     params.add("qf", "term_s");
@@ -165,7 +165,7 @@ public class TestCollapseQParserPlugin e
     //Test SOLR-5773 with max field collapse criteria
     params = new ModifiableSolrParams();
     params.add("q", "YYYY");
-    params.add("fq", "{!collapse field=group_s min=test_ti nullPolicy=collapse}");
+    params.add("fq", "{!collapse field="+group+" min=test_ti nullPolicy=collapse}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
     params.add("qf", "term_s");
@@ -180,7 +180,7 @@ public class TestCollapseQParserPlugin e
     //Test SOLR-5773 elevating documents with null group
     params = new ModifiableSolrParams();
     params.add("q", "YYYY");
-    params.add("fq", "{!collapse field=group_s}");
+    params.add("fq", "{!collapse field="+group+"}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
     params.add("qf", "term_s");
@@ -197,7 +197,7 @@ public class TestCollapseQParserPlugin e
     //Test collapse by min int field and sort
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s min=test_ti}");
+    params.add("fq", "{!collapse field="+group+" min=test_ti}");
     params.add("sort", "id desc");
     assertQ(req(params), "*[count(//doc)=2]",
                            "//result/doc[1]/float[@name='id'][.='5.0']",
@@ -205,7 +205,7 @@ public class TestCollapseQParserPlugin e
 
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s min=test_ti}");
+    params.add("fq", "{!collapse field="+group+" min=test_ti}");
     params.add("sort", "id asc");
     assertQ(req(params), "*[count(//doc)=2]",
                          "//result/doc[1]/float[@name='id'][.='1.0']",
@@ -213,7 +213,7 @@ public class TestCollapseQParserPlugin e
 
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s min=test_ti}");
+    params.add("fq", "{!collapse field="+group+" min=test_ti}");
     params.add("sort", "test_tl asc,id desc");
     assertQ(req(params), "*[count(//doc)=2]",
         "//result/doc[1]/float[@name='id'][.='5.0']",
@@ -221,7 +221,7 @@ public class TestCollapseQParserPlugin e
 
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s min=test_ti}");
+    params.add("fq", "{!collapse field="+group+" min=test_ti}");
     params.add("sort", "score desc,id asc");
     params.add("defType", "edismax");
     params.add("bf", "field(id)");
@@ -235,7 +235,7 @@ public class TestCollapseQParserPlugin e
     //Test collapse by max int field
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s max=test_ti}");
+    params.add("fq", "{!collapse field="+group+" max=test_ti}");
     params.add("sort", "test_ti asc");
     assertQ(req(params), "*[count(//doc)=2]",
                          "//result/doc[1]/float[@name='id'][.='6.0']",
@@ -247,7 +247,7 @@ public class TestCollapseQParserPlugin e
     //Test collapse by min long field
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s min=test_tl}");
+    params.add("fq", "{!collapse field="+group+" min=test_tl}");
     params.add("sort", "test_ti desc");
     assertQ(req(params), "*[count(//doc)=2]",
         "//result/doc[1]/float[@name='id'][.='1.0']",
@@ -257,7 +257,7 @@ public class TestCollapseQParserPlugin e
     //Test collapse by max long field
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s max=test_tl}");
+    params.add("fq", "{!collapse field="+group+" max=test_tl}");
     params.add("sort", "test_ti desc");
     assertQ(req(params), "*[count(//doc)=2]",
                          "//result/doc[1]/float[@name='id'][.='2.0']",
@@ -267,7 +267,7 @@ public class TestCollapseQParserPlugin e
     //Test collapse by min float field
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s min=test_tf}");
+    params.add("fq", "{!collapse field="+group+" min=test_tf}");
     params.add("sort", "test_ti desc");
     assertQ(req(params), "*[count(//doc)=2]",
                          "//result/doc[1]/float[@name='id'][.='2.0']",
@@ -279,7 +279,7 @@ public class TestCollapseQParserPlugin e
     //Test collapse by min float field
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s max=test_tf}");
+    params.add("fq", "{!collapse field="+group+" max=test_tf}");
     params.add("sort", "test_ti asc");
     assertQ(req(params), "*[count(//doc)=2]",
                          "//result/doc[1]/float[@name='id'][.='5.0']",
@@ -288,7 +288,7 @@ public class TestCollapseQParserPlugin e
     //Test collapse by min float field sort by score
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s max=test_tf}");
+    params.add("fq", "{!collapse field="+group+" max=test_tf}");
     params.add("defType", "edismax");
     params.add("bf", "field(id)");
     params.add("fl", "score, id");
@@ -304,7 +304,7 @@ public class TestCollapseQParserPlugin e
     //Test nullPolicy expand
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s max=test_tf nullPolicy=expand}");
+    params.add("fq", "{!collapse field="+group+" max=test_tf nullPolicy=expand}");
     params.add("sort", "id desc");
     assertQ(req(params), "*[count(//doc)=4]",
         "//result/doc[1]/float[@name='id'][.='5.0']",
@@ -316,7 +316,7 @@ public class TestCollapseQParserPlugin e
 
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s max=test_tf nullPolicy=collapse}");
+    params.add("fq", "{!collapse field="+group+" max=test_tf nullPolicy=collapse}");
     params.add("sort", "id desc");
     assertQ(req(params), "*[count(//doc)=3]",
         "//result/doc[1]/float[@name='id'][.='5.0']",
@@ -326,7 +326,7 @@ public class TestCollapseQParserPlugin e
 
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s}");
+    params.add("fq", "{!collapse field="+group+"}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
     params.add("fq","{!tag=test_ti}id:5");
@@ -338,7 +338,7 @@ public class TestCollapseQParserPlugin e
     // SOLR-5230 - ensure CollapsingFieldValueCollector.finish() is called
     params = new ModifiableSolrParams();
     params.add("q", "*:*");
-    params.add("fq", "{!collapse field=group_s}");
+    params.add("fq", "{!collapse field="+group+"}");
     params.add("group", "true");
     params.add("group.field", "id");
     assertQ(req(params), "*[count(//doc)=2]");
@@ -350,7 +350,7 @@ public class TestCollapseQParserPlugin e
     assertU(commit());
     params = new ModifiableSolrParams();
     params.add("q", "YYYY");
-    params.add("fq", "{!collapse field=group_s nullPolicy=collapse}");
+    params.add("fq", "{!collapse field="+group+" nullPolicy=collapse}");
     params.add("defType", "edismax");
     params.add("bf", "field(test_ti)");
     params.add("qf", "term_s");
@@ -371,4 +371,18 @@ public class TestCollapseQParserPlugin e
         SolrException.ErrorCode.BAD_REQUEST);
   }
 
+  @Test
+  public void testEmptyCollection() throws Exception {
+    // group_s is docValues=false and group_dv_s is docValues=true
+    String group = (random().nextBoolean() ? "group_s" : "group_s_dv");
+
+    // min-or-max is for CollapsingScoreCollector vs. CollapsingFieldValueCollector
+    String optional_min_or_max = (random().nextBoolean() ? "" : (random().nextBoolean() ? "min=field(test_ti)" : "max=field(test_ti)"));
+    
+    ModifiableSolrParams params = new ModifiableSolrParams();
+    params.add("q", "*:*");
+    params.add("fq", "{!collapse field="+group+" "+optional_min_or_max+"}");
+    assertQ(req(params), "*[count(//doc)=0]");
+  }
+
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestRTGBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestRTGBase.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestRTGBase.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestRTGBase.java Mon Dec  1 17:25:39 2014
@@ -126,9 +126,7 @@ public class TestRTGBase extends SolrTes
 
 
   protected int getFirstMatch(IndexReader r, Term t) throws IOException {
-    Fields fields = MultiFields.getFields(r);
-    if (fields == null) return -1;
-    Terms terms = fields.terms(t.field());
+    Terms terms = MultiFields.getTerms(r, t.field());
     if (terms == null) return -1;
     BytesRef termBytes = t.bytes();
     final TermsEnum termsEnum = terms.iterator(null);

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java Mon Dec  1 17:25:39 2014
@@ -51,7 +51,7 @@ public class TestSolr4Spatial extends So
   @ParametersFactory
   public static Iterable<Object[]> parameters() {
     return Arrays.asList(new Object[][]{
-        {"srpt_geohash"}, {"srpt_quad"}, {"stqpt_geohash"}, {"pointvector"}
+        {"srpt_geohash"}, {"srpt_quad"}, {"stqpt_geohash"}, {"pointvector"}, {"bbox"}
     });
   }
 
@@ -158,7 +158,7 @@ public class TestSolr4Spatial extends So
 
     assertQ(req(
         "fl", "id," + fieldName, "q", "*:*", "rows", "1000",
-        "fq", "{!geofilt sfield="+fieldName+" pt="+IN+" d=9}"),
+        "fq", "{!bbox sfield="+fieldName+" pt="+IN+" d=9}"),
         "//result/doc/*[@name='" + fieldName + "']//text()='" + OUT + "'");
   }
 
@@ -172,6 +172,9 @@ public class TestSolr4Spatial extends So
   }
 
   private void checkHits(String fieldName, boolean exact, String ptStr, double distKM, int count, int ... docIds) throws ParseException {
+    if (exact && fieldName.equalsIgnoreCase("bbox")) {
+      return; // bbox field only supports rectangular query
+    }
     String [] tests = new String[docIds != null && docIds.length > 0 ? docIds.length + 1 : 1];
     //test for presence of required ids first
     int i = 0;
@@ -322,8 +325,10 @@ public class TestSolr4Spatial extends So
 
   private String radiusQuery(double lat, double lon, double dDEG, String score, String filter) {
     //Choose between the Solr/Geofilt syntax, and the Lucene spatial module syntax
-    if (random().nextBoolean()) {
-      return "{!geofilt " +
+    if (fieldName.equals("bbox") || random().nextBoolean()) {
+      //we cheat for bbox strategy which doesn't do radius, only rect.
+      final String qparser = fieldName.equals("bbox") ? "bbox" : "geofilt";
+      return "{!" + qparser + " " +
           "sfield=" + fieldName + " "
           + (score != null ? "score="+score : "") + " "
           + (filter != null ? "filter="+filter : "") + " "
@@ -338,7 +343,8 @@ public class TestSolr4Spatial extends So
 
   @Test
   public void testSortMultiVal() throws Exception {
-    RandomizedTest.assumeFalse("Multivalue not supported for this field", fieldName.equals("pointvector"));
+    RandomizedTest.assumeFalse("Multivalue not supported for this field",
+        fieldName.equals("pointvector") || fieldName.equals("bbox"));
 
     assertU(adoc("id", "100", fieldName, "1,2"));//1 point
     assertU(adoc("id", "101", fieldName, "4,-1", fieldName, "3,5"));//2 points, 2nd is pretty close to query point
@@ -373,12 +379,24 @@ public class TestSolr4Spatial extends So
 
     //show we can index this (without an error)
     assertU(adoc("id", "rect", fieldName, rect));
-    assertU(adoc("id", "circ", fieldName, circ));
-    assertU(commit());
+    if (!fieldName.equals("bbox")) {
+      assertU(adoc("id", "circ", fieldName, circ));
+      assertU(commit());
+    }
 
     //only testing no error
     assertJQ(req("q", "{!field f=" + fieldName + "}Intersects(" + rect + ")"));
-    assertJQ(req("q", "{!field f=" + fieldName + "}Intersects(" + circ + ")"));
+    if (!fieldName.equals("bbox")) {
+      assertJQ(req("q", "{!field f=" + fieldName + "}Intersects(" + circ + ")"));
+    }
+  }
+
+  @Test
+  public void testBadScoreParam() throws Exception {
+    assertQEx("expect friendly error message",
+        "none",
+        req(radiusQuery(0, 0, 0, "bogus", "false")),
+        SolrException.ErrorCode.BAD_REQUEST);
   }
 
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java Mon Dec  1 17:25:39 2014
@@ -18,6 +18,7 @@ package org.apache.solr.search;
  */
 
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.SolrException;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -39,7 +40,7 @@ public class TestSolr4Spatial2 extends S
 
   @Test
   public void testBBox() throws Exception {
-    String fieldName = "bbox";
+    String fieldName = random().nextBoolean() ? "bbox" : "bboxD_dynamic";
     assertU(adoc("id", "0"));//nothing
     assertU(adoc("id", "1", fieldName, "ENVELOPE(-10, 20, 15, 10)"));
     assertU(adoc("id", "2", fieldName, "ENVELOPE(22, 22, 10, 10)"));//pt
@@ -48,14 +49,16 @@ public class TestSolr4Spatial2 extends S
     assertJQ(req("q", "{!field f="+fieldName+" filter=false score=overlapRatio " +
                 "queryTargetProportion=0.25}" +
                 "Intersects(ENVELOPE(10,25,12,10))",
-            "fl", "id,score",
+            "fl", "*,score",
             "debug", "results"),//explain info
         "/response/docs/[0]/id=='2'",
         "/response/docs/[0]/score==0.75]",
         "/response/docs/[1]/id=='1'",
         "/response/docs/[1]/score==0.26666668]",
         "/response/docs/[2]/id=='0'",
-        "/response/docs/[2]/score==0.0"
+        "/response/docs/[2]/score==0.0",
+
+        "/response/docs/[1]/" + fieldName + "=='ENVELOPE(-10, 20, 15, 10)'"//stored value
         );
 
     //minSideLength with point query
@@ -86,4 +89,13 @@ public class TestSolr4Spatial2 extends S
     );
   }
 
+  @Test
+  public void testBadScoreParam() throws Exception {
+    String fieldName = "bbox";
+    assertQEx("expect friendly error message",
+        "area2D",
+        req("{!field f="+fieldName+" filter=false score=bogus}Intersects(ENVELOPE(0,0,12,12))"),
+        SolrException.ErrorCode.BAD_REQUEST);
+  }
+
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/mlt/CloudMLTQParserTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/mlt/CloudMLTQParserTest.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/mlt/CloudMLTQParserTest.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/search/mlt/CloudMLTQParserTest.java Mon Dec  1 17:25:39 2014
@@ -30,6 +30,10 @@ import java.util.HashSet;
 
 public class CloudMLTQParserTest extends AbstractFullDistribZkTestBase {
   public CloudMLTQParserTest() {
+    fixShardCount = true;
+    shardCount = 2;
+    sliceCount = 2;
+    
     configString = "solrconfig.xml";
     schemaString = "schema.xml";
   }

Modified: lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/db/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/db/conf/schema.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/db/conf/schema.xml (original)
+++ lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/db/conf/schema.xml Mon Dec  1 17:25:39 2014
@@ -615,7 +615,7 @@
              See the Java Regular Expression documentation for more
              information on pattern and replacement string syntax.
              
-             http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
+             http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
           -->
         <filter class="solr.PatternReplaceFilterFactory"
                 pattern="([^a-z])" replacement="" replace="all"

Modified: lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/mail/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/mail/conf/schema.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/mail/conf/schema.xml (original)
+++ lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/mail/conf/schema.xml Mon Dec  1 17:25:39 2014
@@ -534,7 +534,7 @@
              See the Java Regular Expression documentation for more
              information on pattern and replacement string syntax.
              
-             http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
+             http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
           -->
         <filter class="solr.PatternReplaceFilterFactory"
                 pattern="([^a-z])" replacement="" replace="all"

Modified: lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/rss/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/rss/conf/schema.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/rss/conf/schema.xml (original)
+++ lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/rss/conf/schema.xml Mon Dec  1 17:25:39 2014
@@ -565,7 +565,7 @@
              See the Java Regular Expression documentation for more
              information on pattern and replacement string syntax.
              
-             http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
+             http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
           -->
         <filter class="solr.PatternReplaceFilterFactory"
                 pattern="([^a-z])" replacement="" replace="all"

Modified: lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/solr/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/solr/conf/schema.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/solr/conf/schema.xml (original)
+++ lucene/dev/branches/lucene2878/solr/example/example-DIH/solr/solr/conf/schema.xml Mon Dec  1 17:25:39 2014
@@ -615,7 +615,7 @@
              See the Java Regular Expression documentation for more
              information on pattern and replacement string syntax.
              
-             http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
+             http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
           -->
         <filter class="solr.PatternReplaceFilterFactory"
                 pattern="([^a-z])" replacement="" replace="all"

Modified: lucene/dev/branches/lucene2878/solr/example/multicore/core0/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/example/multicore/core0/conf/solrconfig.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/example/multicore/core0/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene2878/solr/example/multicore/core0/conf/solrconfig.xml Mon Dec  1 17:25:39 2014
@@ -57,35 +57,13 @@
     </updateLog>
   </updateHandler>
 
-  <!-- realtime get handler, guaranteed to return the latest stored fields 
-    of any document, without the need to commit or open a new searcher. The current 
-    implementation relies on the updateLog feature being enabled. -->
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>  
-  
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" /> 
-
   <requestDispatcher handleSelect="true" >
     <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" formdataUploadLimitInKB="2048" />
   </requestDispatcher>
   
   <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
   <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-     
-  <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
-    <lst name="invariants">
-      <str name="q">solrpingquery</str>
-    </lst>
-    <lst name="defaults">
-      <str name="echoParams">all</str>
-    </lst>
-  </requestHandler>
-   
+
   <!-- config for the admin interface --> 
   <admin>
     <defaultQuery>solr</defaultQuery>

Modified: lucene/dev/branches/lucene2878/solr/example/multicore/core1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/example/multicore/core1/conf/solrconfig.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/example/multicore/core1/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene2878/solr/example/multicore/core1/conf/solrconfig.xml Mon Dec  1 17:25:39 2014
@@ -57,34 +57,13 @@
     </updateLog>
   </updateHandler>
 
-  <!-- realtime get handler, guaranteed to return the latest stored fields 
-    of any document, without the need to commit or open a new searcher. The current 
-    implementation relies on the updateLog feature being enabled. -->
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-    </lst>
-  </requestHandler>
-  
-  <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" /> 
-
   <requestDispatcher handleSelect="true" >
     <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" formdataUploadLimitInKB="2048" />
   </requestDispatcher>
   
   <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
   <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
-  <requestHandler name="/update" class="solr.UpdateRequestHandler"  />
-  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
 
-  <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
-    <lst name="invariants">
-      <str name="q">solrpingquery</str>
-    </lst>
-    <lst name="defaults">
-      <str name="echoParams">all</str>
-    </lst>
-  </requestHandler>
 
   <!-- config for the admin interface --> 
   <admin>

Modified: lucene/dev/branches/lucene2878/solr/server/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/server/build.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/server/build.xml (original)
+++ lucene/dev/branches/lucene2878/solr/server/build.xml Mon Dec  1 17:25:39 2014
@@ -51,14 +51,14 @@
   <target name="resolve" depends="ivy-availability-check,ivy-fail,ivy-configure,sync-hack">
     <sequential>
     <!-- jetty libs in lib/ -->
-    <ivy:retrieve conf="jetty" type="jar" log="download-only"/>
-    <ivy:retrieve conf="logging" type="jar,bundle" log="download-only"
+    <ivy:retrieve conf="jetty" type="jar" log="download-only" symlink="${ivy.symlink}"/>
+    <ivy:retrieve conf="logging" type="jar,bundle" log="download-only" symlink="${ivy.symlink}"
                   pattern="lib/ext/[artifact]-[revision].[ext]"/>
     <!-- start.jar -->
-    <ivy:retrieve conf="start" type="jar" log="download-only" 
+    <ivy:retrieve conf="start" type="jar" log="download-only" symlink="${ivy.symlink}" 
                   pattern="start.jar"/>
     <!-- servlet-api.jar -->
-    <ivy:retrieve conf="servlet" log="download-only" type="orbit"
+    <ivy:retrieve conf="servlet" log="download-only" type="orbit" symlink="${ivy.symlink}"
                   pattern="lib/servlet-api-3.0.jar"/>
     </sequential>
   </target>

Modified: lucene/dev/branches/lucene2878/solr/server/solr/configsets/basic_configs/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/server/solr/configsets/basic_configs/conf/solrconfig.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/server/solr/configsets/basic_configs/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene2878/solr/server/solr/configsets/basic_configs/conf/solrconfig.xml Mon Dec  1 17:25:39 2014
@@ -445,25 +445,6 @@
      </lst>
   </requestHandler>
 
-  <!-- realtime get handler, guaranteed to return the latest stored fields of
-       any document, without the need to commit or open a new searcher.  The
-       current implementation relies on the updateLog feature being enabled.
-
-       ** WARNING **
-       Do NOT disable the realtime get handler at /get if you are using
-       SolrCloud otherwise any leader election will cause a full sync in ALL
-       replicas for the shard in question. Similarly, a replica recovery will
-       also always fetch the complete index from the leader because a partial
-       sync will not be possible in the absence of this handler.
-  -->
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-     <lst name="defaults">
-       <str name="omitHeader">true</str>
-       <str name="wt">json</str>
-       <str name="indent">true</str>
-     </lst>
-  </requestHandler>
-
   <!--
     The export request handler is used to export full sorted result sets.
     Do not change these defaults.
@@ -561,30 +542,6 @@
                   class="solr.DocumentAnalysisRequestHandler" 
                   startup="lazy" />
 
-  <!-- Admin Handlers
-
-       Admin Handlers - This will register all the standard admin
-       RequestHandlers.  
-    -->
-  <requestHandler name="/admin/" 
-                  class="solr.admin.AdminHandlers" />
-
-  <!-- ping/healthcheck -->
-  <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
-    <lst name="invariants">
-      <str name="q">solrpingquery</str>
-    </lst>
-    <lst name="defaults">
-      <str name="echoParams">all</str>
-    </lst>
-    <!-- An optional feature of the PingRequestHandler is to configure the 
-         handler with a "healthcheckFile" which can be used to enable/disable 
-         the PingRequestHandler.
-         relative paths are resolved against the data dir 
-      -->
-    <!-- <str name="healthcheckFile">server-enabled.txt</str> -->
-  </requestHandler>
-
   <!-- Echo the request contents back to the client -->
   <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
     <lst name="defaults">
@@ -593,22 +550,7 @@
     </lst>
   </requestHandler>
   
-  <!-- Solr Replication
-
-       The SolrReplicationHandler supports replicating indexes from a
-       "master" used for indexing and "slaves" used for queries.
 
-       http://wiki.apache.org/solr/SolrReplication 
-
-       It is also necessary for SolrCloud to function (in Cloud mode, the
-       replication handler is used to bulk transfer segments when nodes 
-       are added or need to recover).
-
-       https://wiki.apache.org/solr/SolrCloud/
-    -->
-  <requestHandler name="/replication" class="solr.ReplicationHandler" > 
-
-  </requestHandler>
 
   <!-- Search Components
 

Modified: lucene/dev/branches/lucene2878/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene2878/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml Mon Dec  1 17:25:39 2014
@@ -860,20 +860,7 @@
     </lst>
   </requestHandler>
 
-
-  <!-- realtime get handler, guaranteed to return the latest stored fields of
-       any document, without the need to commit or open a new searcher.  The
-       current implementation relies on the updateLog feature being enabled. -->
-  <requestHandler name="/get" class="solr.RealTimeGetHandler">
-    <lst name="defaults">
-      <str name="omitHeader">true</str>
-      <str name="wt">json</str>
-      <str name="indent">true</str>
-    </lst>
-  </requestHandler>
-
-
-  <!-- A Robust Example 
+  <!-- A Robust Example
        
        This example SearchHandler declaration shows off usage of the
        SearchHandler with many defaults declared
@@ -1057,13 +1044,6 @@
                   class="solr.DocumentAnalysisRequestHandler"
                   startup="lazy" />
 
-  <!-- Admin Handlers
-
-       Admin Handlers - This will register all the standard admin
-       RequestHandlers.  
-    -->
-  <requestHandler name="/admin/"
-                  class="solr.admin.AdminHandlers" />
   <!-- This single handler is equivalent to the following... -->
   <!--
      <requestHandler name="/admin/luke"       class="solr.admin.LukeRequestHandler" />
@@ -1073,34 +1053,8 @@
      <requestHandler name="/admin/properties" class="solr.admin.PropertiesRequestHandler" />
      <requestHandler name="/admin/file"       class="solr.admin.ShowFileRequestHandler" >
     -->
-  <!-- If you wish to hide files under ${solr.home}/conf, explicitly
-       register the ShowFileRequestHandler using: 
-    -->
-  <!--
-     <requestHandler name="/admin/file" 
-                     class="solr.admin.ShowFileRequestHandler" >
-       <lst name="invariants">
-         <str name="hidden">synonyms.txt</str> 
-         <str name="hidden">anotherfile.txt</str> 
-       </lst>
-     </requestHandler>
-    -->
 
-  <!-- ping/healthcheck -->
-  <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
-    <lst name="invariants">
-      <str name="q">solrpingquery</str>
-    </lst>
-    <lst name="defaults">
-      <str name="echoParams">all</str>
-    </lst>
-    <!-- An optional feature of the PingRequestHandler is to configure the 
-         handler with a "healthcheckFile" which can be used to enable/disable 
-         the PingRequestHandler.
-         relative paths are resolved against the data dir 
-      -->
-    <!-- <str name="healthcheckFile">server-enabled.txt</str> -->
-  </requestHandler>
+
 
   <!-- Echo the request contents back to the client -->
   <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >

Modified: lucene/dev/branches/lucene2878/solr/server/solr/configsets/sample_techproducts_configs/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/server/solr/configsets/sample_techproducts_configs/conf/schema.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/server/solr/configsets/sample_techproducts_configs/conf/schema.xml (original)
+++ lucene/dev/branches/lucene2878/solr/server/solr/configsets/sample_techproducts_configs/conf/schema.xml Mon Dec  1 17:25:39 2014
@@ -616,7 +616,7 @@
              See the Java Regular Expression documentation for more
              information on pattern and replacement string syntax.
              
-             http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
+             http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
           -->
         <filter class="solr.PatternReplaceFilterFactory"
                 pattern="([^a-z])" replacement="" replace="all"