You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2016/03/04 11:54:58 UTC

[1/2] lucene-solr git commit: SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica placement. splitshard should preassign nodes using rules, if rules are present

Repository: lucene-solr
Updated Branches:
  refs/heads/master a78ef1584 -> 517acece6


SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica
  placement. splitshard should preassign nodes using rules, if rules are present


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/0cd24c5d
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/0cd24c5d
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/0cd24c5d

Branch: refs/heads/master
Commit: 0cd24c5d08678a4cc883381d54089f62d0978b4d
Parents: e44eebf
Author: Noble Paul <no...@apache.org>
Authored: Fri Mar 4 16:22:37 2016 +0530
Committer: Noble Paul <no...@apache.org>
Committed: Fri Mar 4 16:22:37 2016 +0530

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  3 ++
 .../cloud/OverseerCollectionMessageHandler.java | 30 ++++++++++++--------
 .../apache/solr/cloud/rule/ReplicaAssigner.java | 14 ++++-----
 .../java/org/apache/solr/cloud/rule/Rule.java   |  4 ++-
 .../org/apache/solr/cloud/ShardSplitTest.java   | 27 ++++++++++++++++++
 5 files changed, 58 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0cd24c5d/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index fb64188..ddb1171 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -228,6 +228,9 @@ Bug Fixes
 
 * SOLR-8375: ReplicaAssigner rejects valid nodes (Kelvin Tan, noble)
 
+* SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica
+  placement. splitshard should preassign nodes using rules, if rules are present (noble, Shai Erera)
+
 Optimizations
 ----------------------
 * SOLR-7876: Speed up queries and operations that use many terms when timeAllowed has not been

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0cd24c5d/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java b/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
index 401409a..c2b7c90 100644
--- a/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
@@ -1308,13 +1308,18 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler
       
       // TODO: change this to handle sharding a slice into > 2 sub-shards.
 
+
+      Map<Position, String> nodeMap = identifyNodes(clusterState,
+          new ArrayList<>(clusterState.getLiveNodes()),
+          new ZkNodeProps(collection.getProperties()),
+          subSlices, repFactor - 1);
+
       List<Map<String, Object>> replicas = new ArrayList<>((repFactor - 1) * 2);
-      for (int i = 1; i <= subSlices.size(); i++) {
-        Collections.shuffle(nodeList, RANDOM);
-        String sliceName = subSlices.get(i - 1);
-        for (int j = 2; j <= repFactor; j++) {
-          String subShardNodeName = nodeList.get((repFactor * (i - 1) + (j - 2)) % nodeList.size());
-          String shardName = collectionName + "_" + sliceName + "_replica" + (j);
+
+        for (Map.Entry<Position, String> entry : nodeMap.entrySet()) {
+          String sliceName = entry.getKey().shard;
+          String subShardNodeName = entry.getValue();
+          String shardName = collectionName + "_" + sliceName + "_replica" + (entry.getKey().index);
 
           log.info("Creating replica shard " + shardName + " as part of slice " + sliceName + " of collection "
               + collectionName + " on " + subShardNodeName);
@@ -1349,7 +1354,6 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler
 
           replicas.add(propMap);
         }
-      }
 
       // we must set the slice state into recovery before actually creating the replica cores
       // this ensures that the logic inside Overseer to update sub-shard state to 'active'
@@ -2078,8 +2082,8 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler
                                               ZkNodeProps message,
                                               List<String> shardNames,
                                               int repFactor) throws IOException {
-    List<Map> maps = (List) message.get("rule");
-    if (maps == null) {
+    List<Map> rulesMap = (List) message.get("rule");
+    if (rulesMap == null) {
       int i = 0;
       Map<Position, String> result = new HashMap<>();
       for (String aShard : shardNames) {
@@ -2092,7 +2096,7 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler
     }
 
     List<Rule> rules = new ArrayList<>();
-    for (Object map : maps) rules.add(new Rule((Map) map));
+    for (Object map : rulesMap) rules.add(new Rule((Map) map));
 
     Map<String, Integer> sharVsReplicaCount = new HashMap<>();
 
@@ -2159,8 +2163,10 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler
     ShardHandler shardHandler = shardHandlerFactory.getShardHandler();
 
     // Kind of unnecessary, but it does put the logic of whether to override maxShardsPerNode in one place.
-    node = getNodesForNewReplicas(clusterState, collection, shard, 1, node,
-        overseer.getZkController().getCoreContainer()).get(0).nodeName;
+    if(node == null) {
+      node = getNodesForNewReplicas(clusterState, collection, shard, 1, node,
+          overseer.getZkController().getCoreContainer()).get(0).nodeName;
+    }
     log.info("Node not provided, Identified {} for creating new replica", node);
 
     if (!clusterState.liveNodesContain(node)) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0cd24c5d/solr/core/src/java/org/apache/solr/cloud/rule/ReplicaAssigner.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/rule/ReplicaAssigner.java b/solr/core/src/java/org/apache/solr/cloud/rule/ReplicaAssigner.java
index c9f774f..b0249fe 100644
--- a/solr/core/src/java/org/apache/solr/cloud/rule/ReplicaAssigner.java
+++ b/solr/core/src/java/org/apache/solr/cloud/rule/ReplicaAssigner.java
@@ -55,7 +55,7 @@ public class ReplicaAssigner {
   Map<String, Integer> shardVsReplicaCount;
   Map<String, Map<String, Object>> nodeVsTags;
   Map<String, HashMap<String, Integer>> shardVsNodes;
-  List<String> liveNodes;
+  List<String> participatingLiveNodes;
   Set<String> tagNames = new HashSet<>();
   private Map<String, AtomicInteger> nodeVsCores = new HashMap<>();
 
@@ -93,12 +93,12 @@ public class ReplicaAssigner {
                          Map<String, Integer> shardVsReplicaCount,
                          List snitches,
                          Map<String, Map<String, Integer>> shardVsNodes,
-                         List<String> liveNodes,
+                         List<String> participatingLiveNodes,
                          CoreContainer cc, ClusterState clusterState) {
     this.rules = rules;
     for (Rule rule : rules) tagNames.add(rule.tag.name);
     this.shardVsReplicaCount = shardVsReplicaCount;
-    this.liveNodes = new ArrayList<>(liveNodes);
+    this.participatingLiveNodes = new ArrayList<>(participatingLiveNodes);
     this.nodeVsTags = getTagsForNodes(cc, snitches);
     this.shardVsNodes = getDeepCopy(shardVsNodes, 2);
     validateTags(nodeVsTags);
@@ -209,7 +209,7 @@ public class ReplicaAssigner {
     Map<Position, String> result = new LinkedHashMap<>();
     int startPosition = 0;
     Map<String, Map<String, Integer>> copyOfCurrentState = getDeepCopy(shardVsNodes, 2);
-    List<String> sortedLiveNodes = new ArrayList<>(this.liveNodes);
+    List<String> sortedLiveNodes = new ArrayList<>(this.participatingLiveNodes);
     Collections.sort(sortedLiveNodes, new Comparator<String>() {
       @Override
       public int compare(String n1, String n2) {
@@ -397,7 +397,7 @@ public class ReplicaAssigner {
     }
 
 
-    for (String node : liveNodes) {
+    for (String node : participatingLiveNodes) {
       //now use the Snitch to get the tags
       for (SnitchInfoImpl info : snitches.values()) {
         if (!info.myTags.isEmpty()) {
@@ -419,7 +419,7 @@ public class ReplicaAssigner {
         String node = e.getKey();
         if (context.exception != null) {
           failedNodes.put(node, context);
-          liveNodes.remove(node);
+          participatingLiveNodes.remove(node);
           log.warn("Not all tags were obtained from node " + node);
           context.exception = new SolrException(SolrException.ErrorCode.SERVER_ERROR,
               "Not all tags were obtained from node " + node);
@@ -436,7 +436,7 @@ public class ReplicaAssigner {
       }
     }
 
-    if (liveNodes.isEmpty()) {
+    if (participatingLiveNodes.isEmpty()) {
       throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Could not get all tags for any nodes");
 
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0cd24c5d/solr/core/src/java/org/apache/solr/cloud/rule/Rule.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/rule/Rule.java b/solr/core/src/java/org/apache/solr/cloud/rule/Rule.java
index d73a9bf..209b755 100644
--- a/solr/core/src/java/org/apache/solr/cloud/rule/Rule.java
+++ b/solr/core/src/java/org/apache/solr/cloud/rule/Rule.java
@@ -163,7 +163,9 @@ public class Rule {
         Map<String,Integer> nodesInThisShard = shardVsNodeSet.get(shardCondition.val.equals(WILD_WILD_CARD) ? entry.getKey() : shardName);
         if (nodesInThisShard != null) {
           for (Map.Entry<String,Integer> aNode : nodesInThisShard.entrySet()) {
-            Object obj = nodeVsTags.get(aNode.getKey()).get(tag.name);
+            Map<String, Object> tagValues = nodeVsTags.get(aNode.getKey());
+            if(tagValues == null) continue;
+            Object obj = tagValues.get(tag.name);
             if (tagCondition.canMatch(obj, phase)) countMatchingThisTagValue += aNode.getValue();
           }
         }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0cd24c5d/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java b/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
index bbcae33..22735ab 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
@@ -24,7 +24,9 @@ import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.response.CollectionAdminResponse;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.cloud.ClusterState;
@@ -86,7 +88,32 @@ public class ShardSplitTest extends BasicDistributedZkTest {
     // and the new sub-shards don't have any.
     waitForRecoveriesToFinish(true);
     //waitForThingsToLevelOut(15);
+  }
+
+  @Test
+  public void testSplitShardWithRule() throws Exception {
+    waitForThingsToLevelOut(15);
+
+    if (usually()) {
+      log.info("Using legacyCloud=false for cluster");
+      CollectionsAPIDistributedZkTest.setClusterProp(cloudClient, "legacyCloud", "false");
+    }
 
+    log.info("Starting testSplitShardWithRule");
+    String collectionName = "shardSplitWithRule";
+    CollectionAdminRequest.Create createRequest = new CollectionAdminRequest.Create()
+        .setCollectionName(collectionName)
+        .setNumShards(1)
+        .setReplicationFactor(2)
+        .setRule("shard:*,replica:<2,node:*");
+    CollectionAdminResponse response = createRequest.process(cloudClient);
+    assertEquals(0, response.getStatus());
+
+    CollectionAdminRequest.SplitShard splitShardRequest = new CollectionAdminRequest.SplitShard()
+        .setCollectionName(collectionName)
+        .setShardName("shard1");
+    response = splitShardRequest.process(cloudClient);
+    assertEquals(String.valueOf(response.getErrorMessages()), 0, response.getStatus());
   }
 
   private void incompleteOrOverlappingCustomRangeTest() throws Exception  {


[2/2] lucene-solr git commit: Merge remote-tracking branch 'origin/master'

Posted by no...@apache.org.
Merge remote-tracking branch 'origin/master'

Conflicts:
	solr/CHANGES.txt


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/517acece
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/517acece
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/517acece

Branch: refs/heads/master
Commit: 517acece6a210b2d1baf75a39fe3b77ea59926b2
Parents: 0cd24c5 a78ef15
Author: Noble Paul <no...@apache.org>
Authored: Fri Mar 4 16:24:10 2016 +0530
Committer: Noble Paul <no...@apache.org>
Committed: Fri Mar 4 16:24:10 2016 +0530

----------------------------------------------------------------------
 lucene/CHANGES.txt                              |  15 +
 .../lucene/analysis/ar/ArabicAnalyzer.java      |   4 +-
 .../lucene/analysis/ckb/SoraniAnalyzer.java     |   4 +-
 .../lucene/analysis/fa/PersianAnalyzer.java     |   4 +-
 .../lucene/analysis/hi/HindiAnalyzer.java       |   4 +-
 .../apache/lucene/analysis/th/ThaiAnalyzer.java |   5 +-
 .../lucene/analysis/ar/TestArabicAnalyzer.java  |  12 -
 .../lucene/analysis/ckb/TestSoraniAnalyzer.java |  12 -
 .../analysis/custom/TestCustomAnalyzer.java     |   8 +-
 .../lucene/analysis/fa/TestPersianAnalyzer.java |  12 -
 .../lucene/analysis/hi/TestHindiAnalyzer.java   |  12 -
 .../lucene/analysis/th/TestThaiAnalyzer.java    |  12 -
 .../index/TestBackwardsCompatibility.java       |  75 +--
 .../lucene/index/TestMaxPositionInOldIndex.java | 107 ----
 .../org/apache/lucene/index/dvupdates.5.0.0.zip | Bin 13376 -> 0 bytes
 .../org/apache/lucene/index/dvupdates.6.0.0.zip | Bin 0 -> 3420 bytes
 .../org/apache/lucene/index/empty.5.0.0.zip     | Bin 225 -> 0 bytes
 .../org/apache/lucene/index/empty.6.0.0.zip     | Bin 0 -> 225 bytes
 .../org/apache/lucene/index/index.5.0.0-cfs.zip | Bin 13503 -> 0 bytes
 .../apache/lucene/index/index.5.0.0-nocfs.zip   | Bin 13485 -> 0 bytes
 .../index/index.5.0.0.singlesegment-cfs.zip     | Bin 4028 -> 0 bytes
 .../index/index.5.0.0.singlesegment-nocfs.zip   | Bin 6418 -> 0 bytes
 .../org/apache/lucene/index/index.5.1.0-cfs.zip | Bin 13523 -> 0 bytes
 .../apache/lucene/index/index.5.1.0-nocfs.zip   | Bin 13530 -> 0 bytes
 .../org/apache/lucene/index/index.5.2.0-cfs.zip | Bin 13528 -> 0 bytes
 .../apache/lucene/index/index.5.2.0-nocfs.zip   | Bin 13539 -> 0 bytes
 .../org/apache/lucene/index/index.5.2.1-cfs.zip | Bin 13568 -> 0 bytes
 .../apache/lucene/index/index.5.2.1-nocfs.zip   | Bin 13566 -> 0 bytes
 .../org/apache/lucene/index/index.5.3.0-cfs.zip | Bin 13747 -> 0 bytes
 .../apache/lucene/index/index.5.3.0-nocfs.zip   | Bin 13731 -> 0 bytes
 .../org/apache/lucene/index/index.5.3.1-cfs.zip | Bin 13701 -> 0 bytes
 .../apache/lucene/index/index.5.3.1-nocfs.zip   | Bin 13703 -> 0 bytes
 .../org/apache/lucene/index/index.5.3.2-cfs.zip | Bin 13724 -> 0 bytes
 .../apache/lucene/index/index.5.3.2-nocfs.zip   | Bin 13708 -> 0 bytes
 .../org/apache/lucene/index/index.5.4.0-cfs.zip | Bin 13738 -> 0 bytes
 .../apache/lucene/index/index.5.4.0-nocfs.zip   | Bin 13730 -> 0 bytes
 .../org/apache/lucene/index/index.5.4.1-cfs.zip | Bin 13761 -> 0 bytes
 .../apache/lucene/index/index.5.4.1-nocfs.zip   | Bin 13766 -> 0 bytes
 .../org/apache/lucene/index/index.5.5.0-cfs.zip | Bin 24776 -> 0 bytes
 .../apache/lucene/index/index.5.5.0-nocfs.zip   | Bin 13756 -> 0 bytes
 .../org/apache/lucene/index/moreterms.4.0.0.zip | Bin 78661 -> 0 bytes
 .../org/apache/lucene/index/moreterms.5.0.0.zip | Bin 78653 -> 0 bytes
 .../org/apache/lucene/index/moreterms.6.0.0.zip | Bin 0 -> 157215 bytes
 .../lucene/index/unsupported.5.0.0-cfs.zip      | Bin 0 -> 13503 bytes
 .../lucene/index/unsupported.5.0.0-nocfs.zip    | Bin 0 -> 13485 bytes
 .../unsupported.5.0.0.singlesegment-cfs.zip     | Bin 0 -> 4028 bytes
 .../unsupported.5.0.0.singlesegment-nocfs.zip   | Bin 0 -> 6418 bytes
 .../lucene/index/unsupported.5.1.0-cfs.zip      | Bin 0 -> 13523 bytes
 .../lucene/index/unsupported.5.1.0-nocfs.zip    | Bin 0 -> 13530 bytes
 .../lucene/index/unsupported.5.2.0-cfs.zip      | Bin 0 -> 13528 bytes
 .../lucene/index/unsupported.5.2.0-nocfs.zip    | Bin 0 -> 13539 bytes
 .../lucene/index/unsupported.5.2.1-cfs.zip      | Bin 0 -> 13568 bytes
 .../lucene/index/unsupported.5.2.1-nocfs.zip    | Bin 0 -> 13566 bytes
 .../lucene/index/unsupported.5.3.0-cfs.zip      | Bin 0 -> 13747 bytes
 .../lucene/index/unsupported.5.3.0-nocfs.zip    | Bin 0 -> 13731 bytes
 .../lucene/index/unsupported.5.3.1-cfs.zip      | Bin 0 -> 13701 bytes
 .../lucene/index/unsupported.5.3.1-nocfs.zip    | Bin 0 -> 13703 bytes
 .../lucene/index/unsupported.5.3.2-cfs.zip      | Bin 0 -> 13724 bytes
 .../lucene/index/unsupported.5.3.2-nocfs.zip    | Bin 0 -> 13708 bytes
 .../lucene/index/unsupported.5.4.0-cfs.zip      | Bin 0 -> 13738 bytes
 .../lucene/index/unsupported.5.4.0-nocfs.zip    | Bin 0 -> 13730 bytes
 .../lucene/index/unsupported.5.4.1-cfs.zip      | Bin 0 -> 13761 bytes
 .../lucene/index/unsupported.5.4.1-nocfs.zip    | Bin 0 -> 13766 bytes
 .../lucene/index/unsupported.5.5.0-cfs.zip      | Bin 0 -> 24776 bytes
 .../lucene/index/unsupported.5.5.0-nocfs.zip    | Bin 0 -> 13756 bytes
 lucene/benchmark/conf/spatial.alg               |   2 +-
 lucene/benchmark/ivy.xml                        |   2 +-
 .../benchmark/byTask/feeds/SpatialDocMaker.java |   8 +-
 .../byTask/feeds/SpatialFileQueryMaker.java     |   4 +-
 .../codecs/simpletext/SimpleTextBKDReader.java  |   4 +-
 .../simpletext/SimpleTextPointReader.java       |  34 +-
 .../simpletext/SimpleTextPointWriter.java       |  23 +-
 .../analysis/LegacyNumericTokenStream.java      |   5 +-
 .../org/apache/lucene/codecs/PointFormat.java   |  10 +
 .../org/apache/lucene/codecs/PointWriter.java   |  10 +
 .../codecs/lucene60/Lucene60PointReader.java    |  22 +
 .../codecs/lucene60/Lucene60PointWriter.java    |   6 +-
 .../org/apache/lucene/document/BinaryPoint.java |  82 ++--
 .../org/apache/lucene/document/DoublePoint.java |  88 ++--
 .../org/apache/lucene/document/FloatPoint.java  |  88 ++--
 .../org/apache/lucene/document/IntPoint.java    |  88 ++--
 .../org/apache/lucene/document/LongPoint.java   |  88 ++--
 .../org/apache/lucene/index/CheckIndex.java     | 117 ++++-
 .../index/IndexFormatTooOldException.java       |   4 +-
 .../org/apache/lucene/index/IndexUpgrader.java  |   2 +-
 .../apache/lucene/index/MultiPointValues.java   | 172 -------
 .../apache/lucene/index/ParallelLeafReader.java |  26 +
 .../org/apache/lucene/index/PointValues.java    |  14 +-
 .../apache/lucene/index/PointValuesWriter.java  |  11 +
 .../org/apache/lucene/index/SegmentInfos.java   |  28 +-
 .../lucene/index/SlowCodecReaderWrapper.java    |  10 +
 .../index/SlowCompositeReaderWrapper.java       |   2 +-
 .../apache/lucene/search/FieldValueQuery.java   |   4 +
 .../lucene/search/LegacyNumericRangeQuery.java  |  17 +-
 .../apache/lucene/search/MultiPhraseQuery.java  | 273 ++++++-----
 .../MultiTermQueryConstantScoreWrapper.java     |   3 +
 .../apache/lucene/search/NGramPhraseQuery.java  |   5 +
 .../apache/lucene/search/PointInSetQuery.java   |  24 +-
 .../apache/lucene/search/PointRangeQuery.java   | 170 ++-----
 .../org/apache/lucene/search/RegexpQuery.java   |   7 +-
 .../lucene/search/SortedNumericSelector.java    |   6 +-
 .../org/apache/lucene/search/SynonymQuery.java  |   5 +
 .../lucene/search/spans/SpanContainQuery.java   |   8 +
 .../apache/lucene/util/LegacyNumericUtils.java  |  59 ---
 .../org/apache/lucene/util/NumericUtils.java    | 172 ++++---
 .../org/apache/lucene/util/OfflineSorter.java   |   2 +-
 .../org/apache/lucene/util/QueryBuilder.java    |  18 +-
 .../apache/lucene/util/RamUsageEstimator.java   |  49 ++
 .../org/apache/lucene/util/StringHelper.java    |   1 +
 .../java/org/apache/lucene/util/Version.java    |  78 +--
 .../org/apache/lucene/util/bkd/BKDReader.java   |  26 +-
 .../org/apache/lucene/util/bkd/BKDWriter.java   |  94 ++--
 .../index/TestDemoParallelLeafReader.java       |   2 +-
 .../apache/lucene/index/TestDuelingCodecs.java  |   4 +-
 .../apache/lucene/index/TestPointValues.java    |  85 ++++
 .../apache/lucene/index/TestSegmentInfos.java   |  10 +-
 .../test/org/apache/lucene/index/TestTerms.java |  10 +-
 .../lucene/search/TestComplexExplanations.java  |  10 +-
 .../lucene/search/TestMultiPhraseQuery.java     | 190 +++----
 .../lucene/search/TestNumericRangeQuery32.java  |   3 +-
 .../lucene/search/TestNumericRangeQuery64.java  |   3 +-
 .../lucene/search/TestPhrasePrefixQuery.java    |  16 +-
 .../apache/lucene/search/TestPointQueries.java  | 459 +++++++++--------
 .../lucene/search/TestPositionIncrement.java    |   6 +-
 .../lucene/search/TestSimpleExplanations.java   |  52 +-
 .../search/TestSimpleSearchEquivalence.java     |  16 +-
 .../lucene/search/TestSloppyPhraseQuery2.java   |  10 +-
 .../search/TestSortedNumericSortField.java      |  15 +-
 .../TestUsageTrackingFilterCachingPolicy.java   |   2 +-
 .../lucene/util/TestLegacyNumericUtils.java     |  16 +-
 .../apache/lucene/util/TestNumericUtils.java    | 491 +++++++++++++++++++
 .../apache/lucene/util/TestQueryBuilder.java    |  20 +-
 .../org/apache/lucene/util/TestVersion.java     |  18 +-
 .../org/apache/lucene/util/bkd/TestBKD.java     | 139 ++----
 .../demo/facet/DistanceFacetsExample.java       |   8 +-
 .../lucene/demo/facet/RangeFacetsExample.java   |   3 +-
 .../apache/lucene/facet/range/DoubleRange.java  |  34 +-
 .../facet/range/DoubleRangeFacetCounts.java     |   8 +-
 .../apache/lucene/facet/range/LongRange.java    |  25 +-
 .../lucene/facet/range/LongRangeCounter.java    |  14 +-
 .../facet/range/TestRangeFacetCounts.java       |  28 +-
 .../highlight/WeightedSpanTermExtractor.java    |   6 +-
 .../search/highlight/HighlighterTest.java       |  18 +-
 lucene/ivy-versions.properties                  |   3 +-
 .../search/join/ToParentBlockJoinSortField.java |   6 +-
 lucene/licenses/spatial4j-0.5-tests.jar.sha1    |   1 -
 lucene/licenses/spatial4j-0.5.jar.sha1          |   1 -
 lucene/licenses/spatial4j-0.6-tests.jar.sha1    |   1 +
 lucene/licenses/spatial4j-0.6.jar.sha1          |   1 +
 lucene/licenses/spatial4j-NOTICE.txt            | 136 ++++-
 .../apache/lucene/index/SortingLeafReader.java  |  10 +
 .../org/apache/lucene/index/SorterTestBase.java |   8 +-
 .../apache/lucene/queries/BoostingQuery.java    |  12 +
 .../apache/lucene/queries/CommonTermsQuery.java |  44 ++
 .../org/apache/lucene/queries/TermsQuery.java   |   5 +
 .../queries/function/FunctionRangeQuery.java    |  20 +
 .../classic/MultiFieldQueryParser.java          |   6 +-
 .../queryparser/classic/QueryParserBase.java    |   9 +-
 .../builders/MultiPhraseQueryNodeBuilder.java   |   6 +-
 .../standard/builders/SlopQueryNodeBuilder.java |   8 +-
 .../classic/TestMultiPhraseQueryParsing.java    |  10 +-
 .../queryparser/classic/TestQueryParser.java    |  28 +-
 .../apache/lucene/document/BigIntegerPoint.java | 101 ++--
 .../lucene/document/InetAddressPoint.java       |  66 ++-
 .../org/apache/lucene/document/LatLonPoint.java | 223 ++++++---
 .../document/LatLonPointDistanceQuery.java      | 209 ++++++++
 .../document/LatLonPointInPolygonQuery.java     | 254 ++++++++++
 .../org/apache/lucene/document/package.html     |   7 +-
 .../apache/lucene/payloads/PayloadSpanUtil.java |   6 +-
 .../lucene/search/DocValuesNumbersQuery.java    |   8 +
 .../lucene/search/DocValuesRangeQuery.java      |  20 +
 .../lucene/search/PointDistanceQuery.java       | 179 -------
 .../lucene/search/PointInPolygonQuery.java      | 207 --------
 .../lucene/document/TestBigIntegerPoint.java    |  16 +-
 .../lucene/document/TestInetAddressPoint.java   |   8 +-
 .../apache/lucene/document/TestLatLonPoint.java | 201 ++++----
 .../document/TestLatLonPointDistanceQuery.java  | 190 +++++++
 .../lucene/search/TestDocValuesRangeQuery.java  |  32 +-
 .../lucene/search/TestLatLonPointQueries.java   |  70 +--
 .../lucene/search/TestTermAutomatonQuery.java   |   8 +-
 lucene/spatial-extras/ivy.xml                   |   4 +-
 .../apache/lucene/spatial/SpatialStrategy.java  |  12 +-
 .../bbox/BBoxOverlapRatioValueSource.java       |   2 +-
 .../spatial/bbox/BBoxSimilarityValueSource.java |   4 +-
 .../lucene/spatial/bbox/BBoxStrategy.java       |  13 +-
 .../lucene/spatial/bbox/BBoxValueSource.java    |   2 +-
 .../composite/CompositeSpatialStrategy.java     |   4 +-
 .../composite/IntersectsRPTVerifyQuery.java     |   4 +-
 .../spatial/prefix/AbstractPrefixTreeQuery.java |   2 +-
 .../prefix/AbstractVisitingPrefixTreeQuery.java |   4 +-
 .../spatial/prefix/ContainsPrefixTreeQuery.java |   4 +-
 .../spatial/prefix/HeatmapFacetCounter.java     |  10 +-
 .../prefix/IntersectsPrefixTreeQuery.java       |   4 +-
 .../prefix/NumberRangePrefixTreeStrategy.java   |   4 +-
 .../PointPrefixTreeFieldCacheProvider.java      |   2 +-
 .../spatial/prefix/PrefixTreeFacetCounter.java  |   6 +-
 .../spatial/prefix/PrefixTreeStrategy.java      |  10 +-
 .../prefix/RecursivePrefixTreeStrategy.java     |   4 +-
 .../prefix/TermQueryPrefixTreeStrategy.java     |   6 +-
 .../spatial/prefix/WithinPrefixTreeQuery.java   |  16 +-
 .../apache/lucene/spatial/prefix/tree/Cell.java |   6 +-
 .../prefix/tree/DateRangePrefixTree.java        |   2 +-
 .../spatial/prefix/tree/FilterCellIterator.java |   4 +-
 .../spatial/prefix/tree/GeohashPrefixTree.java  |  10 +-
 .../lucene/spatial/prefix/tree/LegacyCell.java  |   6 +-
 .../spatial/prefix/tree/LegacyPrefixTree.java   |   8 +-
 .../prefix/tree/NumberRangePrefixTree.java      |  16 +-
 .../prefix/tree/PackedQuadPrefixTree.java       |  12 +-
 .../spatial/prefix/tree/QuadPrefixTree.java     |  10 +-
 .../spatial/prefix/tree/SpatialPrefixTree.java  |   4 +-
 .../prefix/tree/SpatialPrefixTreeFactory.java   |   4 +-
 .../spatial/prefix/tree/TreeCellIterator.java   |   4 +-
 .../lucene/spatial/query/SpatialArgs.java       |  12 +-
 .../lucene/spatial/query/SpatialArgsParser.java |  10 +-
 .../lucene/spatial/query/SpatialOperation.java  |   8 +-
 .../serialized/SerializedDVStrategy.java        |  10 +-
 .../lucene/spatial/spatial4j/Geo3dShape.java    |  14 +-
 .../util/DistanceToShapeValueSource.java        |  10 +-
 .../spatial/util/ShapeAreaValueSource.java      |   6 +-
 .../lucene/spatial/util/ShapeFieldCache.java    |   2 +-
 .../ShapeFieldCacheDistanceValueSource.java     |   6 +-
 .../spatial/util/ShapeFieldCacheProvider.java   |   2 +-
 .../spatial/util/ShapePredicateValueSource.java |   2 +-
 .../spatial/vector/DistanceValueSource.java     |   4 +-
 .../spatial/vector/PointVectorStrategy.java     |  16 +-
 .../lucene/spatial/DistanceStrategyTest.java    |   6 +-
 .../apache/lucene/spatial/PortedSolr3Test.java  |   8 +-
 .../lucene/spatial/QueryEqualsHashCodeTest.java |   4 +-
 .../apache/lucene/spatial/SpatialArgsTest.java  |   4 +-
 .../apache/lucene/spatial/SpatialExample.java   |   8 +-
 .../apache/lucene/spatial/SpatialTestCase.java  |   8 +-
 .../apache/lucene/spatial/SpatialTestData.java  |   4 +-
 .../apache/lucene/spatial/SpatialTestQuery.java |   2 +-
 .../apache/lucene/spatial/StrategyTestCase.java |   4 +-
 .../lucene/spatial/TestTestFramework.java       |   4 +-
 .../lucene/spatial/bbox/TestBBoxStrategy.java   |  12 +-
 .../composite/CompositeStrategyTest.java        |  12 +-
 .../spatial/prefix/DateNRStrategyTest.java      |   2 +-
 .../spatial/prefix/HeatmapFacetCounterTest.java |  18 +-
 .../lucene/spatial/prefix/JtsPolygonTest.java   |   8 +-
 .../spatial/prefix/NumberRangeFacetsTest.java   |   2 +-
 .../RandomSpatialOpFuzzyPrefixTreeTest.java     |  24 +-
 .../prefix/RandomSpatialOpStrategyTestCase.java |   2 +-
 .../prefix/TestRecursivePrefixTreeStrategy.java |   8 +-
 .../prefix/TestTermQueryPrefixGridStrategy.java |   4 +-
 .../prefix/tree/DateRangePrefixTreeTest.java    |   4 +-
 .../prefix/tree/SpatialPrefixTreeTest.java      |   8 +-
 .../spatial/query/SpatialArgsParserTest.java    |   4 +-
 .../serialized/SerializedStrategyTest.java      |   2 +-
 .../lucene/spatial/spatial4j/Geo3dRptTest.java  |  10 +-
 .../Geo3dShapeRectRelationTestCase.java         |  18 +-
 .../Geo3dShapeSphereModelRectRelationTest.java  |   2 +-
 .../spatial4j/RandomizedShapeTestCase.java      |  22 +-
 .../spatial/spatial4j/geo3d/GeoPointTest.java   |   2 +-
 .../spatial/vector/TestPointVectorStrategy.java |   6 +-
 .../GeoPointTermQueryConstantScoreWrapper.java  |   7 +
 .../spatial/util/BaseGeoPointTestCase.java      |  74 ++-
 .../org/apache/lucene/geo3d/Geo3DPoint.java     |   4 +-
 .../lucene/geo3d/PointInGeo3DShapeQuery.java    |  24 +-
 .../suggest/document/FuzzyCompletionQuery.java  |  42 ++
 .../suggest/document/PrefixCompletionQuery.java |   7 +
 .../suggest/document/RegexCompletionQuery.java  |  15 +
 .../lucene/search/suggest/tst/TSTLookup.java    |   7 +-
 .../suggest/document/TestSuggestField.java      |   2 +-
 .../codecs/asserting/AssertingPointFormat.java  | 118 ++++-
 .../lucene/codecs/cranky/CrankyPointFormat.java |  10 +
 .../lucene/index/BasePointFormatTestCase.java   | 280 ++++++-----
 .../apache/lucene/search/AssertingQuery.java    |   8 +
 .../org/apache/lucene/util/LuceneTestCase.java  | 111 +++--
 .../java/org/apache/lucene/util/TestUtil.java   |  11 +
 lucene/version.properties                       |   2 +-
 solr/CHANGES.txt                                |  34 ++
 solr/bin/solr                                   |   5 +-
 .../solr/analytics/util/AnalyticsParsers.java   |   9 +-
 .../clustering/carrot2/CarrotParams.java        |  10 +-
 .../clustering/carrot2/SolrResourceLocator.java |   4 +-
 .../solr/collection1/conf/solrconfig.xml        |   5 -
 .../carrot2/CarrotClusteringEngineTest.java     |   6 -
 .../dataimport/EntityProcessorWrapper.java      |  12 -
 .../dataimport/TestContentStreamDataSource.java |   6 +-
 .../TestSolrEntityProcessorEndToEnd.java        |   6 +-
 .../UIMAUpdateRequestProcessorTest.java         |   6 +-
 solr/core/ivy.xml                               |   2 +-
 .../client/solrj/embedded/JettySolrRunner.java  | 120 +----
 .../cloud/OverseerCollectionMessageHandler.java | 123 +----
 .../org/apache/solr/core/CoreContainer.java     |   9 +-
 .../java/org/apache/solr/core/NodeConfig.java   |  20 -
 .../java/org/apache/solr/core/SolrConfig.java   |   8 +-
 .../src/java/org/apache/solr/core/SolrCore.java |  48 --
 .../java/org/apache/solr/core/SolrCores.java    |  14 +-
 .../solr/handler/MoreLikeThisHandler.java       |  17 -
 .../solr/handler/admin/AdminHandlers.java       | 151 ------
 .../solr/handler/admin/CollectionsHandler.java  |  33 +-
 .../solr/handler/admin/LukeRequestHandler.java  |   7 -
 .../handler/component/DateFacetProcessor.java   | 255 ----------
 .../solr/handler/component/FacetComponent.java  |  56 ---
 .../solr/handler/component/SearchHandler.java   |  13 +-
 .../handler/component/SpatialHeatmapFacets.java |   4 +-
 .../solr/handler/loader/CSVLoaderBase.java      |   5 +-
 .../org/apache/solr/internal/csv/CSVParser.java |  34 +-
 .../apache/solr/internal/csv/CSVStrategy.java   | 338 ++++++++-----
 .../java/org/apache/solr/parser/CharStream.java |  16 -
 .../org/apache/solr/parser/FastCharStream.java  |   8 -
 .../apache/solr/parser/SolrQueryParserBase.java |  11 +-
 .../org/apache/solr/request/IntervalFacets.java |  14 +-
 .../org/apache/solr/request/SimpleFacets.java   |  12 -
 .../apache/solr/response/CSVResponseWriter.java |   6 +-
 .../solr/schema/AbstractSpatialFieldType.java   |  35 +-
 .../AbstractSpatialPrefixTreeFieldType.java     |   2 +-
 .../java/org/apache/solr/schema/BBoxField.java  |   2 +-
 .../org/apache/solr/schema/DateRangeField.java  |   2 +-
 .../org/apache/solr/schema/GeoHashField.java    |   8 +-
 .../java/org/apache/solr/schema/LatLonType.java |   8 +-
 .../java/org/apache/solr/schema/PointType.java  |   2 +-
 .../schema/RptWithGeometrySpatialField.java     |   7 +-
 .../org/apache/solr/schema/TrieDoubleField.java |   5 +-
 .../java/org/apache/solr/schema/TrieField.java  |  95 +---
 .../org/apache/solr/schema/TrieFloatField.java  |   5 +-
 .../java/org/apache/solr/search/CursorMark.java |  11 +-
 .../solr/search/ExtendedDismaxQParser.java      |   8 +-
 .../apache/solr/search/SolrIndexSearcher.java   |   5 -
 .../apache/solr/search/ValueSourceParser.java   |   2 +-
 .../apache/solr/search/facet/FacetRange.java    |   6 +-
 .../distance/GeoDistValueSourceParser.java      |  10 +-
 .../function/distance/GeohashFunction.java      |   2 +-
 .../distance/GeohashHaversineFunction.java      |  10 +-
 .../distance/HaversineConstFunction.java        |   4 +-
 .../function/distance/HaversineFunction.java    |   2 +-
 .../apache/solr/search/mlt/CloudMLTQParser.java |   2 +-
 .../apache/solr/update/UpdateShardHandler.java  |   5 -
 .../processor/DistributedUpdateProcessor.java   |   2 +-
 .../processor/UpdateRequestProcessorChain.java  |   6 -
 .../org/apache/solr/util/DistanceUnits.java     |   6 +-
 .../java/org/apache/solr/util/FileUtils.java    |   3 +
 .../java/org/apache/solr/util/SpatialUtils.java |  18 +-
 .../solr/collection1/conf/schema_latest.xml     |   2 +-
 .../solr/collection1/conf/solrconfig-sql.xml    |   1 -
 .../org/apache/solr/TestDistributedSearch.java  |  21 -
 .../org/apache/solr/TestGroupingSearch.java     |   2 +-
 .../org/apache/solr/TestSolrCoreProperties.java |   5 +-
 .../core/src/test/org/apache/solr/TestTrie.java |  14 +-
 .../solr/cloud/BaseCdcrDistributedZkTest.java   |   9 +-
 .../apache/solr/cloud/DeleteReplicaTest.java    |  60 ++-
 .../org/apache/solr/cloud/DeleteShardTest.java  |  78 ++-
 .../solr/cloud/TestCloudDeleteByQuery.java      | 245 +++++++++
 .../apache/solr/cloud/TestCollectionAPI.java    |   8 +-
 .../test/org/apache/solr/core/TestSolrXml.java  |   4 -
 .../apache/solr/core/TestXIncludeConfig.java    |   4 +-
 .../solr/handler/TestReplicationHandler.java    |   7 +-
 .../handler/TestReplicationHandlerBackup.java   |   8 +-
 .../apache/solr/handler/TestRestoreCore.java    |   8 +-
 .../apache/solr/internal/csv/CSVParserTest.java |  10 +-
 .../solr/internal/csv/CSVPrinterTest.java       |   3 +-
 .../apache/solr/request/SimpleFacetsTest.java   | 122 ++---
 .../org/apache/solr/request/TestFaceting.java   |  97 ----
 .../solr/schema/SpatialRPTFieldTypeTest.java    |  56 +--
 .../apache/solr/search/TestSolr4Spatial.java    |   8 +-
 .../function/distance/DistanceFunctionTest.java |   4 +-
 .../similarities/TestPerFieldSimilarity.java    |   1 -
 .../TestPerFieldSimilarityClassic.java          |  86 ----
 ...DocExpirationUpdateProcessorFactoryTest.java |  11 +-
 .../SignatureUpdateProcessorFactoryTest.java    |  12 +-
 ...atelessScriptUpdateProcessorFactoryTest.java |   4 +-
 .../UniqFieldsUpdateProcessorFactoryTest.java   |   3 +-
 .../UpdateRequestProcessorFactoryTest.java      |   8 +-
 .../org/apache/solr/util/DistanceUnitsTest.java |   2 +-
 .../example-DIH/solr/db/conf/solrconfig.xml     |   2 +-
 .../example-DIH/solr/mail/conf/solrconfig.xml   |   2 +-
 .../example-DIH/solr/rss/conf/solrconfig.xml    |   2 +-
 .../example-DIH/solr/solr/conf/solrconfig.xml   |   2 +-
 .../example-DIH/solr/tika/conf/solrconfig.xml   |   2 +-
 solr/example/files/conf/solrconfig.xml          |   2 +-
 solr/licenses/spatial4j-0.5.jar.sha1            |   1 -
 solr/licenses/spatial4j-0.6.jar.sha1            |   1 +
 solr/licenses/spatial4j-NOTICE.txt              | 136 ++++-
 .../basic_configs/conf/solrconfig.xml           |   2 +-
 .../conf/solrconfig.xml                         |   2 +-
 .../conf/solrconfig.xml                         |   2 +-
 solr/site/quickstart.mdtext                     |   2 -
 .../solr/client/solrj/impl/HttpSolrClient.java  |   5 -
 .../solrj/request/CollectionAdminRequest.java   | 101 +++-
 .../client/solrj/request/CoreAdminRequest.java  |   8 +-
 .../solr/client/solrj/response/FacetField.java  |  26 -
 .../solr/client/solrj/response/PivotField.java  |   8 -
 .../client/solrj/response/QueryResponse.java    |  24 -
 .../solr/client/solrj/util/ClientUtils.java     |  36 --
 .../solrj/util/SolrIdentifierValidator.java     |  25 +-
 .../solr/common/cloud/ClosableThread.java       |  26 -
 .../apache/solr/common/cloud/ZkCmdExecutor.java |   5 -
 .../apache/solr/common/cloud/ZkStateReader.java |   6 +-
 .../apache/solr/common/util/IteratorChain.java  |  86 ----
 .../apache/solr/common/util/JavaBinCodec.java   |  40 +-
 .../solrj/sampleDateFacetResponse.xml           |  81 ---
 .../solrj/sampleRangeFacetResponse.xml          |  44 ++
 .../solr/collection1/conf/solrconfig-sql.xml    |   1 -
 .../solrj/beans/TestDocumentObjectBinder.java   | 101 ++--
 .../request/TestCollectionAdminRequest.java     |   8 +-
 .../client/solrj/request/TestCoreAdmin.java     |   4 +-
 .../solrj/response/NoOpResponseParserTest.java  |   2 +-
 .../solrj/response/QueryResponseTest.java       |  26 +-
 .../solr/common/util/IteratorChainTest.java     | 104 ----
 .../solr/common/util/TestJavaBinCodec.java      |   5 +-
 .../java/org/apache/solr/SolrTestCaseHS.java    |  13 +-
 solr/webapp/web/js/angular/app.js               |  11 -
 solr/webapp/web/js/scripts/app.js               |  11 -
 405 files changed, 5525 insertions(+), 5390 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/517acece/solr/CHANGES.txt
----------------------------------------------------------------------
diff --cc solr/CHANGES.txt
index ddb1171,13e89c2..b8f4294
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@@ -228,9 -251,17 +251,20 @@@ Bug Fixe
  
  * SOLR-8375: ReplicaAssigner rejects valid nodes (Kelvin Tan, noble)
  
+ * SOLR-8738: Fixed false success response when invalid deleteByQuery requests intially hit non-leader
+   cloud nodes (hossman)
+ 
+ * SOLR-8771: Multi-threaded core shutdown creates executor per core. (Mike Drob via Mark Miller)
+ 
+ * SOLR-8145: Fix position of OOM killer script when starting Solr in the background (Jurian Broertjes via
+   Timothy Potter)
+ 
+ * SOLR-8769: Fix document exclusion in mlt query parser in Cloud mode for schemas that have non-"id"
+   unique field (Erik Hatcher, Anshum Gupta)
+ 
 +* SOLR-8728: ReplicaAssigner throws NPE when a partial list of nodes are only participating in replica
 +  placement. splitshard should preassign nodes using rules, if rules are present (noble, Shai Erera)
 +
  Optimizations
  ----------------------
  * SOLR-7876: Speed up queries and operations that use many terms when timeAllowed has not been

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/517acece/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
----------------------------------------------------------------------