You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2017/06/07 14:11:05 UTC
[01/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10566: Add
documentation
Repository: lucene-solr
Updated Branches:
refs/heads/feature/autoscaling 8bc7c4715 -> d158f694b
SOLR-10566: Add documentation
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/6d6e47f1
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6d6e47f1
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6d6e47f1
Branch: refs/heads/feature/autoscaling
Commit: 6d6e47f1965697a830d94836058b7b9ef4d97036
Parents: 71b5d34
Author: Joel Bernstein <jb...@apache.org>
Authored: Thu Jun 1 16:26:57 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Thu Jun 1 16:26:57 2017 -0400
----------------------------------------------------------------------
solr/solr-ref-guide/src/stream-sources.adoc | 31 +++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6d6e47f1/solr/solr-ref-guide/src/stream-sources.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/stream-sources.adoc b/solr/solr-ref-guide/src/stream-sources.adoc
index e7356ae..986a5da 100644
--- a/solr/solr-ref-guide/src/stream-sources.adoc
+++ b/solr/solr-ref-guide/src/stream-sources.adoc
@@ -390,7 +390,36 @@ stats(collection1,
== timeseries
-//TODO
+The `timeseries` function builds a time series aggregation. Under the covers the `timeseries` function uses the
+JSON Facet API as its high performance aggregation engine.
+
+=== timeseries Parameters
+
+* `collection`: (Mandatory) Collection the stats will be aggregated from.
+* `q`: (Mandatory) The query to build the aggregations from.
+* `field`: (Mandatory) The date field for the time series.
+* `start`: (Mandatory) The start of the time series expressed in Solr date or date math syntax.
+* `end`: (Mandatory) The end of the time series expressed in Solr date or date math syntax.
+* `gap`: (Mandatory) The time gap between time series aggregation points expressed in Solr date math syntax.
+* `metrics`: (Mandatory) The metrics to include in the result tuple. Current supported metrics are `sum(col)`, `avg(col)`, `min(col)`, `max(col)` and `count(*)`
+
+=== timeseries Syntax
+
+[source,text]
+----
+timeseries(collection1,
+ q=*:*,
+ field="rec_dt"
+ start="NOW-30DAYS",
+ end="NOW",
+ gap="+1DAY",
+ sum(a_i),
+ max(a_i),
+ max(a_f),
+ avg(a_i),
+ avg(a_f),
+ count(*))
+----
== train
[27/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-7452: fix facet
refinement for method:dvhash
Posted by sh...@apache.org.
SOLR-7452: fix facet refinement for method:dvhash
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/67876b30
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/67876b30
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/67876b30
Branch: refs/heads/feature/autoscaling
Commit: 67876b30277314f15f5e55ef321a39d67e7f1bac
Parents: db2b19f
Author: yonik <yo...@apache.org>
Authored: Sun Jun 4 20:13:25 2017 -0400
Committer: yonik <yo...@apache.org>
Committed: Sun Jun 4 20:13:33 2017 -0400
----------------------------------------------------------------------
.../src/java/org/apache/solr/search/facet/FacetField.java | 7 ++++++-
.../org/apache/solr/search/facet/TestJsonFacetRefinement.java | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/67876b30/solr/core/src/java/org/apache/solr/search/facet/FacetField.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetField.java b/solr/core/src/java/org/apache/solr/search/facet/FacetField.java
index e8e624c..42f791c 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetField.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetField.java
@@ -98,7 +98,12 @@ public class FacetField extends FacetRequestSorted {
FieldType ft = sf.getType();
boolean multiToken = sf.multiValued() || ft.multiValuedFieldCache();
- NumberType ntype = ft.getNumberType();
+ if (fcontext.facetInfo != null) {
+ // refinement... we will end up either skipping the entire facet, or doing calculating only specific facet buckets
+ return new FacetFieldProcessorByArrayDV(fcontext, this, sf);
+ }
+
+ NumberType ntype = ft.getNumberType();
// ensure we can support the requested options for numeric faceting:
if (ntype != null) {
if (prefix != null) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/67876b30/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
index e0b1865..9087d30 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
@@ -238,7 +238,7 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
ModifiableSolrParams p = params("cat_s", "cat_s", "xy_s", "xy_s", "num_d", "num_d", "qw_s", "qw_s", "er_s","er_s");
doBasicRefinement( p );
- p.set("terms","method:dv,");
+ p.set("terms","method:dvhash,");
doBasicRefinement( p );
// multi-valued strings
[23/50] [abbrv] lucene-solr:feature/autoscaling: Fixed error in
bin/solr cp example
Posted by sh...@apache.org.
Fixed error in bin/solr cp example
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/9efa022e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/9efa022e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/9efa022e
Branch: refs/heads/feature/autoscaling
Commit: 9efa022e0a317805c9a6c5a4021751643892a8dd
Parents: 9e99a23
Author: Erick Erickson <er...@apache.org>
Authored: Fri Jun 2 14:19:03 2017 -0700
Committer: Erick Erickson <er...@apache.org>
Committed: Fri Jun 2 14:19:03 2017 -0700
----------------------------------------------------------------------
.../src/using-zookeeper-to-manage-configuration-files.adoc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9efa022e/solr/solr-ref-guide/src/using-zookeeper-to-manage-configuration-files.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/using-zookeeper-to-manage-configuration-files.adoc b/solr/solr-ref-guide/src/using-zookeeper-to-manage-configuration-files.adoc
index 3a6c49d..b2dc9d5 100644
--- a/solr/solr-ref-guide/src/using-zookeeper-to-manage-configuration-files.adoc
+++ b/solr/solr-ref-guide/src/using-zookeeper-to-manage-configuration-files.adoc
@@ -93,5 +93,5 @@ If you for example would like to keep your `solr.xml` in ZooKeeper to avoid havi
[source,bash]
----
-bin/solr cp file:local/file/path/to/solr.xml zk:/solr.xml -z localhost:2181
+bin/solr zk cp file:local/file/path/to/solr.xml zk:/solr.xml -z localhost:2181
----
[34/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10696: Add
cumulative probability function
Posted by sh...@apache.org.
SOLR-10696: Add cumulative probability function
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/99ca13f9
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/99ca13f9
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/99ca13f9
Branch: refs/heads/feature/autoscaling
Commit: 99ca13f90fa04fb804e20bbdf51bf6cfc4ea3a34
Parents: f275e3b
Author: Joel Bernstein <jb...@apache.org>
Authored: Fri Jun 2 15:19:38 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Mon Jun 5 11:19:17 2017 -0400
----------------------------------------------------------------------
.../org/apache/solr/handler/StreamHandler.java | 1 +
.../io/eval/CumulativeProbabilityEvaluator.java | 66 ++++++++++++++++++++
.../solrj/io/eval/PercentileEvaluator.java | 24 ++++---
.../solrj/io/stream/StreamExpressionTest.java | 65 +++++++++++++++++--
4 files changed, 143 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/99ca13f9/solr/core/src/java/org/apache/solr/handler/StreamHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/StreamHandler.java b/solr/core/src/java/org/apache/solr/handler/StreamHandler.java
index f79f86e..d4029ff 100644
--- a/solr/core/src/java/org/apache/solr/handler/StreamHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/StreamHandler.java
@@ -187,6 +187,7 @@ public class StreamHandler extends RequestHandlerBase implements SolrCoreAware,
.withFunctionName("copyOfRange", CopyOfRangeEvaluator.class)
.withFunctionName("percentile", PercentileEvaluator.class)
.withFunctionName("empiricalDistribution", EmpiricalDistributionEvaluator.class)
+ .withFunctionName("cumulativeProbability", CumulativeProbabilityEvaluator.class)
.withFunctionName("describe", DescribeEvaluator.class)
.withFunctionName("finddelay", FindDelayEvaluator.class)
.withFunctionName("sequence", SequenceEvaluator.class)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/99ca13f9/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CumulativeProbabilityEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CumulativeProbabilityEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CumulativeProbabilityEvaluator.java
new file mode 100644
index 0000000..469e983
--- /dev/null
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CumulativeProbabilityEvaluator.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.client.solrj.io.eval;
+
+import java.io.IOException;
+
+import org.apache.solr.client.solrj.io.Tuple;
+import org.apache.solr.client.solrj.io.stream.expr.Explanation;
+import org.apache.solr.client.solrj.io.stream.expr.Explanation.ExpressionType;
+import org.apache.solr.client.solrj.io.stream.expr.Expressible;
+import org.apache.solr.client.solrj.io.stream.expr.StreamExpression;
+import org.apache.solr.client.solrj.io.stream.expr.StreamExpressionParameter;
+import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
+
+public class CumulativeProbabilityEvaluator extends ComplexEvaluator implements Expressible {
+
+ private static final long serialVersionUID = 1;
+
+ public CumulativeProbabilityEvaluator(StreamExpression expression, StreamFactory factory) throws IOException {
+ super(expression, factory);
+ }
+
+ public Number evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 2) {
+ throw new IOException("Cumulative probability expects 2 parameters: an emperical distribution and a number");
+ }
+
+ StreamEvaluator r = subEvaluators.get(0);
+ StreamEvaluator d = subEvaluators.get(1);
+
+ EmpiricalDistributionEvaluator.EmpiricalDistributionTuple e = (EmpiricalDistributionEvaluator.EmpiricalDistributionTuple)r.evaluate(tuple);
+ Number n = (Number)d.evaluate(tuple);
+ return e.percentile(n.doubleValue());
+ }
+
+ @Override
+ public StreamExpressionParameter toExpression(StreamFactory factory) throws IOException {
+ StreamExpression expression = new StreamExpression(factory.getFunctionName(getClass()));
+ return expression;
+ }
+
+ @Override
+ public Explanation toExplanation(StreamFactory factory) throws IOException {
+ return new Explanation(nodeId.toString())
+ .withExpressionType(ExpressionType.EVALUATOR)
+ .withFunctionName(factory.getFunctionName(getClass()))
+ .withImplementingClass(getClass().getName())
+ .withExpression(toExpression(factory).toString());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/99ca13f9/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
index 19d423d..7867048 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
@@ -17,6 +17,9 @@
package org.apache.solr.client.solrj.io.eval;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.util.List;
import java.io.IOException;
import org.apache.solr.client.solrj.io.Tuple;
@@ -26,6 +29,7 @@ import org.apache.solr.client.solrj.io.stream.expr.Expressible;
import org.apache.solr.client.solrj.io.stream.expr.StreamExpression;
import org.apache.solr.client.solrj.io.stream.expr.StreamExpressionParameter;
import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
+import org.apache.commons.math3.stat.descriptive.rank.Percentile;
public class PercentileEvaluator extends ComplexEvaluator implements Expressible {
@@ -36,17 +40,23 @@ public class PercentileEvaluator extends ComplexEvaluator implements Expressible
}
public Number evaluate(Tuple tuple) throws IOException {
-
if(subEvaluators.size() != 2) {
- throw new IOException("Percentile expects 2 parameters: a regression result and a number");
+ throw new IOException("Percentile expects 2 parameters: an array and a number");
}
- StreamEvaluator r = subEvaluators.get(0);
- StreamEvaluator d = subEvaluators.get(1);
+ StreamEvaluator colEval = subEvaluators.get(0);
+ List<Number> column = (List<Number>)colEval.evaluate(tuple);
+
+ double[] data = new double[column.size()];
+ for(int i=0; i<data.length; i++) {
+ data[i] = column.get(i).doubleValue();
+ }
- EmpiricalDistributionEvaluator.EmpiricalDistributionTuple e = (EmpiricalDistributionEvaluator.EmpiricalDistributionTuple)r.evaluate(tuple);
- Number n = (Number)d.evaluate(tuple);
- return e.percentile(n.doubleValue());
+ Percentile percentile = new Percentile();
+ percentile.setData(data);
+ StreamEvaluator numEval = subEvaluators.get(1);
+ Number num = (Number)numEval.evaluate(tuple);
+ return percentile.evaluate(num.doubleValue());
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/99ca13f9/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
index 3957915..8ca52d1 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
@@ -5759,8 +5759,61 @@ public class StreamExpressionTest extends SolrCloudTestCase {
}
+
+ @Test
+ public void testPercentile() throws Exception {
+ String cexpr = "percentile(array(1,2,3,4,5,6,7,8,9,10,11), 50)";
+ ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
+ paramsLoc.set("expr", cexpr);
+ paramsLoc.set("qt", "/stream");
+
+ String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString()+"/"+COLLECTIONORALIAS;
+ TupleStream solrStream = new SolrStream(url, paramsLoc);
+
+ StreamContext context = new StreamContext();
+ solrStream.setStreamContext(context);
+ List<Tuple> tuples = getTuples(solrStream);
+ assertTrue(tuples.size() == 1);
+ Tuple tuple = tuples.get(0);
+ double p = tuple.getDouble("return-value");
+ assertEquals(p, 6, 0.0);
+
+
+ cexpr = "percentile(array(11,10,3,4,5,6,7,8,9,2,1), 50)";
+ paramsLoc = new ModifiableSolrParams();
+ paramsLoc.set("expr", cexpr);
+ paramsLoc.set("qt", "/stream");
+
+ solrStream = new SolrStream(url, paramsLoc);
+
+ context = new StreamContext();
+ solrStream.setStreamContext(context);
+ tuples = getTuples(solrStream);
+ assertTrue(tuples.size() == 1);
+ tuple = tuples.get(0);
+ p = tuple.getDouble("return-value");
+ assertEquals(p, 6, 0.0);
+
+ cexpr = "percentile(array(11,10,3,4,5,6,7,8,9,2,1), 20)";
+ paramsLoc = new ModifiableSolrParams();
+ paramsLoc.set("expr", cexpr);
+ paramsLoc.set("qt", "/stream");
+
+ solrStream = new SolrStream(url, paramsLoc);
+
+ context = new StreamContext();
+ solrStream.setStreamContext(context);
+ tuples = getTuples(solrStream);
+ assertTrue(tuples.size() == 1);
+ tuple = tuples.get(0);
+ p = tuple.getDouble("return-value");
+ assertEquals(p, 2.4, 0.001);
+
+ }
+
+
@Test
- public void testPercentiles() throws Exception {
+ public void testCumulativeProbability() throws Exception {
UpdateRequest updateRequest = new UpdateRequest();
int i=0;
@@ -5773,11 +5826,11 @@ public class StreamExpressionTest extends SolrCloudTestCase {
String expr = "search("+COLLECTIONORALIAS+", q=\"*:*\", fl=\"price_f\", sort=\"price_f asc\", rows=\"200\")";
String cexpr = "let(a="+expr+", c=col(a, price_f), e=empiricalDistribution(c), " +
- "tuple(p1=percentile(e, 88), " +
- "p2=percentile(e, 2), " +
- "p3=percentile(e, 99), " +
- "p4=percentile(e, 77), " +
- "p5=percentile(e, 98)))";
+ "tuple(p1=cumulativeProbability(e, 88), " +
+ "p2=cumulativeProbability(e, 2), " +
+ "p3=cumulativeProbability(e, 99), " +
+ "p4=cumulativeProbability(e, 77), " +
+ "p5=cumulativeProbability(e, 98)))";
ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
paramsLoc.set("expr", cexpr);
[36/50] [abbrv] lucene-solr:feature/autoscaling: LUCENE-7845:
spatial-extras undo optimize; don't consider any rect or circle to be a point
Posted by sh...@apache.org.
LUCENE-7845: spatial-extras undo optimize; don't consider any rect or circle to be a point
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/6b022c98
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6b022c98
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6b022c98
Branch: refs/heads/feature/autoscaling
Commit: 6b022c98f9a1f69de17445004ce8464ee936e51c
Parents: 78d9501
Author: David Smiley <ds...@apache.org>
Authored: Mon Jun 5 12:44:51 2017 -0400
Committer: David Smiley <ds...@apache.org>
Committed: Mon Jun 5 12:44:51 2017 -0400
----------------------------------------------------------------------
.../lucene/spatial/prefix/PrefixTreeStrategy.java | 17 ++++++-----------
.../prefix/RecursivePrefixTreeStrategy.java | 1 +
.../prefix/RandomSpatialOpFuzzyPrefixTreeTest.java | 13 +++++++++++++
3 files changed, 20 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6b022c98/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/PrefixTreeStrategy.java
----------------------------------------------------------------------
diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/PrefixTreeStrategy.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/PrefixTreeStrategy.java
index 43851c7..0716e78 100644
--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/PrefixTreeStrategy.java
+++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/PrefixTreeStrategy.java
@@ -32,9 +32,7 @@ import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree;
import org.apache.lucene.spatial.query.SpatialArgs;
import org.apache.lucene.spatial.util.ShapeFieldCacheDistanceValueSource;
import org.apache.lucene.util.Bits;
-import org.locationtech.spatial4j.shape.Circle;
import org.locationtech.spatial4j.shape.Point;
-import org.locationtech.spatial4j.shape.Rectangle;
import org.locationtech.spatial4j.shape.Shape;
/**
@@ -208,15 +206,12 @@ public abstract class PrefixTreeStrategy extends SpatialStrategy {
return HeatmapFacetCounter.calcFacets(this, context, topAcceptDocs, inputShape, facetLevel, maxCells);
}
+ /**
+ * Returns true if the {@code shape} is a {@link Point}. For custom spatial contexts, it may make sense to
+ * have certain other shapes return true.
+ * @lucene.experimental
+ */
protected boolean isPointShape(Shape shape) {
- if (shape instanceof Point) {
- return true;
- } else if (shape instanceof Circle) {
- return ((Circle) shape).getRadius() == 0.0;
- } else if (shape instanceof Rectangle) {
- Rectangle rect = (Rectangle) shape;
- return rect.getWidth() == 0.0 && rect.getHeight() == 0.0;
- }
- return false;
+ return shape instanceof Point;
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6b022c98/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/RecursivePrefixTreeStrategy.java
----------------------------------------------------------------------
diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/RecursivePrefixTreeStrategy.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/RecursivePrefixTreeStrategy.java
index 7c79200..819c504 100644
--- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/RecursivePrefixTreeStrategy.java
+++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/RecursivePrefixTreeStrategy.java
@@ -216,6 +216,7 @@ public class RecursivePrefixTreeStrategy extends PrefixTreeStrategy {
cell = cellIterator.next();
assert prevLevel < cell.getLevel();
}
+ assert cell.isLeaf();
return new TermQuery(new Term(getFieldName(), cell.getTokenBytesWithLeaf(null)));
} else {
// Well there could be parent cells. But we can reduce the "scan level" which will be slower for a point query.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6b022c98/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/RandomSpatialOpFuzzyPrefixTreeTest.java
----------------------------------------------------------------------
diff --git a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/RandomSpatialOpFuzzyPrefixTreeTest.java b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/RandomSpatialOpFuzzyPrefixTreeTest.java
index cfc9980..c5b145f 100644
--- a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/RandomSpatialOpFuzzyPrefixTreeTest.java
+++ b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/RandomSpatialOpFuzzyPrefixTreeTest.java
@@ -164,6 +164,19 @@ public class RandomSpatialOpFuzzyPrefixTreeTest extends StrategyTestCase {
assertEquals(1, executeQuery(query, 1).numFound);
}
+ @Test
+ public void testPointsOnlyOptBug() throws IOException {
+ setupQuadGrid(8, false);
+ setupCtx2D(ctx);
+ ((PrefixTreeStrategy) strategy).setPointsOnly(true);
+ Point point = ctx.makePoint(86, -127.44362190053255);
+ adoc("0", point);
+ commit();
+ Query query = strategy.makeQuery(new SpatialArgs(SpatialOperation.Intersects,
+ ctx.makeRectangle(point, point)));
+ assertEquals(1, executeQuery(query, 1).numFound);
+ }
+
/** See LUCENE-5062, {@link ContainsPrefixTreeQuery#multiOverlappingIndexedShapes}. */
@Test
public void testContainsPairOverlap() throws IOException {
[21/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10509,
SOLR-10649: add docs for new metric features; add to solr.xml docs
Posted by sh...@apache.org.
SOLR-10509, SOLR-10649: add docs for new metric features; add <metrics> to solr.xml docs
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/9e99a23f
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/9e99a23f
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/9e99a23f
Branch: refs/heads/feature/autoscaling
Commit: 9e99a23f31b8d3508526ea473b944beb13303334
Parents: a477ebb
Author: Cassandra Targett <ct...@apache.org>
Authored: Fri Jun 2 14:50:54 2017 -0500
Committer: Cassandra Targett <ct...@apache.org>
Committed: Fri Jun 2 14:52:02 2017 -0500
----------------------------------------------------------------------
solr/solr-ref-guide/src/format-of-solr-xml.adoc | 27 +++---
solr/solr-ref-guide/src/metrics-reporting.adoc | 97 +++++++++++++++++---
2 files changed, 99 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9e99a23f/solr/solr-ref-guide/src/format-of-solr-xml.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/format-of-solr-xml.adoc b/solr/solr-ref-guide/src/format-of-solr-xml.adoc
index 4e55033..02e72bd 100644
--- a/solr/solr-ref-guide/src/format-of-solr-xml.adoc
+++ b/solr/solr-ref-guide/src/format-of-solr-xml.adoc
@@ -22,7 +22,6 @@ The `solr.xml` file defines some global configuration options that apply to all
This section will describe the default `solr.xml` file included with Solr and how to modify it for your needs. For details on how to configure `core.properties`, see the section <<defining-core-properties.adoc#defining-core-properties,Defining core.properties>>.
-[[Formatofsolr.xml-Definingsolr.xml]]
== Defining solr.xml
You can find `solr.xml` in your `$SOLR_HOME` directory (usually `server/solr`) in standalone mode or in Zookeeper when using SolrCloud. The default `solr.xml` file looks like this:
@@ -50,10 +49,9 @@ You can find `solr.xml` in your `$SOLR_HOME` directory (usually `server/solr`) i
As you can see, the discovery Solr configuration is "SolrCloud friendly". However, the presence of the `<solrcloud>` element does _not_ mean that the Solr instance is running in SolrCloud mode. Unless the `-DzkHost` or `-DzkRun` are specified at startup time, this section is ignored.
-[[Formatofsolr.xml-Solr.xmlParameters]]
-=== Solr.xml Parameters
+== Solr.xml Parameters
-==== The `<solr>` Element
+=== The <solr> Element
There are no attributes that you can specify in the `<solr>` tag, which is the root element of `solr.xml`. The tables below list the child nodes of each XML element in `solr.xml`.
@@ -74,7 +72,7 @@ There are no attributes that you can specify in the `<solr>` tag, which is the r
|`configSetBaseDir` |The directory under which configsets for Solr cores can be found. Defaults to `$SOLR_HOME/configsets`.
|===
-==== The `<solrcloud>` Element
+=== The <solrcloud> Element
This element defines several parameters that relate so SolrCloud. This section is ignored unless theSolr instance is started with either `-DzkRun` or `-DzkHost`
@@ -96,7 +94,7 @@ This element defines several parameters that relate so SolrCloud. This section i
|`zkCredentialsProvider` & ` zkACLProvider` |Optional parameters that can be specified if you are using <<zookeeper-access-control.adoc#zookeeper-access-control,ZooKeeper Access Control>>.
|===
-==== The `<logging>` Element
+=== The <logging> Element
// TODO: Change column width to %autowidth.spread when https://github.com/asciidoctor/asciidoctor-pdf/issues/599 is fixed
@@ -107,7 +105,7 @@ This element defines several parameters that relate so SolrCloud. This section i
|`enabled` |true/false - whether to enable logging or not.
|===
-===== The `<logging><watcher>` Element
+==== The <logging><watcher> Element
// TODO: Change column width to %autowidth.spread when https://github.com/asciidoctor/asciidoctor-pdf/issues/599 is fixed
@@ -118,7 +116,7 @@ This element defines several parameters that relate so SolrCloud. This section i
|`threshold` |The logging level above which your particular logging implementation will record. For example when using log4j one might specify DEBUG, WARN, INFO, etc.
|===
-==== The `<shardHandlerFactory>` Element
+=== The <shardHandlerFactory> Element
Custom shard handlers can be defined in `solr.xml` if you wish to create a custom shard handler.
@@ -146,14 +144,19 @@ Since this is a custom shard handler, sub-elements are specific to the implement
|`fairnessPolicy` |A boolean to configure if the threadpool favours fairness over throughput. Default is false to favor throughput.
|===
-[[Formatofsolr.xml-SubstitutingJVMSystemPropertiesinsolr.xml]]
+=== The <metrics> Element
+
+The `<metrics>` element in `solr.xml` allows you to customize the metrics reported by Solr. You can define system properties that should not be returned, or define custom suppliers and reporters.
+
+In a default `solr.xml` you will not see any `<metrics>` configuration. If you would like to customize the metrics for your installation, see the section <<metrics-reporting.adoc#metrics-configuration,Metrics Configuration>>.
+
== Substituting JVM System Properties in solr.xml
-Solr supports variable substitution of JVM system property values in `solr.xml`, which allows runtime specification of various configuration options. The syntax is `${propertyname[:option default value]`}. This allows defining a default that can be overridden when Solr is launched. If a default value is not specified, then the property must be specified at runtime or the `solr.xml` file will generate an error when parsed.
+Solr supports variable substitution of JVM system property values in `solr.xml`, which allows runtime specification of various configuration options. The syntax is `${propertyname[:option default value]}`. This allows defining a default that can be overridden when Solr is launched. If a default value is not specified, then the property must be specified at runtime or the `solr.xml` file will generate an error when parsed.
-Any JVM system properties usually specified using the -D flag when starting the JVM, can be used as variables in the `solr.xml` file.
+Any JVM system properties usually specified using the `-D` flag when starting the JVM, can be used as variables in the `solr.xml` file.
-For example, in the `solr.xml` file shown below, the `socketTimeout` and `connTimeout` values are each set to "0". However, if you start Solr using '`bin/solr -DsocketTimeout=1000`', the `socketTimeout` option of the `HttpShardHandlerFactory` to be overridden using a value of 1000ms, while the `connTimeout` option will continue to use the default property value of "0".
+For example, in the `solr.xml` file shown below, the `socketTimeout` and `connTimeout` values are each set to "0". However, if you start Solr using `bin/solr -DsocketTimeout=1000`, the `socketTimeout` option of the `HttpShardHandlerFactory` to be overridden using a value of 1000ms, while the `connTimeout` option will continue to use the default property value of "0".
[source,xml]
----
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9e99a23f/solr/solr-ref-guide/src/metrics-reporting.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/metrics-reporting.adoc b/solr/solr-ref-guide/src/metrics-reporting.adoc
index 63fdbf3..4fa049e 100644
--- a/solr/solr-ref-guide/src/metrics-reporting.adoc
+++ b/solr/solr-ref-guide/src/metrics-reporting.adoc
@@ -28,7 +28,7 @@ Internally this feature uses the http://metrics.dropwizard.io[Dropwizard Metrics
* *timers* - measure the number and duration of events. They provide a count and histogram of timings.
* *gauges* - offer instantaneous reading of a current value, e.g., current queue depth, current number of active connections, free heap size.
-Each group of related metrics with unique names is managed in a *metric registry*. Solr maintains several such registries, each corresponding to a high-level group such as: `jvm`, `jetty`, `http`, `node`, and `core` (see <<Metric Registries>> below).
+Each group of related metrics with unique names is managed in a *metric registry*. Solr maintains several such registries, each corresponding to a high-level group such as: `jvm`, `jetty`, `node`, and `core` (see <<Metric Registries>> below).
For each group (and/or for each registry) there can be several *reporters*, which are components responsible for communication of metrics from selected registries to external systems. Currently implemented reporters support emitting metrics via JMX, Ganglia, Graphite and SLF4J.
@@ -42,7 +42,9 @@ Metrics are maintained and accumulated through all lifecycles of components from
These are the major groups of metrics that are collected:
-=== JVM Registry (`solr.jvm`):
+=== JVM Registry
+
+This registry is returned at `solr.jvm` and includes the following information. When making requests with the <<Metrics API>>, you can specify `&group=jvm` to limit to only these metrics.
* direct and mapped buffer pools
* class loading / unloading
@@ -50,26 +52,28 @@ These are the major groups of metrics that are collected:
* GC count and time
* heap, non-heap memory and GC pools
* number of threads, their states and deadlocks
+* System properties such as Java information, various installation directory paths, ports, and similar information. You can control what appears here by modifying `solr.xml`.
+// TODO for 7.0 fix this
+
+=== Node / CoreContainer Registry
-=== Node / CoreContainer Registry (`solr.node`):
+This registry is returned at `solr.node` and includes the following information. When making requests with the <<Metrics API>>, you can specify `&group=node` to limit to only these metrics.
* handler requests (count, timing): collections, info, admin, configSets, etc.
* number of cores (loaded, lazy, unloaded)
-=== Core (SolrCore) Registry:
+=== Core (SolrCore) Registry
-The <<Core Level Metrics,Core (SolrCore) Registry>> includes `solr.core.<collection>`, one for each core.
+The <<Core Level Metrics,Core (SolrCore) Registry>> includes `solr.core.<collection>`, one for each core. When making requests with the <<Metrics API>>, you can specify `&group=core` to limit to only these metrics.
* all common RequestHandler-s report: request timers / counters, timeouts, errors.
* <<Index Merge Metrics,index-level events>>: meters for minor / major merges, number of merged docs, number of deleted docs, gauges for currently running merges and their size.
* shard replication and transaction log replay on replicas (TBD, SOLR-9856)
-* TBD: caches, update handler details, and other relevant SolrInfoMBean-s
-
-=== HTTP Registry (`solr.http`):
-
* open / available / pending connections for shard handler and update handler
-=== Jetty Registry (`solr.jetty`):
+=== Jetty Registry
+
+This registry is returned at `solr.jetty` and includes the following information. When making requests with the <<Metrics API>>, you can specify `&group=jetty` to limit to only these metrics.
* threads and pools,
* connection and request timers,
@@ -77,6 +81,69 @@ The <<Core Level Metrics,Core (SolrCore) Registry>> includes `solr.core.<collect
In the future, metrics will be added for shard leaders and cluster nodes, including aggregations from per-core metrics.
+== Metrics Configuration
+
+The metrics available in your system can be customized by modifying the `<metrics>` element in `solr.xml`.
+
+TIP: See also the section <<format-of-solr-xml.adoc#format-of-solr-xml,Format of Solr.xml>> for more information about the `solr.xml` file, where to find it, and how to edit it.
+
+=== The <metrics><hiddenSysProps> Element
+
+This section of `solr.xml` allows you to define the system properties which are considered system-sensitive and should not be exposed via the Metrics API.
+
+If this section is not defined, the following default configuration is used which hides password and authentication information:
+
+[source,xml]
+<metrics>
+ <hiddenSysProps>
+ <str>javax.net.ssl.keyStorePassword</str>
+ <str>javax.net.ssl.trustStorePassword</str>
+ <str>basicauth</str>
+ <str>zkDigestPassword</str>
+ <str>zkDigestReadonlyPassword</str>
+ </hiddenSysProps>
+</metrics>
+
+=== The <metrics><reporters> Element
+
+Reporters consume the metrics data generated by Solr. See the section <<Reporters>> below for more details on how to configure custom reporters.
+
+=== The <metrics><suppliers> Element
+
+Suppliers help Solr generate metrics data. The `<metrics><suppliers>` section of `solr.xml` allows you to define your own implementations of metrics and configure parameters for them.
+
+Implementation of a custom metrics supplier is beyond the scope of this guide, but there are other customizations possible with the default implementation, via the elements described below.
+
+<counter>:: This element defines the implementation and configuration of a `Counter` supplier. The default implementation does not support any configuration.
+
+<meter>:: This element defines the implementation of a `Meter` supplier. The default implementation supports an additional parameter:
+`<str name="clock">`::: The type of clock to use for calculating EWMA rates. The supported values are:
+* `user`, the default, which uses `System.nanoTime()`
+* `cpu`, which uses the current thread's CPU time
+
+<histogram>:: This element defines the implementation of a `Histogram` supplier. This element also supports the `clock` parameter shown above with the `meter` element, and also:
+`<str name="reservoir">`::: The fully-qualified class name of the `Reservoir` implementation to use. The default is `com.codahale.metrics.ExponentiallyDecayingReservoir` but there are other options available with the http://metrics.dropwizard.io/3.1.0/manual/core/#histograms[Codahale Metrics library] that Solr uses. The following parameters are supported, within the mentioned limitations:
+* `size`, the reservoir size. The default is 1028.
+* `alpha`, the decay parameter. The default is 0.015. This is only valid for the `ExponentiallyDecayingReservoir`.
+* `window`, the window size, in seconds, and only valid for the `SlidingTimeWindowReservoir`. The default is 300 (5 minutes).
+
+<timer>:: This element defines an implementation of a `Timer` supplier. The default implementation supports the `clock` and `reservoir` parameters described above.
+
+As an example of a section of `solr.xml` that defines some of these custom parameters, the following defines the default `Meter` supplier with a non-default `clock` and the default `Timer` is used with a non-default reservoir:
+
+[source,xml]
+<metrics>
+ <suppliers>
+ <meter>
+ <str name="clock">cpu</str>
+ </meter>
+ <timer>
+ <str name="reservoir">com.codahale.metrics.SlidingTimeWindowReservoir</str>
+ <long name="window">600</long>
+ </timer>
+ </suppliers>
+</metrics>
+
== Reporters
Reporter configurations are specified in `solr.xml` file in `<metrics><reporter>` sections, for example:
@@ -101,6 +168,8 @@ Reporter configurations are specified in `solr.xml` file in `<metrics><reporter>
</solr>
----
+This example configures two reporters: <<Graphite Reporter,Graphite>> and <<SLF4J Reporter,SLF4J>>. See below for more details on how to configure reporters.
+
=== Reporter Arguments
Reporter plugins use the following arguments:
@@ -260,15 +329,17 @@ If the boolean flag `mergeDetails` is true then the following additional metrics
The `admin/metrics` endpoint provides access to all the metrics for all metric groups.
-A few query parameters are available to limit the request:
+A few query parameters are available to limit your request to only certain metrics:
group:: The metric group to retrieve. The default is `all` to retrieve all metrics for all groups. Other possible values are: `jvm`, `jetty`, `node`, and `core`. More than one group can be specified in a request; multiple group names should be separated by a comma.
type:: The type of metric to retrieve. The default is `all` to retrieve all metric types. Other possible values are `counter`, `gauge`, `histogram`, `meter`, and `timer`. More than one type can be specified in a request; multiple types should be separated by a comma.
-prefix:: The first characters of metric name that will filter the metrics returned to those starting with the provided string. It can be combined with group and/or type parameters. More than one prefix can be specified in a request; multiple prefixes should be separated by a comma. Prefix matching is also case-sensitive.
+prefix:: The first characters of metric name that will filter the metrics returned to those starting with the provided string. It can be combined with `group` and/or `type` parameters. More than one prefix can be specified in a request; multiple prefixes should be separated by a comma. Prefix matching is also case-sensitive.
+
+property:: Allows requesting only this metric from any compound metric. Multiple `property` parameters can be combined to act as an OR request. For example, to only get the 99th and 999th percentile values from all metric types and groups, you can add `&property=p99_ms&property=p999_ms` to your request. This can be combined with `group`, `type`, and `prefix` as necessary.
-compact:: When true, a more compact format of the response will be returned. Instead of a response like this:
+compact:: When false, a more verbose format of the response will be returned. Instead of a response like this:
+
[source,json]
"metrics": [
[31/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10671: Add
abstract doInit method to the SolrMetricReporter base class. (Christine
Poerschke, Anshum Gupta)
Posted by sh...@apache.org.
SOLR-10671: Add abstract doInit method to the SolrMetricReporter base class.
(Christine Poerschke, Anshum Gupta)
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2271e73e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2271e73e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2271e73e
Branch: refs/heads/feature/autoscaling
Commit: 2271e73e763b17f971731f6f69d6ffe46c40b944
Parents: b1b9a94
Author: Christine Poerschke <cp...@apache.org>
Authored: Mon Jun 5 12:17:38 2017 +0100
Committer: Christine Poerschke <cp...@apache.org>
Committed: Mon Jun 5 12:17:38 2017 +0100
----------------------------------------------------------------------
solr/CHANGES.txt | 6 +++++
.../apache/solr/metrics/SolrMetricReporter.java | 22 ++++++++++++---
.../metrics/reporters/SolrGangliaReporter.java | 14 +++++-----
.../metrics/reporters/SolrGraphiteReporter.java | 28 ++++++++++----------
.../solr/metrics/reporters/SolrJmxReporter.java | 16 +----------
.../metrics/reporters/SolrSlf4jReporter.java | 16 +++++------
.../reporters/solr/SolrClusterReporter.java | 7 ++++-
.../reporters/solr/SolrShardReporter.java | 9 +++++--
.../metrics/reporters/MockMetricReporter.java | 4 +--
9 files changed, 69 insertions(+), 53 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2271e73e/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index ff6ff46..7b3dcff 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -89,6 +89,9 @@ Upgrading from Solr 6.x
* In solrconfig.xml the deprecated <mergePolicy> and <mergeFactor> and <maxMergeDocs> elements have
been removed in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
+* Custom SolrMetricReporter classes must implement a new, factored out doInit() method and the validate() method
+ must pass for all reporters including reporters that are not enabled, please see SOLR-10671 for details.
+
New Features
----------------------
* SOLR-9857, SOLR-9858: Collect aggregated metrics from nodes and shard leaders in overseer. (ab)
@@ -230,6 +233,9 @@ Other Changes
* SOLR-10801: Remove several deprecated methods that were exposed to plugin writers (hossman)
+* SOLR-10671: Add abstract doInit method to the SolrMetricReporter base class.
+ (Christine Poerschke, Anshum Gupta)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2271e73e/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java b/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java
index 9ad15d0..222377b 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java
@@ -17,16 +17,21 @@
package org.apache.solr.metrics;
import java.io.Closeable;
+import java.lang.invoke.MethodHandles;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.util.SolrPluginUtils;
import org.apache.solr.util.plugin.PluginInfoInitialized;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Interface for 'pluggable' metric reporters.
*/
public abstract class SolrMetricReporter implements Closeable, PluginInfoInitialized {
+ private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
protected final String registryName;
protected final SolrMetricManager metricManager;
protected PluginInfo pluginInfo;
@@ -56,12 +61,23 @@ public abstract class SolrMetricReporter implements Closeable, PluginInfoInitial
}
}
validate();
+ if (!enabled) {
+ log.info("Reporter disabled for registry " + registryName);
+ return;
+ }
+ log.debug("Initializing for registry " + registryName);
+ doInit();
}
/**
- * Enable reporting, defaults to true. Implementations should check this flag in
- * {@link #validate()} and accordingly enable or disable reporting.
- * @param enabled enable, defaults to true when null or not set.
+ * Reporter initialization implementation.
+ */
+ protected abstract void doInit();
+
+ /**
+ * Enable reporting, defaults to true. {@link #init(PluginInfo)} checks
+ * this flag before calling {@link #doInit()} to initialize reporting.
+ * @param enabled - whether or not reporting is to be enabled
*/
public void setEnabled(Boolean enabled) {
if (enabled != null) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2271e73e/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGangliaReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGangliaReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGangliaReporter.java
index 142ddd8..4dfdbeb 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGangliaReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGangliaReporter.java
@@ -110,11 +110,14 @@ public class SolrGangliaReporter extends SolrMetricReporter {
}
@Override
- protected void validate() throws IllegalStateException {
- if (!enabled) {
- log.info("Reporter disabled for registry " + registryName);
- return;
+ protected void doInit() {
+ if (!testing) {
+ start();
}
+ }
+
+ @Override
+ protected void validate() throws IllegalStateException {
if (host == null) {
throw new IllegalStateException("Init argument 'host' must be set to a valid Ganglia server name.");
}
@@ -124,9 +127,6 @@ public class SolrGangliaReporter extends SolrMetricReporter {
if (period < 1) {
throw new IllegalStateException("Init argument 'period' is in time unit 'seconds' and must be at least 1.");
}
- if (!testing) {
- start();
- }
}
//this is a separate method for unit tests
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2271e73e/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGraphiteReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGraphiteReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGraphiteReporter.java
index d5b7a20..b8eddf5 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGraphiteReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGraphiteReporter.java
@@ -99,23 +99,10 @@ public class SolrGraphiteReporter extends SolrMetricReporter {
}
@Override
- protected void validate() throws IllegalStateException {
- if (!enabled) {
- log.info("Reporter disabled for registry " + registryName);
- return;
- }
- if (host == null) {
- throw new IllegalStateException("Init argument 'host' must be set to a valid Graphite server name.");
- }
- if (port == -1) {
- throw new IllegalStateException("Init argument 'port' must be set to a valid Graphite server port.");
- }
+ protected void doInit() {
if (reporter != null) {
throw new IllegalStateException("Already started once?");
}
- if (period < 1) {
- throw new IllegalStateException("Init argument 'period' is in time unit 'seconds' and must be at least 1.");
- }
GraphiteSender graphite;
String id = host + ":" + port + ":" + pickled;
graphite = serviceRegistry.getOrCreate(id, () -> {
@@ -147,6 +134,19 @@ public class SolrGraphiteReporter extends SolrMetricReporter {
}
@Override
+ protected void validate() throws IllegalStateException {
+ if (host == null) {
+ throw new IllegalStateException("Init argument 'host' must be set to a valid Graphite server name.");
+ }
+ if (port == -1) {
+ throw new IllegalStateException("Init argument 'port' must be set to a valid Graphite server port.");
+ }
+ if (period < 1) {
+ throw new IllegalStateException("Init argument 'period' is in time unit 'seconds' and must be at least 1.");
+ }
+ }
+
+ @Override
public void close() throws IOException {
if (reporter != null) {
reporter.close();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2271e73e/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
index d09e043..68a94ef 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
@@ -33,7 +33,6 @@ import com.codahale.metrics.JmxReporter;
import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.MetricRegistryListener;
-import org.apache.solr.core.PluginInfo;
import org.apache.solr.metrics.MetricsMap;
import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.metrics.SolrMetricReporter;
@@ -74,20 +73,7 @@ public class SolrJmxReporter extends SolrMetricReporter {
setDomain(registryName);
}
- /**
- * Initializes the reporter by finding an MBeanServer
- * and registering the metricManager's metric registry.
- *
- * @param pluginInfo the configuration for the reporter
- */
- @Override
- public synchronized void init(PluginInfo pluginInfo) {
- super.init(pluginInfo);
- if (!enabled) {
- log.info("Reporter disabled for registry " + registryName);
- return;
- }
- log.debug("Initializing for registry " + registryName);
+ protected synchronized void doInit() {
if (serviceUrl != null && agentId != null) {
mBeanServer = JmxUtil.findFirstMBeanServer();
log.warn("No more than one of serviceUrl({}) and agentId({}) should be configured, using first MBeanServer instead of configuration.",
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2271e73e/solr/core/src/java/org/apache/solr/metrics/reporters/SolrSlf4jReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrSlf4jReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrSlf4jReporter.java
index 8b7c35e..7dfe5bb 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrSlf4jReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrSlf4jReporter.java
@@ -95,14 +95,7 @@ public class SolrSlf4jReporter extends SolrMetricReporter {
}
@Override
- protected void validate() throws IllegalStateException {
- if (!enabled) {
- log.info("Reporter disabled for registry " + registryName);
- return;
- }
- if (period < 1) {
- throw new IllegalStateException("Init argument 'period' is in time unit 'seconds' and must be at least 1.");
- }
+ protected void doInit() {
if (instancePrefix == null) {
instancePrefix = registryName;
} else {
@@ -140,6 +133,13 @@ public class SolrSlf4jReporter extends SolrMetricReporter {
}
@Override
+ protected void validate() throws IllegalStateException {
+ if (period < 1) {
+ throw new IllegalStateException("Init argument 'period' is in time unit 'seconds' and must be at least 1.");
+ }
+ }
+
+ @Override
public void close() throws IOException {
if (reporter != null) {
reporter.close();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2271e73e/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
index c677bea..1e64b8a 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
@@ -179,13 +179,18 @@ public class SolrClusterReporter extends SolrMetricReporter {
}
@Override
- protected void validate() throws IllegalStateException {
+ protected void doInit() {
if (reports.isEmpty()) { // set defaults
reports = DEFAULT_REPORTS;
}
}
@Override
+ protected void validate() throws IllegalStateException {
+ // Nothing to validate
+ }
+
+ @Override
public void close() throws IOException {
if (reporter != null) {
reporter.close();;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2271e73e/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java
index 6ae84ac..b3b055d 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java
@@ -113,11 +113,16 @@ public class SolrShardReporter extends SolrMetricReporter {
}
@Override
- protected void validate() throws IllegalStateException {
+ protected void doInit() {
if (filters.isEmpty()) {
filters = DEFAULT_FILTERS;
}
- // start in inform(...) only when core is available
+ // start in setCore(SolrCore) when core is available
+ }
+
+ @Override
+ protected void validate() throws IllegalStateException {
+ // Nothing to validate
}
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2271e73e/solr/core/src/test/org/apache/solr/metrics/reporters/MockMetricReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/MockMetricReporter.java b/solr/core/src/test/org/apache/solr/metrics/reporters/MockMetricReporter.java
index 2ecc33b..e6110ba 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/MockMetricReporter.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/MockMetricReporter.java
@@ -22,7 +22,6 @@ import java.util.NoSuchElementException;
import com.codahale.metrics.Metric;
import com.codahale.metrics.MetricRegistry;
-import org.apache.solr.core.PluginInfo;
import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.metrics.SolrMetricReporter;
@@ -39,8 +38,7 @@ public class MockMetricReporter extends SolrMetricReporter {
}
@Override
- public void init(PluginInfo pluginInfo) {
- super.init(pluginInfo);
+ protected void doInit() {
didInit = true;
}
[17/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10280: document
"compact" format of metrics response
Posted by sh...@apache.org.
SOLR-10280: document "compact" format of metrics response
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/3b45d828
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/3b45d828
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/3b45d828
Branch: refs/heads/feature/autoscaling
Commit: 3b45d8284fed203eba146d98662485eb7a31364c
Parents: 3618fc5
Author: Cassandra Targett <ct...@apache.org>
Authored: Fri Jun 2 12:34:22 2017 -0500
Committer: Cassandra Targett <ct...@apache.org>
Committed: Fri Jun 2 12:36:19 2017 -0500
----------------------------------------------------------------------
solr/solr-ref-guide/src/metrics-reporting.adoc | 52 +++++++++++++++++++--
1 file changed, 49 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3b45d828/solr/solr-ref-guide/src/metrics-reporting.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/metrics-reporting.adoc b/solr/solr-ref-guide/src/metrics-reporting.adoc
index 6da87b5..63fdbf3 100644
--- a/solr/solr-ref-guide/src/metrics-reporting.adoc
+++ b/solr/solr-ref-guide/src/metrics-reporting.adoc
@@ -262,9 +262,55 @@ The `admin/metrics` endpoint provides access to all the metrics for all metric g
A few query parameters are available to limit the request:
-* *group*: The metric group to retrieve. The default is `all` to retrieve all metrics for all groups. Other possible values are: `jvm`, `jetty`, `node`, and `core`. More than one group can be specified in a request; multiple group names should be separated by a comma.
-* *type*: The type of metric to retrieve. The default is `all` to retrieve all metric types. Other possible values are `counter`, `gauge`, `histogram`, `meter`, and `timer`. More than one type can be specified in a request; multiple types should be separated by a comma.
-* *prefix*: The first characters of metric name that will filter the metrics returned to those starting with the provided string. It can be combined with group and/or type parameters. More than one prefix can be specified in a request; multiple prefixes should be separated by a comma. Prefix matching is also case-sensitive.
+group:: The metric group to retrieve. The default is `all` to retrieve all metrics for all groups. Other possible values are: `jvm`, `jetty`, `node`, and `core`. More than one group can be specified in a request; multiple group names should be separated by a comma.
+
+type:: The type of metric to retrieve. The default is `all` to retrieve all metric types. Other possible values are `counter`, `gauge`, `histogram`, `meter`, and `timer`. More than one type can be specified in a request; multiple types should be separated by a comma.
+
+prefix:: The first characters of metric name that will filter the metrics returned to those starting with the provided string. It can be combined with group and/or type parameters. More than one prefix can be specified in a request; multiple prefixes should be separated by a comma. Prefix matching is also case-sensitive.
+
+compact:: When true, a more compact format of the response will be returned. Instead of a response like this:
++
+[source,json]
+ "metrics": [
+ "solr.core.gettingstarted",
+ {
+ "CORE.aliases": {
+ "value": ["gettingstarted"]
+ },
+ "CORE.coreName": {
+ "value": "gettingstarted"
+ },
+ "CORE.indexDir": {
+ "value": "/solr/example/schemaless/solr/gettingstarted/data/index/"
+ },
+ "CORE.instanceDir": {
+ "value": "/solr/example/schemaless/solr/gettingstarted"
+ },
+ "CORE.refCount": {
+ "value": 1
+ },
+ "CORE.startTime": {
+ "value": "2017-03-14T11:43:23.822Z"
+ }
+ }
+ ]
++
+The response will look like this:
++
+[source,json]
+ "metrics": [
+ "solr.core.gettingstarted",
+ {
+ "CORE.aliases": [
+ "gettingstarted"
+ ],
+ "CORE.coreName": "gettingstarted",
+ "CORE.indexDir": "/solr/example/schemaless/solr/gettingstarted/data/index/",
+ "CORE.instanceDir": "/solr/example/schemaless/solr/gettingstarted",
+ "CORE.refCount": 1,
+ "CORE.startTime": "2017-03-14T11:43:23.822Z"
+ }
+ ]
Like other request handlers, the Metrics API can also take the `wt` parameter to define the output format.
[06/50] [abbrv] lucene-solr:feature/autoscaling: LUCENE-7852: Correct
copyright year(s) in lucene/LICENSE.txt and solr/LICENSE.txt files
Posted by sh...@apache.org.
LUCENE-7852: Correct copyright year(s) in lucene/LICENSE.txt and solr/LICENSE.txt files
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/72ba34f6
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/72ba34f6
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/72ba34f6
Branch: refs/heads/feature/autoscaling
Commit: 72ba34f66c60c6d6a052502c99f8f28c6b671e38
Parents: 5b93b73
Author: Christine Poerschke <cp...@apache.org>
Authored: Fri Jun 2 10:36:07 2017 +0100
Committer: Christine Poerschke <cp...@apache.org>
Committed: Fri Jun 2 10:36:07 2017 +0100
----------------------------------------------------------------------
lucene/CHANGES.txt | 3 +++
lucene/NOTICE.txt | 2 +-
solr/CHANGES.txt | 3 +++
solr/NOTICE.txt | 4 ++--
4 files changed, 9 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/72ba34f6/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 79a30fa..4e2e4f2 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -110,6 +110,9 @@ Other
* LUCENE-7540: Upgrade ICU to 59.1 (Mike McCandless, Jim Ferenczi)
+* LUCENE-7852: Correct copyright year(s) in lucene/LICENSE.txt file.
+ (Christine Poerschke, Steve Rowe)
+
======================= Lucene 6.7.0 =======================
Other
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/72ba34f6/lucene/NOTICE.txt
----------------------------------------------------------------------
diff --git a/lucene/NOTICE.txt b/lucene/NOTICE.txt
index 6260f3b..1903adc 100644
--- a/lucene/NOTICE.txt
+++ b/lucene/NOTICE.txt
@@ -1,5 +1,5 @@
Apache Lucene
-Copyright 2014 The Apache Software Foundation
+Copyright 2001-2017 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/72ba34f6/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 106a4df..af9ec5e 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -215,6 +215,9 @@ Other Changes
* SOLR-10791: Remove deprecated options in SSLTestConfig (hossman)
+* LUCENE-7852: Correct copyright year(s) in solr/LICENSE.txt file.
+ (Christine Poerschke, Steve Rowe)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/72ba34f6/solr/NOTICE.txt
----------------------------------------------------------------------
diff --git a/solr/NOTICE.txt b/solr/NOTICE.txt
index 214a2f8..4f3fa2a 100644
--- a/solr/NOTICE.txt
+++ b/solr/NOTICE.txt
@@ -1,6 +1,6 @@
==============================================================
Apache Solr
- Copyright 2006-2014 The Apache Software Foundation
+ Copyright 2006-2017 The Apache Software Foundation
==============================================================
This product includes software developed at
@@ -119,7 +119,7 @@ parrt@antlr.org
=========================================================================
Apache Lucene
-Copyright 2014 The Apache Software Foundation
+Copyright 2001-2017 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
[49/50] [abbrv] lucene-solr:feature/autoscaling: Merge
remote-tracking branch 'origin/feature/autoscaling' into feature/autoscaling
Posted by sh...@apache.org.
Merge remote-tracking branch 'origin/feature/autoscaling' into feature/autoscaling
# Conflicts:
# solr/core/src/java/org/apache/solr/cloud/ZkController.java
# solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/d3b5adfd
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d3b5adfd
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d3b5adfd
Branch: refs/heads/feature/autoscaling
Commit: d3b5adfd62c4e3c27937671a6a2ee9f42665b1c8
Parents: 2d54025 8bc7c47
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Wed Jun 7 19:09:24 2017 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Wed Jun 7 19:09:24 2017 +0530
----------------------------------------------------------------------
.../org/apache/solr/cloud/ZkController.java | 101 +++++--
.../cloud/autoscaling/AutoScalingConfig.java | 146 ++++++++++
.../cloud/autoscaling/NodeAddedTrigger.java | 45 ++-
.../solr/cloud/autoscaling/NodeLostTrigger.java | 41 ++-
.../autoscaling/OverseerTriggerThread.java | 52 +++-
.../cloud/autoscaling/ScheduledTriggers.java | 10 +-
.../solr/cloud/autoscaling/TriggerBase.java | 8 +-
.../autoscaling/TriggerIntegrationTest.java | 272 +++++++++++++++++--
.../solr/common/cloud/LiveNodesListener.java | 38 +++
.../apache/solr/common/cloud/ZkStateReader.java | 32 ++-
10 files changed, 681 insertions(+), 64 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d3b5adfd/solr/core/src/java/org/apache/solr/cloud/ZkController.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/cloud/ZkController.java
index 086c150,54514ba..de41871
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@@ -917,9 -962,7 +970,9 @@@ public class ZkController
String ourUrl = ZkCoreNodeProps.getCoreUrl(baseUrl, coreName);
log.debug("We are " + ourUrl + " and leader is " + leaderUrl);
boolean isLeader = leaderUrl.equals(ourUrl);
-
+ Replica.Type replicaType = zkStateReader.getClusterState().getCollection(collection).getReplica(coreZkNodeName).getType();
+ assert !(isLeader && replicaType == Type.PULL): "Pull replica became leader!";
-
++
try (SolrCore core = cc.getCore(desc.getName())) {
// recover from local transaction log and wait for it to complete before
@@@ -962,7 -1006,6 +1015,7 @@@
publish(desc, Replica.State.ACTIVE);
}
-
++
core.getCoreDescriptor().getCloudDescriptor().setHasRegistered(true);
}
@@@ -1296,15 -1329,13 +1349,15 @@@
assert false : "No collection was specified [" + collection + "]";
return;
}
+ Replica replica = zkStateReader.getClusterState().getReplica(collection, coreNodeName);
-
+
- ElectionContext context = electionContexts.remove(new ContextKey(collection, coreNodeName));
+ if (replica == null || replica.getType() != Type.PULL) {
+ ElectionContext context = electionContexts.remove(new ContextKey(collection, coreNodeName));
- if (context != null) {
- context.cancelElection();
+ if (context != null) {
+ context.cancelElection();
+ }
}
-
CloudDescriptor cloudDescriptor = cd.getCloudDescriptor();
zkStateReader.unregisterCore(cloudDescriptor.getCollectionName());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d3b5adfd/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
----------------------------------------------------------------------
[38/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-3702:
concat(..) function query
Posted by sh...@apache.org.
SOLR-3702: concat(..) function query
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/357f4dfb
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/357f4dfb
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/357f4dfb
Branch: refs/heads/feature/autoscaling
Commit: 357f4dfb1840af86395dde878b55aff77c8d7e2d
Parents: 99093ca
Author: Mikhail Khludnev <mk...@apache.org>
Authored: Sat Jun 3 19:35:29 2017 +0300
Committer: Mikhail Khludnev <mk...@apache.org>
Committed: Mon Jun 5 23:26:06 2017 +0300
----------------------------------------------------------------------
solr/CHANGES.txt | 2 +
.../StatsCollectorSupplierFactory.java | 2 +-
.../solr/analytics/util/AnalyticsParams.java | 3 +-
.../util/valuesource/ConcatStringFunction.java | 54 -------
.../util/valuesource/MultiStringFunction.java | 146 -------------------
.../apache/solr/search/ValueSourceParser.java | 9 ++
.../search/function/ConcatStringFunction.java | 53 +++++++
.../search/function/MultiStringFunction.java | 146 +++++++++++++++++++
.../apache/solr/search/QueryEqualityTest.java | 15 ++
.../solr/search/function/TestFunctionQuery.java | 19 +++
solr/solr-ref-guide/src/function-queries.adoc | 1 +
11 files changed, 248 insertions(+), 202 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index a11c470..df071eb 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -276,6 +276,8 @@ New Features
* SOLR-10479: Adds support for HttpShardHandlerFactory.loadBalancerRequests(MinimumAbsolute|MaximumFraction)
configuration. (Ramsey Haddad, Daniel Collins, Christine Poerschke)
+* SOLR-3702: concat(...) function query (Andrey Kudryavtsev via Mikhail Khludnev)
+
Bug Fixes
----------------------
* SOLR-10723 JSON Facet API: resize() implemented incorrectly for CountSlotAcc, HllAgg.NumericAcc
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java
index 30baec4..e22362d 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollectorSupplierFactory.java
@@ -36,7 +36,6 @@ import org.apache.solr.analytics.request.ExpressionRequest;
import org.apache.solr.analytics.util.AnalyticsParams;
import org.apache.solr.analytics.util.valuesource.AbsoluteValueDoubleFunction;
import org.apache.solr.analytics.util.valuesource.AddDoubleFunction;
-import org.apache.solr.analytics.util.valuesource.ConcatStringFunction;
import org.apache.solr.analytics.util.valuesource.ConstDateSource;
import org.apache.solr.analytics.util.valuesource.ConstDoubleSource;
import org.apache.solr.analytics.util.valuesource.ConstStringSource;
@@ -64,6 +63,7 @@ import org.apache.solr.schema.TrieDoubleField;
import org.apache.solr.schema.TrieFloatField;
import org.apache.solr.schema.TrieIntField;
import org.apache.solr.schema.TrieLongField;
+import org.apache.solr.search.function.ConcatStringFunction;
import org.apache.solr.util.DateMathParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/AnalyticsParams.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/AnalyticsParams.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/AnalyticsParams.java
index b9da1cf..f6716ff 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/AnalyticsParams.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/AnalyticsParams.java
@@ -22,6 +22,7 @@ import java.util.Set;
import org.apache.solr.common.params.FacetParams.FacetRangeInclude;
import org.apache.solr.common.params.FacetParams.FacetRangeOther;
+import org.apache.solr.search.function.ConcatStringFunction;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@@ -106,7 +107,7 @@ public interface AnalyticsParams {
//Strings
final static String CONSTANT_STRING = "const_str";
final static String REVERSE = "rev";
- final static String CONCATENATE = "concat";
+ final static String CONCATENATE = ConcatStringFunction.NAME;
public static final Set<String> STRING_OPERATION_SET = Collections.unmodifiableSet(Sets.newLinkedHashSet(Lists.newArrayList(CONSTANT_STRING,REVERSE,CONCATENATE)));
// Field Source Wrappers
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ConcatStringFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ConcatStringFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ConcatStringFunction.java
deleted file mode 100644
index b1e1dc0..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ConcatStringFunction.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.analytics.util.valuesource;
-
-import java.io.IOException;
-
-import org.apache.lucene.queries.function.FunctionValues;
-import org.apache.lucene.queries.function.ValueSource;
-import org.apache.solr.analytics.util.AnalyticsParams;
-
-/**
- * <code>ConcatStringFunction</code> concatenates the string values of its
- * components in the order given.
- */
-public class ConcatStringFunction extends MultiStringFunction {
- public final static String NAME = AnalyticsParams.CONCATENATE;
-
- public ConcatStringFunction(ValueSource[] sources) {
- super(sources);
- }
-
- protected String name() {
- return NAME;
- }
-
- @Override
- protected String func(int doc, FunctionValues[] valsArr) throws IOException {
- StringBuilder sb = new StringBuilder();
- for (FunctionValues val : valsArr) {
- String v = val.strVal(doc);
- if(v == null){
- return null;
- } else {
- sb.append(v);
- }
- }
- return sb.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiStringFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiStringFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiStringFunction.java
deleted file mode 100644
index 4689d8b..0000000
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiStringFunction.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.analytics.util.valuesource;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Map;
-
-import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.queries.function.FunctionValues;
-import org.apache.lucene.queries.function.ValueSource;
-import org.apache.lucene.queries.function.docvalues.StrDocValues;
-import org.apache.lucene.util.BytesRefBuilder;
-import org.apache.lucene.util.mutable.MutableValue;
-import org.apache.lucene.util.mutable.MutableValueStr;
-
-/**
- * Abstract {@link ValueSource} implementation which wraps multiple ValueSources
- * and applies an extendible string function to their values.
- **/
-public abstract class MultiStringFunction extends ValueSource {
- protected final ValueSource[] sources;
-
- public MultiStringFunction(ValueSource[] sources) {
- this.sources = sources;
- }
-
- abstract protected String name();
- abstract protected CharSequence func(int doc, FunctionValues[] valsArr) throws IOException;
-
- @Override
- public String description() {
- StringBuilder sb = new StringBuilder();
- sb.append(name()).append('(');
- boolean firstTime=true;
- for (ValueSource source : sources) {
- if (firstTime) {
- firstTime=false;
- } else {
- sb.append(',');
- }
- sb.append(source);
- }
- sb.append(')');
- return sb.toString();
- }
-
- @Override
- public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException {
- final FunctionValues[] valsArr = new FunctionValues[sources.length];
- for (int i=0; i<sources.length; i++) {
- valsArr[i] = sources[i].getValues(context, readerContext);
- }
-
- return new StrDocValues(this) {
- @Override
- public String strVal(int doc) throws IOException {
- CharSequence cs = func(doc, valsArr);
- return cs != null ? cs.toString() : null;
- }
-
- @Override
- public boolean exists(int doc) throws IOException {
- boolean exists = true;
- for (FunctionValues val : valsArr) {
- exists = exists & val.exists(doc);
- }
- return exists;
- }
-
- @Override
- public boolean bytesVal(int doc, BytesRefBuilder bytes) throws IOException {
- bytes.clear();
- CharSequence cs = func(doc, valsArr);
- if( cs != null ){
- bytes.copyChars(func(doc,valsArr));
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public String toString(int doc) throws IOException {
- StringBuilder sb = new StringBuilder();
- sb.append(name()).append('(');
- boolean firstTime=true;
- for (FunctionValues vals : valsArr) {
- if (firstTime) {
- firstTime=false;
- } else {
- sb.append(',');
- }
- sb.append(vals.toString(doc));
- }
- sb.append(')');
- return sb.toString();
- }
-
- @Override
- public ValueFiller getValueFiller() {
- return new ValueFiller() {
- private final MutableValueStr mval = new MutableValueStr();
-
- @Override
- public MutableValue getValue() {
- return mval;
- }
-
- @Override
- public void fillValue(int doc) throws IOException {
- mval.exists = bytesVal(doc, mval.value);
- }
- };
- }
- };
- }
-
- @Override
- public boolean equals(Object o) {
- if (getClass() != o.getClass()) return false;
- MultiStringFunction other = (MultiStringFunction)o;
- return this.name().equals(other.name())
- && Arrays.equals(this.sources, other.sources);
- }
-
- @Override
- public int hashCode() {
- return Arrays.hashCode(sources) + name().hashCode();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
index 517b86f..b599272 100644
--- a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
+++ b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
@@ -64,6 +64,7 @@ import org.apache.solr.search.facet.SumsqAgg;
import org.apache.solr.search.facet.UniqueAgg;
import org.apache.solr.search.facet.VarianceAgg;
import org.apache.solr.search.function.CollapseScoreFunction;
+import org.apache.solr.search.function.ConcatStringFunction;
import org.apache.solr.search.function.OrdFieldSource;
import org.apache.solr.search.function.ReverseOrdFieldSource;
import org.apache.solr.search.function.SolrComparisonBoolFunction;
@@ -932,6 +933,14 @@ public abstract class ValueSourceParser implements NamedListInitializedPlugin {
}
});
+ addParser("concat", new ValueSourceParser() {
+ @Override
+ public ValueSource parse(FunctionQParser fp) throws SyntaxError {
+ List<ValueSource> sources = fp.parseValueSourceList();
+ return new ConcatStringFunction(sources.toArray(new ValueSource[sources.size()]));
+ }
+ });
+
addParser("agg", new ValueSourceParser() {
@Override
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/core/src/java/org/apache/solr/search/function/ConcatStringFunction.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/function/ConcatStringFunction.java b/solr/core/src/java/org/apache/solr/search/function/ConcatStringFunction.java
new file mode 100644
index 0000000..9162342
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/search/function/ConcatStringFunction.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.search.function;
+
+import java.io.IOException;
+
+import org.apache.lucene.queries.function.FunctionValues;
+import org.apache.lucene.queries.function.ValueSource;
+
+/**
+ * <code>ConcatStringFunction</code> concatenates the string values of its
+ * components in the order given.
+ */
+public class ConcatStringFunction extends MultiStringFunction {
+ public final static String NAME = "concat";
+
+ public ConcatStringFunction(ValueSource[] sources) {
+ super(sources);
+ }
+
+ protected String name() {
+ return NAME;
+ }
+
+ @Override
+ protected String func(int doc, FunctionValues[] valsArr) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ for (FunctionValues val : valsArr) {
+ String v = val.strVal(doc);
+ if(v == null){
+ return null;
+ } else {
+ sb.append(v);
+ }
+ }
+ return sb.toString();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/core/src/java/org/apache/solr/search/function/MultiStringFunction.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/function/MultiStringFunction.java b/solr/core/src/java/org/apache/solr/search/function/MultiStringFunction.java
new file mode 100644
index 0000000..c4aef6c
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/search/function/MultiStringFunction.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.search.function;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Map;
+
+import org.apache.lucene.index.LeafReaderContext;
+import org.apache.lucene.queries.function.FunctionValues;
+import org.apache.lucene.queries.function.ValueSource;
+import org.apache.lucene.queries.function.docvalues.StrDocValues;
+import org.apache.lucene.util.BytesRefBuilder;
+import org.apache.lucene.util.mutable.MutableValue;
+import org.apache.lucene.util.mutable.MutableValueStr;
+
+/**
+ * Abstract {@link ValueSource} implementation which wraps multiple ValueSources
+ * and applies an extendible string function to their values.
+ **/
+public abstract class MultiStringFunction extends ValueSource {
+ protected final ValueSource[] sources;
+
+ public MultiStringFunction(ValueSource[] sources) {
+ this.sources = sources;
+ }
+
+ abstract protected String name();
+ abstract protected CharSequence func(int doc, FunctionValues[] valsArr) throws IOException;
+
+ @Override
+ public String description() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(name()).append('(');
+ boolean firstTime=true;
+ for (ValueSource source : sources) {
+ if (firstTime) {
+ firstTime=false;
+ } else {
+ sb.append(',');
+ }
+ sb.append(source);
+ }
+ sb.append(')');
+ return sb.toString();
+ }
+
+ @Override
+ public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException {
+ final FunctionValues[] valsArr = new FunctionValues[sources.length];
+ for (int i=0; i<sources.length; i++) {
+ valsArr[i] = sources[i].getValues(context, readerContext);
+ }
+
+ return new StrDocValues(this) {
+ @Override
+ public String strVal(int doc) throws IOException {
+ CharSequence cs = func(doc, valsArr);
+ return cs != null ? cs.toString() : null;
+ }
+
+ @Override
+ public boolean exists(int doc) throws IOException {
+ boolean exists = true;
+ for (FunctionValues val : valsArr) {
+ exists = exists & val.exists(doc);
+ }
+ return exists;
+ }
+
+ @Override
+ public boolean bytesVal(int doc, BytesRefBuilder bytes) throws IOException {
+ bytes.clear();
+ CharSequence cs = func(doc, valsArr);
+ if( cs != null ){
+ bytes.copyChars(func(doc,valsArr));
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public String toString(int doc) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ sb.append(name()).append('(');
+ boolean firstTime=true;
+ for (FunctionValues vals : valsArr) {
+ if (firstTime) {
+ firstTime=false;
+ } else {
+ sb.append(',');
+ }
+ sb.append(vals.toString(doc));
+ }
+ sb.append(')');
+ return sb.toString();
+ }
+
+ @Override
+ public ValueFiller getValueFiller() {
+ return new ValueFiller() {
+ private final MutableValueStr mval = new MutableValueStr();
+
+ @Override
+ public MutableValue getValue() {
+ return mval;
+ }
+
+ @Override
+ public void fillValue(int doc) throws IOException {
+ mval.exists = bytesVal(doc, mval.value);
+ }
+ };
+ }
+ };
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (getClass() != o.getClass()) return false;
+ MultiStringFunction other = (MultiStringFunction)o;
+ return this.name().equals(other.name())
+ && Arrays.equals(this.sources, other.sources);
+ }
+
+ @Override
+ public int hashCode() {
+ return Arrays.hashCode(sources) + name().hashCode();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java b/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java
index 0a9059c..aece15e 100644
--- a/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java
+++ b/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java
@@ -862,6 +862,21 @@ public class QueryEqualityTest extends SolrTestCaseJ4 {
}
}
+ public void testFuncConcat() throws Exception {
+ SolrQueryRequest req = req("myField","bar_f","myOtherField","bar_t");
+
+ try {
+ assertFuncEquals(req,
+ "concat(bar_f,bar_t)",
+ "concat($myField,bar_t)",
+ "concat(bar_f,$myOtherField)",
+ "concat($myField,$myOtherField)");
+
+ } finally {
+ req.close();
+ }
+ }
+
public void testFuncSingleValueMathFuncs() throws Exception {
SolrQueryRequest req = req("myVal","45", "myField","foo_i");
for (final String func : new String[] {"abs","rad","deg","sqrt","cbrt",
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java b/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
index e77c4ee..675123c 100644
--- a/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
+++ b/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
@@ -773,6 +773,25 @@ public class TestFunctionQuery extends SolrTestCaseJ4 {
}
+ public void testConcatFunction() {
+ clearIndex();
+
+ assertU(adoc("id", "1", "field1_t", "buzz", "field2_t", "word"));
+ assertU(adoc("id", "2", "field1_t", "1", "field2_t", "2","field4_t", "4"));
+ assertU(commit());
+
+ assertQ(req("q","id:1",
+ "fl","field:concat(field1_t,field2_t)"),
+ " //str[@name='field']='buzzword'");
+
+ assertQ(req("q","id:2",
+ "fl","field:concat(field1_t,field2_t,field4_t)"),
+ " //str[@name='field']='124'");
+
+ assertQ(req("q","id:1",
+ "fl","field:def(concat(field3_t, field4_t), 'defValue')"),
+ " //str[@name='field']='defValue'");
+ }
@Test
public void testPseudoFieldFunctions() throws Exception {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/357f4dfb/solr/solr-ref-guide/src/function-queries.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/function-queries.adoc b/solr/solr-ref-guide/src/function-queries.adoc
index 0a628c1..624406f 100644
--- a/solr/solr-ref-guide/src/function-queries.adoc
+++ b/solr/solr-ref-guide/src/function-queries.adoc
@@ -86,6 +86,7 @@ The table below summarizes the functions available for function queries.
|===
|Function |Description |Syntax Examples
|abs |Returns the absolute value of the specified value or function. |`abs(x)` `abs(-5)`
+|concat(v,f..)|concatenates the given string fields, literals and other functions |`concat(name," ",$param,def(opt,"-"))`
|"constant" |Specifies a floating point constant. |`1.5`
|def |`def` is short for default. Returns the value of field "field", or if the field does not exist, returns the default value specified. and yields the first value where `exists()==true`.) |`def(rating,5):` This `def()` function returns the rating, or if no rating specified in the doc, returns 5 `def(myfield, 1.0):` equivalent to `if(exists(myfield),myfield,1.0)`
|div |Divides one value or function by another. div(x,y) divides x by y. |`div(1,y)` `div(sum(x,100),max(y,1))`
[37/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10713: Add
common output files to .gitignore
Posted by sh...@apache.org.
SOLR-10713: Add common output files to .gitignore
Signed-off-by: Mike Drob <md...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/99093cae
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/99093cae
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/99093cae
Branch: refs/heads/feature/autoscaling
Commit: 99093caec5932b00decbc2ee5948610bfd9202ca
Parents: 6b022c9
Author: Jason Gerlowski <ge...@gmail.com>
Authored: Sun Jun 4 16:59:25 2017 -0400
Committer: Mike Drob <md...@apache.org>
Committed: Mon Jun 5 12:49:50 2017 -0500
----------------------------------------------------------------------
.gitignore | 41 +++++++----------------------------------
solr/.gitignore | 30 ++++++++++++++++++++++++++++++
solr/CHANGES.txt | 2 ++
3 files changed, 39 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/99093cae/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 4962ab9..7137e12 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,20 +1,19 @@
# .
/eclipse-build
/classes
-**/build
+build
/idea-build
-**/dist
-**/lib
-**/test-lib
+dist
+lib
+test-lib
/*~
/velocity.log
/build.properties
/.idea
lucene/**/*.iml
-solr/**/*.iml
parent.iml
-**/*.ipr
-**/*.iws
+*.ipr
+*.iws
/.project
/.classpath
/.settings
@@ -22,33 +21,7 @@ parent.iml
/prj.el
/bin
/bin.*
-**/pom.xml
+pom.xml
/nbproject
/nb-build
.pydevproject
-
-/solr/package
-
-# can this be minimized?
-/solr/example/start.jar
-/solr/example/webapps/*
-/solr/example/logs/*.log
-/solr/example/**/data
-/solr/example/solr/lib
-/solr/example/solr/logs
-/solr/example/solr/zoo_data
-/solr/example/work/*
-/solr/example/exampledocs/post.jar
-
-/solr/example/example-DIH/**/data
-/solr/example/example-DIH/**/dataimport.properties
-/solr/example/example-DIH/solr/mail/lib/*.jar
-
-solr/contrib/dataimporthandler/test-lib/
-
-solr/core/test-lib/
-
-solr/server/logs/
-solr/server/solr/zoo_data/
-solr/server/solr-webapp
-solr/server/start.jar
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/99093cae/solr/.gitignore
----------------------------------------------------------------------
diff --git a/solr/.gitignore b/solr/.gitignore
new file mode 100644
index 0000000..d02918b
--- /dev/null
+++ b/solr/.gitignore
@@ -0,0 +1,30 @@
+*.iml
+
+/bin/*.pid
+
+/contrib/dataimporthandler/test-lib/
+
+/core/test-lib/
+
+/example/start.jar
+/example/webapps/*
+/example/logs/*.log
+/example/**/data
+/example/solr/lib
+/example/solr/logs
+/example/solr/zoo_data
+/example/work/*
+/example/exampledocs/post.jar
+/example/example-DIH/**/data
+/example/example-DIH/**/dataimport.properties
+/example/example-DIH/solr/mail/lib/*.jar
+
+/package
+
+/server/logs/
+/server/solr/zoo_data/
+/server/solr-webapp
+/server/start.jar
+
+*.out
+*.err
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/99093cae/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 7b3dcff..a11c470 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -236,6 +236,8 @@ Other Changes
* SOLR-10671: Add abstract doInit method to the SolrMetricReporter base class.
(Christine Poerschke, Anshum Gupta)
+* SOLR-10713: Ignore .pid and .out files in solr working directory (Jason Gerlowski via Mike Drob)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
[42/50] [abbrv] lucene-solr:feature/autoscaling: Merge branch
'feature/autoscaling_solr7'
Posted by sh...@apache.org.
Merge branch 'feature/autoscaling_solr7'
# 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/d633c957
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d633c957
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d633c957
Branch: refs/heads/feature/autoscaling
Commit: d633c957cb79713e38bb3463969d7649cae18eaa
Parents: 4f55b43 b47572e
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Tue Jun 6 09:26:56 2017 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Tue Jun 6 09:26:56 2017 +0530
----------------------------------------------------------------------
solr/CHANGES.txt | 18 +-
.../src/java/org/apache/solr/cloud/Assign.java | 64 +-
.../apache/solr/cloud/CreateCollectionCmd.java | 2 +-
.../cloud/OverseerCollectionMessageHandler.java | 108 ++-
.../java/org/apache/solr/cloud/RestoreCmd.java | 2 +-
.../org/apache/solr/cloud/SplitShardCmd.java | 2 +-
.../org/apache/solr/cloud/ZkController.java | 1 +
.../cloud/autoscaling/AutoScalingHandler.java | 319 +++++++++
.../solr/cloud/autoscaling/package-info.java | 21 +
.../solr/cloud/rule/ServerSnitchContext.java | 25 +-
.../org/apache/solr/core/CoreContainer.java | 30 +-
.../apache/solr/core/SolrResourceLoader.java | 3 +-
.../org/apache/solr/handler/BlobHandler.java | 2 +-
.../solr/handler/RequestHandlerUtils.java | 13 +
.../org/apache/solr/handler/SchemaHandler.java | 2 +-
.../apache/solr/handler/SolrConfigHandler.java | 11 +-
.../solr/handler/admin/CollectionsHandler.java | 4 +-
.../solr/handler/admin/SecurityConfHandler.java | 4 +-
.../solr/response/TextResponseWriter.java | 13 +-
.../solr/security/PermissionNameProvider.java | 2 +
.../resources/apispec/autoscaling.Commands.json | 47 ++
.../autoscaling/AutoScalingHandlerTest.java | 338 ++++++++++
.../solr/cloud/autoscaling/TestPolicyCloud.java | 195 ++++++
.../solr/cloud/rule/ImplicitSnitchTest.java | 50 +-
.../solr/client/solrj/impl/CloudSolrClient.java | 15 +-
.../solrj/impl/SolrClientDataProvider.java | 256 ++++++++
.../impl/ZkClientClusterStateProvider.java | 11 +-
.../solrj/request/CollectionAdminRequest.java | 10 +-
.../solr/client/solrj/request/V2Request.java | 4 +-
.../cloud/autoscaling/AddReplicaSuggester.java | 69 ++
.../org/apache/solr/cloud/autoscaling/Cell.java | 57 ++
.../apache/solr/cloud/autoscaling/Clause.java | 460 +++++++++++++
.../cloud/autoscaling/ClusterDataProvider.java | 52 ++
.../cloud/autoscaling/MoveReplicaSuggester.java | 83 +++
.../apache/solr/cloud/autoscaling/Operand.java | 123 ++++
.../apache/solr/cloud/autoscaling/Policy.java | 519 +++++++++++++++
.../solr/cloud/autoscaling/PolicyHelper.java | 96 +++
.../solr/cloud/autoscaling/Preference.java | 87 +++
.../org/apache/solr/cloud/autoscaling/Row.java | 115 ++++
.../solr/cloud/autoscaling/package-info.java | 22 +
.../org/apache/solr/common/IteratorWriter.java | 21 +-
.../java/org/apache/solr/common/MapWriter.java | 10 +
.../apache/solr/common/cloud/DocCollection.java | 14 +
.../apache/solr/common/cloud/ZkStateReader.java | 1 +
.../solr/common/cloud/rule/ImplicitSnitch.java | 53 +-
.../apache/solr/common/cloud/rule/Snitch.java | 6 +-
.../solr/common/cloud/rule/SnitchContext.java | 7 +-
.../apache/solr/common/params/CommonParams.java | 6 +-
.../common/params/ModifiableSolrParams.java | 4 +
.../solr/common/util/CommandOperation.java | 50 +-
.../apache/solr/common/util/JavaBinCodec.java | 15 +-
.../java/org/apache/solr/common/util/Utils.java | 94 ++-
.../solr/cloud/autoscaling/TestPolicy.java | 654 +++++++++++++++++++
53 files changed, 3998 insertions(+), 192 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d633c957/solr/CHANGES.txt
----------------------------------------------------------------------
diff --cc solr/CHANGES.txt
index b0da3b8,d83b786..9bbb725
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@@ -208,36 -204,12 +214,42 @@@ Other Change
* SOLR-10755: delete/refactor many solrj deprecations (hossman)
+* SOLR-10752: replicationFactor (nrtReplicas) default is 0 if tlogReplicas is specified when creating a collection
+ (Tomás Fernández Löbbe)
+
+* SOLR-10757: delete/refactor/cleanup CollectionAdminRequest deprecations (hossman)
+
+* SOLR-10793: BlobHandler should have a well-known permission name (noble)
+
+* SOLR-10744: Update noggit to newer version (0.8) (noble)
+
+* SOLR-10792: Deprecate and remove implicit registration of "lucenePlusSort" aka OldLuceneQParser (hossman)
+
+* SOLR-10791: Remove deprecated options in SSLTestConfig (hossman)
+
+* LUCENE-7852: Correct copyright year(s) in solr/LICENSE.txt file.
+ (Christine Poerschke, Steve Rowe)
+
+* SOLR-8668: In solrconfig.xml remove <mergePolicy> (and related <mergeFactor> and <maxMergeDocs>)
+ support in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
+ (Christine Poerschke, hossman)
+
+* SOLR-10799: Extracted functionality to collect eligible replicas from HttpShardHandler.prepDistributed()
+ to a new method (Domenico Fabio Marino via Tomás Fernández Löbbe)
+
+* SOLR-10801: Remove several deprecated methods that were exposed to plugin writers (hossman)
+
+* SOLR-10671: Add abstract doInit method to the SolrMetricReporter base class.
+ (Christine Poerschke, Anshum Gupta)
+
+* SOLR-10713: Ignore .pid and .out files in solr working directory (Jason Gerlowski via Mike Drob)
+
+ * SOLR-10764: AutoScalingHandler should validate policy and preferences before updating zookeeper. (shalin)
+
+ * SOLR-10782: Improve error handling and tests for Snitch and subclasses and general cleanups. (Noble Paul, shalin)
+
+ * SOLR-10419: All collection APIs should use the new Policy framework for replica placement. (Noble Paul, shalin)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
@@@ -321,15 -253,7 +333,15 @@@ Bug Fixe
* SOLR-10723 JSON Facet API: resize() implemented incorrectly for CountSlotAcc, HllAgg.NumericAcc
resulting in exceptions when using a hashing faceting method and sorting by hll(numeric_field).
(yonik)
-
+
+* SOLR-10719: Creating a core.properties fails if the parent of core.properties is a symlinked dierctory
+ (Erick Erickson)
+
+* SOLR-10360: Solr HDFS snapshot export fails due to FileNotFoundException error when using MR1 instead of
+ yarn. (Hrishikesh via Mark Miller)
-
++
+* SOLR-10137: Ensure that ConfigSets created via API are mutable. (Hrishikesh via Mark Miller)
+
Optimizations
----------------------
* SOLR-10634: JSON Facet API: When a field/terms facet will retrieve all buckets (i.e. limit:-1)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d633c957/solr/core/src/java/org/apache/solr/cloud/Assign.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d633c957/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d633c957/solr/core/src/java/org/apache/solr/handler/BlobHandler.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d633c957/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d633c957/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java
----------------------------------------------------------------------
diff --cc solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java
index c80402f,f995d09..c18a8e4
--- a/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java
@@@ -216,13 -222,13 +222,17 @@@ public class CommandOperation
/**
* Parse the command operations into command objects
+ *
+ * @param rdr The payload
+ * @param singletonCommands commands that cannot be repeated
+ * @return parsed list of commands
*/
- public static List<CommandOperation> parse(Reader rdr) throws IOException {
+ public static List<CommandOperation> parse(Reader rdr, Set<String> singletonCommands) throws IOException {
JSONParser parser = new JSONParser(rdr);
+ parser.setFlags(parser.getFlags() |
+ JSONParser.ALLOW_MISSING_COLON_COMMA_BEFORE_OBJECT |
+ JSONParser.OPTIONAL_OUTER_BRACES
+ );
ObjectBuilder ob = new ObjectBuilder(parser);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d633c957/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
----------------------------------------------------------------------
[15/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-7452: tests:
templatize refinement tests
Posted by sh...@apache.org.
SOLR-7452: tests: templatize refinement tests
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/393a2ed1
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/393a2ed1
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/393a2ed1
Branch: refs/heads/feature/autoscaling
Commit: 393a2ed176b8acfe26cee821d7f3a8babed122b9
Parents: ac26d81
Author: yonik <yo...@apache.org>
Authored: Fri Jun 2 11:35:59 2017 -0400
Committer: yonik <yo...@apache.org>
Committed: Fri Jun 2 11:36:10 2017 -0400
----------------------------------------------------------------------
.../search/facet/TestJsonFacetRefinement.java | 71 ++++++++++++--------
1 file changed, 43 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/393a2ed1/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
index 6b542a1..e0b1865 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
@@ -235,6 +235,22 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
@Test
public void testBasicRefinement() throws Exception {
+ ModifiableSolrParams p = params("cat_s", "cat_s", "xy_s", "xy_s", "num_d", "num_d", "qw_s", "qw_s", "er_s","er_s");
+ doBasicRefinement( p );
+
+ p.set("terms","method:dv,");
+ doBasicRefinement( p );
+
+ // multi-valued strings
+ p = params("cat_s", "cat_ss", "xy_s", "xy_ss", "num_d", "num_d", "qw_s", "qw_ss", "er_s","er_ss");
+ doBasicRefinement( p );
+
+ // single valued docvalues
+ p = params("cat_s", "cat_sd", "xy_s", "xy_sd", "num_d", "num_dd", "qw_s", "qw_sd", "er_s","er_sd");
+ doBasicRefinement( p );
+ }
+
+ public void doBasicRefinement(ModifiableSolrParams p) throws Exception {
initServers();
Client client = servers.getClient(random().nextInt());
client.queryDefaults().set( "shards", servers.getShards(), "debugQuery", Boolean.toString(random().nextBoolean()) );
@@ -244,7 +260,6 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
client.deleteByQuery("*:*", null);
- ModifiableSolrParams p = params("cat_s", "cat_s", "xy_s", "xy_s", "num_d", "num_d", "qw_s", "qw_s", "er_s","er_s");
String cat_s = p.get("cat_s");
String xy_s = p.get("xy_s");
String qw_s = p.get("qw_s");
@@ -281,7 +296,7 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
- "cat0:{type:terms, field:${cat_s}, sort:'count desc', limit:1, overrequest:0, refine:false}" +
+ "cat0:{${terms} type:terms, field:${cat_s}, sort:'count desc', limit:1, overrequest:0, refine:false}" +
"}"
)
, "facets=={ count:8" +
@@ -291,7 +306,7 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
- "cat0:{type:terms, field:${cat_s}, sort:'count desc', limit:1, overrequest:0, refine:true}" +
+ "cat0:{${terms} type:terms, field:${cat_s}, sort:'count desc', limit:1, overrequest:0, refine:true}" +
"}"
)
, "facets=={ count:8" +
@@ -302,7 +317,7 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
// test that basic stats work for refinement
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
- "cat0:{type:terms, field:${cat_s}, sort:'count desc', limit:1, overrequest:0, refine:true, facet:{ stat1:'sum(${num_d})'} }" +
+ "cat0:{${terms} type:terms, field:${cat_s}, sort:'count desc', limit:1, overrequest:0, refine:true, facet:{ stat1:'sum(${num_d})'} }" +
"}"
)
, "facets=={ count:8" +
@@ -313,11 +328,11 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
// test sorting buckets by a different stat
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
- " cat0:{type:terms, field:${cat_s}, sort:'min1 asc', limit:1, overrequest:0, refine:false, facet:{ min1:'min(${num_d})'} }" +
- ",cat1:{type:terms, field:${cat_s}, sort:'min1 asc', limit:1, overrequest:0, refine:true, facet:{ min1:'min(${num_d})'} }" +
- ",qfacet:{type:query, q:'*:*', facet:{ cat2:{type:terms, field:${cat_s}, sort:'min1 asc', limit:1, overrequest:0, refine:true, facet:{ min1:'min(${num_d})'} } }}" + // refinement needed through a query facet
- ",allf:{type:terms, field:all_s, facet:{ cat3:{type:terms, field:${cat_s}, sort:'min1 asc', limit:1, overrequest:0, refine:true, facet:{ min1:'min(${num_d})'} } }}" + // refinement needed through field facet
- ",sum1:'sum(num_d)'" + // make sure that root bucket stats aren't affected by refinement
+ " cat0:{${terms} type:terms, field:${cat_s}, sort:'min1 asc', limit:1, overrequest:0, refine:false, facet:{ min1:'min(${num_d})'} }" +
+ ",cat1:{${terms} type:terms, field:${cat_s}, sort:'min1 asc', limit:1, overrequest:0, refine:true, facet:{ min1:'min(${num_d})'} }" +
+ ",qfacet:{type:query, q:'*:*', facet:{ cat2:{${terms} type:terms, field:${cat_s}, sort:'min1 asc', limit:1, overrequest:0, refine:true, facet:{ min1:'min(${num_d})'} } }}" + // refinement needed through a query facet
+ ",allf:{${terms} type:terms, field:all_s, facet:{ cat3:{${terms} type:terms, field:${cat_s}, sort:'min1 asc', limit:1, overrequest:0, refine:true, facet:{ min1:'min(${num_d})'} } }}" + // refinement needed through field facet
+ ",sum1:'sum(${num_d})'" + // make sure that root bucket stats aren't affected by refinement
"}"
)
, "facets=={ count:8" +
@@ -332,7 +347,7 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
// test partial buckets (field facet within field facet)
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
- "ab:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true, facet:{ xy:{type:terms, field:${xy_s}, limit:1, overrequest:0, refine:true } }}" +
+ "ab:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true, facet:{ xy:{${terms} type:terms, field:${xy_s}, limit:1, overrequest:0, refine:true } }}" +
"}"
)
, "facets=={ count:8" +
@@ -343,10 +358,10 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
// test that sibling facets and stats are included for _p buckets, but skipped for _s buckets
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
- " ab :{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true, facet:{ xy:{type:terms, field:${xy_s}, limit:1, overrequest:0, refine:true}, qq:{query:'*:*'},ww:'sum(${num_d})' }}" +
- ",ab2:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, facet:{ xy:{type:terms, field:${xy_s}, limit:1, overrequest:0, refine:true}, qq:{query:'*:*'},ww:'sum(${num_d})' }}" + // top level refine=false shouldn't matter
- ",allf :{type:terms, field:all_s, limit:1, overrequest:0, refine:true, facet:{cat:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true}, qq:{query:'*:*'},ww:'sum(${num_d})' }}" +
- ",allf2:{type:terms, field:all_s, limit:1, overrequest:0, refine:false, facet:{cat:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true}, qq:{query:'*:*'},ww:'sum(${num_d})' }}" + // top level refine=false shouldn't matter
+ " ab :{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true, facet:{ xy:{${terms} type:terms, field:${xy_s}, limit:1, overrequest:0, refine:true}, qq:{query:'*:*'},ww:'sum(${num_d})' }}" +
+ ",ab2:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, facet:{ xy:{${terms} type:terms, field:${xy_s}, limit:1, overrequest:0, refine:true}, qq:{query:'*:*'},ww:'sum(${num_d})' }}" + // top level refine=false shouldn't matter
+ ",allf :{${terms} type:terms, field:all_s, limit:1, overrequest:0, refine:true, facet:{cat:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true}, qq:{query:'*:*'},ww:'sum(${num_d})' }}" +
+ ",allf2:{${terms} type:terms, field:all_s, limit:1, overrequest:0, refine:false, facet:{cat:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true}, qq:{query:'*:*'},ww:'sum(${num_d})' }}" + // top level refine=false shouldn't matter
"}"
)
, "facets=={ count:8" +
@@ -360,7 +375,7 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
// test refining under the special "missing" bucket of a field facet
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
- "f:{type:terms, field:missing_s, limit:1, overrequest:0, missing:true, refine:true, facet:{ cat:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true } }}" +
+ "f:{${terms} type:terms, field:missing_s, limit:1, overrequest:0, missing:true, refine:true, facet:{ cat:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true } }}" +
"}"
)
, "facets=={ count:8" +
@@ -372,11 +387,11 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
// test all values missing in sub-facet
- " ab :{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, facet:{ zz:{type:terms, field:missing_s, limit:1, overrequest:0, refine:false, missing:true} }}" +
- ",ab2:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , facet:{ zz:{type:terms, field:missing_s, limit:1, overrequest:0, refine:true , missing:true} }}" +
+ " ab :{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, facet:{ zz:{${terms} type:terms, field:missing_s, limit:1, overrequest:0, refine:false, missing:true} }}" +
+ ",ab2:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , facet:{ zz:{${terms} type:terms, field:missing_s, limit:1, overrequest:0, refine:true , missing:true} }}" +
// test some values missing in sub-facet (and test that this works with normal partial bucket refinement)
- ", cd :{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, facet:{ qw:{type:terms, field:${qw_s}, limit:1, overrequest:0, refine:false, missing:true, facet:{qq:{query:'*:*'}} } }}" +
- ", cd2:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , facet:{ qw:{type:terms, field:${qw_s}, limit:1, overrequest:0, refine:true , missing:true, facet:{qq:{query:'*:*'}} } }}" +
+ ", cd :{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, facet:{ qw:{${terms} type:terms, field:${qw_s}, limit:1, overrequest:0, refine:false, missing:true, facet:{qq:{query:'*:*'}} } }}" +
+ ", cd2:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , facet:{ qw:{${terms} type:terms, field:${qw_s}, limit:1, overrequest:0, refine:true , missing:true, facet:{qq:{query:'*:*'}} } }}" +
"}"
)
@@ -391,9 +406,9 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
// test filling in missing "allBuckets"
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
- " cat :{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, allBuckets:true, facet:{ xy:{type:terms, field:${xy_s}, limit:1, overrequest:0, allBuckets:true, refine:false} } }" +
- ", cat2:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , allBuckets:true, facet:{ xy:{type:terms, field:${xy_s}, limit:1, overrequest:0, allBuckets:true, refine:true } } }" +
- ", cat3:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , allBuckets:true, facet:{ xy:{type:terms, field:${xy_s}, limit:1, overrequest:0, allBuckets:true, refine:true , facet:{f:'sum(${num_d})'} } } }" +
+ " cat :{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, allBuckets:true, facet:{ xy:{${terms} type:terms, field:${xy_s}, limit:1, overrequest:0, allBuckets:true, refine:false} } }" +
+ ", cat2:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , allBuckets:true, facet:{ xy:{${terms} type:terms, field:${xy_s}, limit:1, overrequest:0, allBuckets:true, refine:true } } }" +
+ ", cat3:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , allBuckets:true, facet:{ xy:{${terms} type:terms, field:${xy_s}, limit:1, overrequest:0, allBuckets:true, refine:true , facet:{f:'sum(${num_d})'} } } }" +
"}"
)
, "facets=={ count:8" +
@@ -406,8 +421,8 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
// test filling in missing numBuckets
client.testJQ(params(p, "q", "*:*",
"json.facet", "{" +
- " cat :{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, numBuckets:true, facet:{ er:{type:terms, field:${er_s}, limit:1, overrequest:0, numBuckets:true, refine:false} } }" +
- ", cat2:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , numBuckets:true, facet:{ er:{type:terms, field:${er_s}, limit:1, overrequest:0, numBuckets:true, refine:true } } }" +
+ " cat :{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, numBuckets:true, facet:{ er:{${terms} type:terms, field:${er_s}, limit:1, overrequest:0, numBuckets:true, refine:false} } }" +
+ ", cat2:{${terms} type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , numBuckets:true, facet:{ er:{${terms} type:terms, field:${er_s}, limit:1, overrequest:0, numBuckets:true, refine:true } } }" +
"}"
)
, "facets=={ count:8" +
@@ -420,7 +435,7 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
// simplistic join domain testing: no refinement == low count
client.testJQ(params(p, "q", "${xy_s}:Y", // query only matches one doc per shard
"json.facet", "{"+
- " cat0:{type:terms, field:${cat_s}, "+sort_limit_over+" refine:false,"+
+ " cat0:{${terms} type:terms, field:${cat_s}, "+sort_limit_over+" refine:false,"+
// self join on all_s ensures every doc on every shard included in facets
" domain: { join: { from:all_s, to:all_s } } }" +
"}"
@@ -434,7 +449,7 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
// simplistic join domain testing: refinement == correct count
client.testJQ(params(p, "q", "${xy_s}:Y", // query only matches one doc per shard
"json.facet", "{" +
- " cat0:{type:terms, field:${cat_s}, "+sort_limit_over+" refine:true,"+
+ " cat0:{${terms} type:terms, field:${cat_s}, "+sort_limit_over+" refine:true,"+
// self join on all_s ensures every doc on every shard included in facets
" domain: { join: { from:all_s, to:all_s } } }" +
"}"
@@ -449,10 +464,10 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
client.testJQ(params(p, "q", "${xy_s}:Y", // query only matches one doc per shard
"json.facet", "{" +
// top level facet has a single term
- " all:{type:terms, field:all_s, "+sort_limit_over+" refine:true, " +
+ " all:{${terms} type:terms, field:all_s, "+sort_limit_over+" refine:true, " +
" facet:{ "+
// subfacet will facet on cat after joining on all (so all docs should be included in subfacet)
- " cat0:{type:terms, field:${cat_s}, "+sort_limit_over+" refine:true,"+
+ " cat0:{${terms} type:terms, field:${cat_s}, "+sort_limit_over+" refine:true,"+
" domain: { join: { from:all_s, to:all_s } } } } }" +
"}"
)
[35/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10696: Fix
precommit
Posted by sh...@apache.org.
SOLR-10696: Fix precommit
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/6a9830cd
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6a9830cd
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6a9830cd
Branch: refs/heads/feature/autoscaling
Commit: 6a9830cdc0b5a5bf5ae18ff75119e64923d8266a
Parents: 99ca13f
Author: Joel Bernstein <jb...@apache.org>
Authored: Fri Jun 2 15:33:49 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Mon Jun 5 11:19:17 2017 -0400
----------------------------------------------------------------------
.../org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java | 2 --
1 file changed, 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a9830cd/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
index 7867048..658e66a 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/PercentileEvaluator.java
@@ -17,8 +17,6 @@
package org.apache.solr.client.solrj.io.eval;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
import java.util.List;
import java.io.IOException;
[33/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10805: Improve
error handling for statistical Stream Evaluators
Posted by sh...@apache.org.
SOLR-10805: Improve error handling for statistical Stream Evaluators
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/f275e3b2
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/f275e3b2
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/f275e3b2
Branch: refs/heads/feature/autoscaling
Commit: f275e3b254ef70179bf9923140c1d805c4314dd3
Parents: 2271e73
Author: Joel Bernstein <jb...@apache.org>
Authored: Fri Jun 2 12:13:34 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Mon Jun 5 11:19:17 2017 -0400
----------------------------------------------------------------------
.../org/apache/solr/client/solrj/io/eval/AnovaEvaluator.java | 5 +++++
.../apache/solr/client/solrj/io/eval/ConvolutionEvaluator.java | 6 ++++++
.../apache/solr/client/solrj/io/eval/CorrelationEvaluator.java | 5 +++++
.../apache/solr/client/solrj/io/eval/CovarianceEvaluator.java | 5 +++++
.../apache/solr/client/solrj/io/eval/DistanceEvaluator.java | 5 +++++
.../apache/solr/client/solrj/io/eval/FindDelayEvaluator.java | 5 +++++
.../apache/solr/client/solrj/io/eval/HistogramEvaluator.java | 6 ++++--
.../solr/client/solrj/io/eval/MovingAverageEvaluator.java | 5 +++++
.../org/apache/solr/client/solrj/io/eval/RankEvaluator.java | 5 +++++
.../org/apache/solr/client/solrj/io/eval/ReverseEvaluator.java | 5 +++++
.../org/apache/solr/client/solrj/io/eval/ScaleEvaluator.java | 5 +++++
.../apache/solr/client/solrj/io/eval/SequenceEvaluator.java | 5 +++++
12 files changed, 60 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/AnovaEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/AnovaEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/AnovaEvaluator.java
index b228821..d80e693 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/AnovaEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/AnovaEvaluator.java
@@ -40,6 +40,11 @@ public class AnovaEvaluator extends ComplexEvaluator implements Expressible {
}
public Tuple evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() < 2) {
+ throw new IOException("ANOVA evaluator expects atleast 2 parameters found: "+subEvaluators.size());
+ }
+
List<double[]> list = new ArrayList();
for(StreamEvaluator subEvaluator : subEvaluators) {
List<Number> nums = (List<Number>)subEvaluator.evaluate(tuple);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ConvolutionEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ConvolutionEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ConvolutionEvaluator.java
index 6ca178d..000fa0d 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ConvolutionEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ConvolutionEvaluator.java
@@ -38,6 +38,12 @@ public class ConvolutionEvaluator extends ComplexEvaluator implements Expressibl
}
public List<Number> evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 2) {
+ throw new IOException("Convolution evaluator expects 2 parameters found: "+subEvaluators.size());
+ }
+
+
StreamEvaluator colEval1 = subEvaluators.get(0);
StreamEvaluator colEval2 = subEvaluators.get(1);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CorrelationEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CorrelationEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CorrelationEvaluator.java
index fc3d8c3..05db16f 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CorrelationEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CorrelationEvaluator.java
@@ -37,6 +37,11 @@ public class CorrelationEvaluator extends ComplexEvaluator implements Expressibl
}
public Number evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 2) {
+ throw new IOException("Correlation evaluator expects 2 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator colEval1 = subEvaluators.get(0);
StreamEvaluator colEval2 = subEvaluators.get(1);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CovarianceEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CovarianceEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CovarianceEvaluator.java
index 7a6de68..5778289 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CovarianceEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/CovarianceEvaluator.java
@@ -37,6 +37,11 @@ public class CovarianceEvaluator extends ComplexEvaluator implements Expressible
}
public Number evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 2) {
+ throw new IOException("Covariance evaluator expects 2 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator colEval1 = subEvaluators.get(0);
StreamEvaluator colEval2 = subEvaluators.get(1);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DistanceEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DistanceEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DistanceEvaluator.java
index 201da4b..f4ac319 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DistanceEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/DistanceEvaluator.java
@@ -38,6 +38,11 @@ public class DistanceEvaluator extends ComplexEvaluator implements Expressible {
}
public Number evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 2) {
+ throw new IOException("Distance evaluator expects 2 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator colEval1 = subEvaluators.get(0);
StreamEvaluator colEval2 = subEvaluators.get(1);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/FindDelayEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/FindDelayEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/FindDelayEvaluator.java
index c5a9b8a..0cdd153 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/FindDelayEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/FindDelayEvaluator.java
@@ -38,6 +38,11 @@ public class FindDelayEvaluator extends ComplexEvaluator implements Expressible
}
public Number evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 2) {
+ throw new IOException("Finddelay evaluator expects 2 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator colEval1 = subEvaluators.get(0);
StreamEvaluator colEval2 = subEvaluators.get(1);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/HistogramEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/HistogramEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/HistogramEvaluator.java
index c691698..aa8408b 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/HistogramEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/HistogramEvaluator.java
@@ -42,6 +42,10 @@ public class HistogramEvaluator extends ComplexEvaluator implements Expressible
public List<Map> evaluate(Tuple tuple) throws IOException {
+ if(subEvaluators.size() != 2) {
+ throw new IOException("Histogram evaluator expects 2 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator colEval1 = subEvaluators.get(0);
List<Number> numbers1 = (List<Number>)colEval1.evaluate(tuple);
@@ -79,8 +83,6 @@ public class HistogramEvaluator extends ComplexEvaluator implements Expressible
return binList;
}
-
-
@Override
public StreamExpressionParameter toExpression(StreamFactory factory) throws IOException {
StreamExpression expression = new StreamExpression(factory.getFunctionName(getClass()));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/MovingAverageEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/MovingAverageEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/MovingAverageEvaluator.java
index 2e0788f..783116e 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/MovingAverageEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/MovingAverageEvaluator.java
@@ -38,6 +38,11 @@ public class MovingAverageEvaluator extends ComplexEvaluator implements Expressi
}
public List<Number> evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 2) {
+ throw new IOException("Moving average evaluator expects 2 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator colEval = subEvaluators.get(0);
StreamEvaluator windowEval = subEvaluators.get(1);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/RankEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/RankEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/RankEvaluator.java
index 8a22e94..2086c92 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/RankEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/RankEvaluator.java
@@ -38,6 +38,11 @@ public class RankEvaluator extends ComplexEvaluator implements Expressible {
}
public List<Number> evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 1) {
+ throw new IOException("Rank evaluator expects 1 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator colEval = subEvaluators.get(0);
List<Number> numbers = (List<Number>)colEval.evaluate(tuple);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ReverseEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ReverseEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ReverseEvaluator.java
index 016e995..cb11c91 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ReverseEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ReverseEvaluator.java
@@ -37,6 +37,11 @@ public class ReverseEvaluator extends ComplexEvaluator implements Expressible {
}
public List<Number> evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 1) {
+ throw new IOException("Reverse evaluator expects 1 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator colEval1 = subEvaluators.get(0);
List<Number> numbers1 = (List<Number>)colEval1.evaluate(tuple);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ScaleEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ScaleEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ScaleEvaluator.java
index 8ff2a7c..f45e2c4 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ScaleEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ScaleEvaluator.java
@@ -38,6 +38,11 @@ public class ScaleEvaluator extends ComplexEvaluator implements Expressible {
}
public List<Number> evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 2) {
+ throw new IOException("Scale evaluator expects 2 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator numEval = subEvaluators.get(0);
StreamEvaluator colEval1 = subEvaluators.get(1);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f275e3b2/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/SequenceEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/SequenceEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/SequenceEvaluator.java
index a88d695..c45e551 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/SequenceEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/SequenceEvaluator.java
@@ -38,6 +38,11 @@ public class SequenceEvaluator extends ComplexEvaluator implements Expressible {
}
public List<Number> evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 3) {
+ throw new IOException("Sequence evaluator expects 3 parameters found: "+subEvaluators.size());
+ }
+
StreamEvaluator sizeEval = subEvaluators.get(0);
StreamEvaluator startEval = subEvaluators.get(1);
StreamEvaluator strideEval = subEvaluators.get(2);
[43/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10278: A new
DSL to set cluster-wide preferences and policies on how to allocate replicas
to nodes
Posted by sh...@apache.org.
SOLR-10278: A new DSL to set cluster-wide preferences and policies on how to allocate replicas to nodes
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/790fb193
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/790fb193
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/790fb193
Branch: refs/heads/feature/autoscaling
Commit: 790fb193770dd718f707a524b3864191f53f380f
Parents: d633c95
Author: Noble Paul <no...@apache.org>
Authored: Tue Jun 6 14:51:01 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Tue Jun 6 14:51:01 2017 +0930
----------------------------------------------------------------------
solr/CHANGES.txt | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/790fb193/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 9bbb725..5343bc5 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -125,6 +125,9 @@ New Features
participate in elections.
(Tomás Fernández Löbbe)
+* SOLR-10278: A new DSL to set cluster-wide preferences and policies on how to allocate replicas to nodes
+ (noble, shalin)
+
* SOLR-10373: Implement read API for autoscaling configuration at /admin/autoscaling or
/cluster/autoscaling paths. (shalin)
[04/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10559: Add
tuple documentation
Posted by sh...@apache.org.
SOLR-10559: Add tuple documentation
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/5b93b738
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/5b93b738
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/5b93b738
Branch: refs/heads/feature/autoscaling
Commit: 5b93b738b1df85c66044ac5d9ec3a64a96b42e62
Parents: a827a9d
Author: Joel Bernstein <jb...@apache.org>
Authored: Thu Jun 1 17:14:02 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Thu Jun 1 17:14:02 2017 -0400
----------------------------------------------------------------------
solr/solr-ref-guide/src/stream-sources.adoc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/5b93b738/solr/solr-ref-guide/src/stream-sources.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/stream-sources.adoc b/solr/solr-ref-guide/src/stream-sources.adoc
index e8887b4..97a1ca4 100644
--- a/solr/solr-ref-guide/src/stream-sources.adoc
+++ b/solr/solr-ref-guide/src/stream-sources.adoc
@@ -497,7 +497,7 @@ the tuple stream from the Stream Expression into a list of Tuples.
[source,text]
----
tuple(a=add(1,1),
- b=search(collection1, q="cat:a", fl="a, b, c", sort"a desc"))
+ b=search(collection1, q="cat:a", fl="a, b, c", sort="a desc"))
----
[20/50] [abbrv] lucene-solr:feature/autoscaling: Ref Guide: add new
level-2 header to fix out of order heading levels
Posted by sh...@apache.org.
Ref Guide: add new level-2 header to fix out of order heading levels
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/a477ebb9
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/a477ebb9
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/a477ebb9
Branch: refs/heads/feature/autoscaling
Commit: a477ebb9852bfd828352e5d5eef9ce42c6a83b9c
Parents: 07bcd4d
Author: Cassandra Targett <ct...@apache.org>
Authored: Fri Jun 2 14:50:03 2017 -0500
Committer: Cassandra Targett <ct...@apache.org>
Committed: Fri Jun 2 14:52:02 2017 -0500
----------------------------------------------------------------------
solr/solr-ref-guide/src/codec-factory.adoc | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a477ebb9/solr/solr-ref-guide/src/codec-factory.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/codec-factory.adoc b/solr/solr-ref-guide/src/codec-factory.adoc
index 88bc083..8f47038 100644
--- a/solr/solr-ref-guide/src/codec-factory.adoc
+++ b/solr/solr-ref-guide/src/codec-factory.adoc
@@ -22,14 +22,12 @@ A `codecFactory` can be specified in `solrconfig.xml` to determine which Lucene
If not specified, Lucene's default codec is implicitly used.
-There are two alternatives to Lucene's default codec:
+== Alternatives to the Default Codec
+There are two alternatives to Lucene's default codec.
-. {solr-javadocs}/solr-core/org/apache/solr/core/SchemaCodecFactory.html[`solr.SchemaCodecFactory`]
-. {solr-javadocs}/solr-core/org/apache/solr/core/SimpleTextCodecFactory.html[`solr.SimpleTextCodecFactory`]
-
=== solr.SchemaCodecFactory
-`solr.SchemaCodecFactory` supports 2 key features:
+The {solr-javadocs}/solr-core/org/apache/solr/core/SchemaCodecFactory.html[`solr.SchemaCodecFactory`] supports 2 key features:
* Schema based per-fieldtype configuration for `docValuesFormat` and `postingsFormat` - see the <<field-type-definitions-and-properties.adoc#field-type-properties,Field Type Properties>> section for more details.
* A `compressionMode` option:
@@ -47,9 +45,9 @@ Example:
=== solr.SimpleTextCodecFactory
-This factory for Lucene's `SimpleTextCodec` produces a plain text human-readable index format.
+This factory for Lucene's {solr-javadocs}/solr-core/org/apache/solr/core/SimpleTextCodecFactory.html[`solr.SimpleTextCodecFactory`] produces a plain text human-readable index format.
-CAUTION: *FOR RECREATIONAL USE ONLY*. This codec should never be used in production. `SimpleTextCodec` is relatively slow and takes up a large amount of disk space. Its use should be limited to educational and debugging purposes.
+CAUTION: *FOR RECREATIONAL USE ONLY*. This codec should never be used in production. `SimpleTextCodec` is relatively slow and takes up a large amount of disk space. Its use should be limited to educational and debugging purposes.
Example:
[12/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-9735:
sysLoadAverage and headusage are now double
Posted by sh...@apache.org.
SOLR-9735: sysLoadAverage and headusage are now double
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/e36d2517
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/e36d2517
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/e36d2517
Branch: refs/heads/feature/autoscaling
Commit: e36d251751143ba36e06defbca8de4ff228483a0
Parents: 2a625df
Author: Noble Paul <no...@apache.org>
Authored: Sat Jun 3 00:17:58 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Sat Jun 3 00:17:58 2017 +0930
----------------------------------------------------------------------
.../apache/solr/cloud/autoscaling/Clause.java | 77 +++++++++++---------
.../apache/solr/cloud/autoscaling/Operand.java | 6 ++
.../solr/cloud/autoscaling/TestPolicy.java | 20 ++++-
3 files changed, 66 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e36d2517/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
index 9b88d78..1a8a7ab 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
@@ -20,7 +20,6 @@ package org.apache.solr.cloud.autoscaling;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -33,7 +32,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.solr.cloud.autoscaling.Policy.ReplicaInfo;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.cloud.rule.ImplicitSnitch;
-import org.apache.solr.common.util.RetryUtil;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.Utils;
@@ -189,26 +187,6 @@ public class Clause implements MapWriter, Comparable<Clause> {
operand = EQUAL;
expectedVal = validate(s, val, true);
}
-/*
-
-
- String value = val == null ? null : String.valueOf(val).trim();
- if(WILDCARD)
-
- if ((expectedVal = WILDCARD.parse(value)) != null) {
- operand = WILDCARD;
- } else if ((expectedVal = NOT_EQUAL.parse(value)) != null) {
- operand = NOT_EQUAL;
- } else if ((expectedVal = GREATER_THAN.parse(value)) != null) {
- operand = GREATER_THAN;
- } else if ((expectedVal = LESS_THAN.parse(value)) != null) {
- operand = LESS_THAN;
- } else {
- operand = EQUAL;
- expectedVal = EQUAL.parse(value);
- }
-*/
-
return new Condition(conditionName, expectedVal, operand);
} catch (Exception e) {
@@ -358,15 +336,17 @@ public class Clause implements MapWriter, Comparable<Clause> {
static class ValidateInfo {
final Class type;
final Set<String> vals;
- final Long min;
- final Long max;
+ final Number min;
+ final Number max;
- ValidateInfo(Class type, Set<String> vals, Long min, Long max) {
+ ValidateInfo(Class type, Set<String> vals, Number min, Number max) {
this.type = type;
this.vals = vals;
this.min = min;
+ if(min != null && !type.isInstance(min)) throw new RuntimeException("wrong min value type");
this.max = max;
+ if(max != null && !type.isInstance(max)) throw new RuntimeException("wrong max value type");
}
}
@@ -383,13 +363,26 @@ public class Clause implements MapWriter, Comparable<Clause> {
ValidateInfo info = validatetypes.get(name);
if (info == null && name.startsWith(ImplicitSnitch.SYSPROP)) info = validatetypes.get("STRING");
if (info == null) throw new RuntimeException("Unknown type :" + name);
- if (info.type == Long.class) {
- Long num = parseNumber(name, val);
+ if (info.type == Double.class) {
+ Double num = parseDouble(name, val);
+ if (isRuleVal) {
+ if (info.min != null)
+ if (Double.compare(num, (Double) info.min) == -1)
+ throw new RuntimeException(name + ": " + val + " must be greater than " + info.min);
+ if (info.max != null)
+ if (Double.compare(num, (Double) info.max) == 1)
+ throw new RuntimeException(name + ": " + val + " must be less than " + info.max);
+ }
+ return num;
+ } else if (info.type == Long.class) {
+ Long num = parseLong(name, val);
if (isRuleVal) {
if (info.min != null)
- if (num < info.min) throw new RuntimeException(name + ": " + val + " must be greater than " + info.min);
+ if (num < info.min.longValue())
+ throw new RuntimeException(name + ": " + val + " must be greater than " + info.min);
if (info.max != null)
- if (num > info.max) throw new RuntimeException(name + ": " + val + " must be less than " + info.max);
+ if (num > info.max.longValue())
+ throw new RuntimeException(name + ": " + val + " must be less than " + info.max);
}
return num;
} else if (info.type == String.class) {
@@ -401,9 +394,10 @@ public class Clause implements MapWriter, Comparable<Clause> {
}
}
- public static Long parseNumber(String name, Object val) {
+ public static Long parseLong(String name, Object val) {
if (val == null) return null;
- Number num = 0;
+ if (val instanceof Long) return (Long) val;
+ Number num = null;
if (val instanceof String) {
try {
num = Long.parseLong(((String) val).trim());
@@ -421,6 +415,23 @@ public class Clause implements MapWriter, Comparable<Clause> {
return num.longValue();
}
+ public static Double parseDouble(String name, Object val) {
+ if (val == null) return null;
+ if (val instanceof Double) return (Double) val;
+ Number num = 0;
+ if (val instanceof String) {
+ try {
+ num = Double.parseDouble((String) val);
+ } catch (NumberFormatException e) {
+ throw new RuntimeException(name + ": " + val + "not a valid number", e);
+ }
+
+ } else if (val instanceof Number) {
+ num = (Number) val;
+ }
+ return num.doubleValue();
+ }
+
private static final Map<String, ValidateInfo> validatetypes = new HashMap();
static {
@@ -431,8 +442,8 @@ public class Clause implements MapWriter, Comparable<Clause> {
validatetypes.put(ImplicitSnitch.DISK, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
validatetypes.put(ImplicitSnitch.NODEROLE, new ValidateInfo(String.class, unmodifiableSet(new HashSet(Arrays.asList("overseer"))), null, null));
validatetypes.put(ImplicitSnitch.CORES, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
- validatetypes.put(ImplicitSnitch.SYSLOADAVG, new ValidateInfo(Long.class, null, 0l, 100l));
- validatetypes.put(ImplicitSnitch.HEAPUSAGE, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
+ validatetypes.put(ImplicitSnitch.SYSLOADAVG, new ValidateInfo(Double.class, null, 0d, 100d));
+ validatetypes.put(ImplicitSnitch.HEAPUSAGE, new ValidateInfo(Double.class, null, 0d, null));
validatetypes.put("NUMBER", new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));//generic number validation
validatetypes.put("STRING", new ValidateInfo(String.class, null, null, null));//generic string validation
validatetypes.put("node", new ValidateInfo(String.class, null, null, null));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e36d2517/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java
index bf36ef6..f961cac 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java
@@ -57,6 +57,9 @@ public enum Operand {
@Override
public TestStatus match(Object ruleVal, Object testVal) {
if (testVal == null) return NOT_APPLICABLE;
+ if (ruleVal instanceof Double) {
+ return Double.compare(Clause.parseDouble("", testVal), (Double) ruleVal) == 1 ? PASS : FAIL;
+ }
return getLong(testVal) > getLong(ruleVal) ? PASS: FAIL ;
}
@@ -69,6 +72,9 @@ public enum Operand {
@Override
public TestStatus match(Object ruleVal, Object testVal) {
if (testVal == null) return NOT_APPLICABLE;
+ if (ruleVal instanceof Double) {
+ return Double.compare(Clause.parseDouble("", testVal), (Double) ruleVal) == -1 ? PASS : FAIL;
+ }
return getLong(testVal) < getLong(ruleVal) ? PASS: FAIL ;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e36d2517/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
index 6bdd7cf..120276c 100644
--- a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
+++ b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
@@ -125,8 +125,8 @@ public class TestPolicy extends SolrTestCaseJ4 {
expectError("sysLoadAvg", "-1","must be greater than");
expectError("sysLoadAvg", -1,"must be greater than");
- assertEquals(12l,Clause.validate("sysLoadAvg", "12.46",true));
- assertEquals(12l,Clause.validate("sysLoadAvg", 12.46d,true));
+ assertEquals(12.46d,Clause.validate("sysLoadAvg", "12.46",true));
+ assertEquals(12.46,Clause.validate("sysLoadAvg", 12.46d,true));
expectError("ip_1", "300","must be less than ");
@@ -138,8 +138,8 @@ public class TestPolicy extends SolrTestCaseJ4 {
expectError("heapUsage", "-1","must be greater than");
expectError("heapUsage", -1,"must be greater than");
- assertEquals(69l,Clause.validate("heapUsage", "69.9",true));
- assertEquals(69l,Clause.validate("heapUsage", 69.9d,true));
+ assertEquals(69.9d,Clause.validate("heapUsage", "69.9",true));
+ assertEquals(69.9d,Clause.validate("heapUsage", 69.9d,true));
expectError("port", "70000","must be less than ");
expectError("port", 70000,"must be less than ");
@@ -175,6 +175,18 @@ public class TestPolicy extends SolrTestCaseJ4 {
c = new Clause((Map<String, Object>) Utils.fromJSONString("{replica:0, nodeRole:'!overseer'}"));
assertTrue(c.tag.isPass("OVERSEER"));
assertFalse(c.tag.isPass("overseer"));
+
+ c = new Clause((Map<String, Object>) Utils.fromJSONString("{replica:0, sysLoadAvg:'<12.7'}"));
+ assertTrue(c.tag.isPass("12.6"));
+ assertTrue(c.tag.isPass(12.6d));
+ assertFalse(c.tag.isPass("12.9"));
+ assertFalse(c.tag.isPass(12.9d));
+
+ c = new Clause((Map<String, Object>) Utils.fromJSONString("{replica:0, sysLoadAvg:'>12.7'}"));
+ assertTrue(c.tag.isPass("12.8"));
+ assertTrue(c.tag.isPass(12.8d));
+ assertFalse(c.tag.isPass("12.6"));
+ assertFalse(c.tag.isPass(12.6d));
}
public void testRow() {
[24/50] [abbrv] lucene-solr:feature/autoscaling: LUCENE-7705: Allow
CharTokenizer-derived tokenizers and KeywordTokenizer to configure the max
token length, fix test failure.
Posted by sh...@apache.org.
LUCENE-7705: Allow CharTokenizer-derived tokenizers and KeywordTokenizer to configure the max token length, fix test failure.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2eacf13d
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2eacf13d
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2eacf13d
Branch: refs/heads/feature/autoscaling
Commit: 2eacf13def4dc9fbea1de9c79150c05682b0cdec
Parents: 9efa022 15a8a24
Author: Erick <er...@apache.org>
Authored: Fri Jun 2 20:32:37 2017 -0700
Committer: Erick <er...@apache.org>
Committed: Fri Jun 2 20:32:37 2017 -0700
----------------------------------------------------------------------
.../collection1/conf/schema-tokenizer-test.xml | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
[29/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10782: Improve
error handling and tests for Snitch and subclasses and general cleanups
Posted by sh...@apache.org.
SOLR-10782: Improve error handling and tests for Snitch and subclasses and general cleanups
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/744d1ab9
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/744d1ab9
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/744d1ab9
Branch: refs/heads/feature/autoscaling
Commit: 744d1ab974fac19f1721097f3bd5250adfbca528
Parents: e36d251
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Mon Jun 5 13:41:26 2017 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Mon Jun 5 13:41:26 2017 +0530
----------------------------------------------------------------------
solr/CHANGES.txt | 2 +
.../src/java/org/apache/solr/cloud/Assign.java | 11 ++---
.../cloud/OverseerCollectionMessageHandler.java | 11 +----
.../solr/cloud/rule/ServerSnitchContext.java | 18 ++-----
.../solr/handler/admin/CollectionsHandler.java | 1 -
.../autoscaling/AutoScalingHandlerTest.java | 11 +++--
.../solr/cloud/autoscaling/TestPolicyCloud.java | 22 ++++-----
.../solr/cloud/rule/ImplicitSnitchTest.java | 50 ++++++++++++++++++--
.../solrj/impl/SolrClientDataProvider.java | 14 ++----
.../apache/solr/cloud/autoscaling/Clause.java | 40 +++++++++-------
.../apache/solr/cloud/autoscaling/Policy.java | 29 +++++-------
.../solr/cloud/autoscaling/PolicyHelper.java | 2 -
.../solr/cloud/autoscaling/Preference.java | 13 +++--
.../apache/solr/common/cloud/SolrZkClient.java | 15 ------
.../solr/common/cloud/rule/ImplicitSnitch.java | 48 ++++++++++++-------
.../apache/solr/common/cloud/rule/Snitch.java | 6 +--
.../solr/common/cloud/rule/SnitchContext.java | 3 +-
.../java/org/apache/solr/common/util/Utils.java | 23 +++++++++
.../solr/cloud/autoscaling/TestPolicy.java | 8 ++--
19 files changed, 186 insertions(+), 141 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 7a3c81f..21d9ec1 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -206,6 +206,8 @@ Other Changes
* SOLR-10764: AutoScalingHandler should validate policy and preferences before updating zookeeper. (shalin)
+* SOLR-10782: Improve error handling and tests for Snitch and subclasses and general cleanups. (Noble Paul, shalin)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/core/src/java/org/apache/solr/cloud/Assign.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/Assign.java b/solr/core/src/java/org/apache/solr/cloud/Assign.java
index d790e7a..4e1fd68 100644
--- a/solr/core/src/java/org/apache/solr/cloud/Assign.java
+++ b/solr/core/src/java/org/apache/solr/cloud/Assign.java
@@ -41,19 +41,17 @@ import org.apache.solr.common.cloud.ClusterState;
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.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.util.StrUtils;
+import org.apache.solr.common.util.Utils;
import org.apache.solr.core.CoreContainer;
import org.apache.zookeeper.KeeperException;
import static java.util.Collections.singletonMap;
import static org.apache.solr.cloud.autoscaling.Policy.POLICY;
-import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
import static org.apache.solr.common.cloud.ZkStateReader.CORE_NAME_PROP;
import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
import static org.apache.solr.common.cloud.ZkStateReader.SOLR_AUTOSCALING_CONF_PATH;
-import static org.apache.solr.common.params.CommonParams.NAME;
public class Assign {
@@ -198,8 +196,8 @@ public class Assign {
positions = getNodesViaRules(clusterState, shard, numberOfNodes, cc, coll, createNodeList, l);
}
String policyName = coll.getStr(POLICY);
- Map autoSalingJson = cc.getZkController().getZkStateReader().getZkClient().getJson(SOLR_AUTOSCALING_CONF_PATH, true);
- if (policyName != null || autoSalingJson.get(Policy.CLUSTER_POLICY) != null) {
+ Map autoScalingJson = Utils.getJson(cc.getZkController().getZkClient(), SOLR_AUTOSCALING_CONF_PATH, true);
+ if (policyName != null || autoScalingJson.get(Policy.CLUSTER_POLICY) != null) {
positions= Assign.getPositionsUsingPolicy(collectionName, Collections.singletonList(shard), numberOfNodes,
policyName, cc.getZkController().getZkStateReader());
}
@@ -223,8 +221,9 @@ public class Assign {
.withClusterStateProvider(new ZkClientClusterStateProvider(zkStateReader))
.build()) {
SolrClientDataProvider clientDataProvider = new SolrClientDataProvider(csc);
+ Map<String, Object> autoScalingJson = Utils.getJson(zkStateReader.getZkClient(), SOLR_AUTOSCALING_CONF_PATH, true);
Map<String, List<String>> locations = PolicyHelper.getReplicaLocations(collName,
- zkStateReader.getZkClient().getJson(SOLR_AUTOSCALING_CONF_PATH, true),
+ autoScalingJson,
clientDataProvider, singletonMap(collName, policyName), shardNames, numReplicas);
Map<ReplicaAssigner.Position, String> result = new HashMap<>();
for (Map.Entry<String, List<String>> e : locations.entrySet()) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/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 2ff6285..e5b3b9b 100644
--- a/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
@@ -37,16 +37,12 @@ import com.google.common.collect.ImmutableMap;
import org.apache.commons.lang.StringUtils;
import org.apache.solr.client.solrj.SolrResponse;
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.impl.HttpSolrClient.RemoteSolrException;
-import org.apache.solr.client.solrj.impl.SolrClientDataProvider;
-import org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.cloud.autoscaling.Policy;
-import org.apache.solr.cloud.autoscaling.PolicyHelper;
import org.apache.solr.cloud.overseer.OverseerAction;
import org.apache.solr.cloud.rule.ReplicaAssigner;
import org.apache.solr.cloud.rule.ReplicaAssigner.Position;
@@ -65,7 +61,6 @@ import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CollectionAdminParams;
import org.apache.solr.common.params.CollectionParams.CollectionAction;
-import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
import org.apache.solr.common.params.ModifiableSolrParams;
@@ -86,7 +81,6 @@ import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static java.util.Collections.singletonMap;
import static org.apache.solr.cloud.autoscaling.Policy.POLICY;
import static org.apache.solr.common.cloud.DocCollection.SNITCH;
import static org.apache.solr.common.cloud.ZkStateReader.BASE_URL_PROP;
@@ -719,8 +713,7 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler
int numPullReplicas) throws KeeperException, InterruptedException {
List<Map> rulesMap = (List) message.get("rule");
String policyName = message.getStr(POLICY);
- Map autoSalingJson = zkStateReader.getZkClient().getJson(SOLR_AUTOSCALING_CONF_PATH, true);
- autoSalingJson = autoSalingJson == null ? Collections.EMPTY_MAP : autoSalingJson;
+ Map autoScalingJson = Utils.getJson(zkStateReader.getZkClient(), SOLR_AUTOSCALING_CONF_PATH, true);
if (rulesMap == null && policyName == null) {
int i = 0;
@@ -747,7 +740,7 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler
}
}
- if (policyName != null || autoSalingJson.get(Policy.CLUSTER_POLICY) != null) {
+ if (policyName != null || autoScalingJson.get(Policy.CLUSTER_POLICY) != null) {
return Assign.getPositionsUsingPolicy(message.getStr(COLLECTION_PROP, message.getStr(NAME)),
shardNames, numNrtReplicas, policyName, zkStateReader);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/core/src/java/org/apache/solr/cloud/rule/ServerSnitchContext.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/rule/ServerSnitchContext.java b/solr/core/src/java/org/apache/solr/cloud/rule/ServerSnitchContext.java
index 446c80f..01680f5 100644
--- a/solr/core/src/java/org/apache/solr/cloud/rule/ServerSnitchContext.java
+++ b/solr/core/src/java/org/apache/solr/cloud/rule/ServerSnitchContext.java
@@ -19,6 +19,7 @@ package org.apache.solr.cloud.rule;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
+import java.util.Collections;
import java.util.Map;
import org.apache.solr.client.solrj.SolrRequest;
@@ -36,7 +37,7 @@ import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.Utils;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.update.UpdateShardHandler;
-import org.apache.zookeeper.data.Stat;
+import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,21 +56,12 @@ public class ServerSnitchContext extends SnitchContext {
}
- public Map getZkJson(String path) {
+ public Map getZkJson(String path) throws KeeperException, InterruptedException {
if (coreContainer.isZooKeeperAware()) {
- try {
- byte[] data = coreContainer.getZkController().getZkClient().getData(path, null, new Stat(), true);
- if (data == null) return null;
- return (Map) Utils.fromJSON(data);
- } catch (Exception e) {
- log.warn("Unable to read from ZK path : " + path, e);
- return null;
-
- }
+ return Utils.getJson(coreContainer.getZkController().getZkClient(), path, true);
} else {
- return null;
+ return Collections.emptyMap();
}
-
}
public void invokeRemote(String node, ModifiableSolrParams params, String klas, RemoteCallback callback) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index fbc76a3..9a3fe00 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -47,7 +47,6 @@ import org.apache.solr.cloud.OverseerSolrResponse;
import org.apache.solr.cloud.OverseerTaskQueue;
import org.apache.solr.cloud.OverseerTaskQueue.QueueEvent;
import org.apache.solr.cloud.ZkController;
-import org.apache.solr.cloud.autoscaling.Policy;
import org.apache.solr.cloud.overseer.SliceMutator;
import org.apache.solr.cloud.rule.ReplicaAssigner;
import org.apache.solr.cloud.rule.Rule;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
index 8b0401b..7bf4616 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
@@ -226,7 +226,6 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
-// SolrQuery query = new SolrQuery().setParam(CommonParams.QT, path);
req = createAutoScalingRequest(SolrRequest.METHOD.GET, null);
response = solrClient.request(req);
@@ -252,17 +251,19 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
assertNotNull(sortedNodes);
assertEquals(2, sortedNodes.size());
- String[] sortedNodeNames = new String[2];
for (int i = 0; i < 2; i++) {
Map node = (Map) sortedNodes.get(i);
assertNotNull(node);
assertEquals(5, node.size());
- assertNotNull(sortedNodeNames[i] = (String) node.get("node"));
+ assertNotNull(node.get("node"));
assertNotNull(node.get("cores"));
- assertEquals("0", String.valueOf(node.get("cores")));
+ assertEquals(0L, node.get("cores"));
assertNotNull(node.get("freedisk"));
+ assertTrue(node.get("freedisk") instanceof Double);
assertNotNull(node.get("sysLoadAvg"));
+ assertTrue(node.get("sysLoadAvg") instanceof Double);
assertNotNull(node.get("heapUsage"));
+ assertTrue(node.get("heapUsage") instanceof Double);
}
List<Map<String, Object>> violations = (List<Map<String, Object>>) diagnostics.get("violations");
@@ -314,7 +315,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
static class AutoScalingRequest extends SolrRequest {
protected final String message;
- public AutoScalingRequest(METHOD m, String path, String message) {
+ AutoScalingRequest(METHOD m, String path, String message) {
super(m, path);
this.message = message;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
index 27655e6..fa592f3 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
@@ -55,17 +55,19 @@ public class TestPolicyCloud extends SolrCloudTestCase {
}
@After
- public void removeCollections() throws Exception {
+ public void after() throws Exception {
cluster.deleteAllCollections();
+ cluster.getSolrClient().getZkStateReader().getZkClient().setData(ZkStateReader.SOLR_AUTOSCALING_CONF_PATH,
+ "{}".getBytes(StandardCharsets.UTF_8), true);
}
+
public void testCreateCollectionAddShardUsingPolicy() throws Exception {
JettySolrRunner jetty = cluster.getRandomJetty(random());
int port = jetty.getLocalPort();
- String commands = "{set-policy :{c1 : [{replica:1 , shard:'#EACH', port: 'REPLACEPORT'}]}}".replace("REPLACEPORT",String.valueOf(port));
- Utils.fromJSONString(commands);
+ String commands = "{set-policy :{c1 : [{replica:1 , shard:'#EACH', port: '" + port + "'}]}}";
cluster.getSolrClient().request(AutoScalingHandlerTest.createAutoScalingRequest(SolrRequest.METHOD.POST, commands));
- Map<String, Object> json = cluster.getZkClient().getJson(ZkStateReader.SOLR_AUTOSCALING_CONF_PATH, true);
+ Map<String, Object> json = Utils.getJson(cluster.getZkClient(), ZkStateReader.SOLR_AUTOSCALING_CONF_PATH, true);
assertEquals("full json:"+ Utils.toJSONString(json) , "#EACH",
Utils.getObjectByPath(json, true, "/policies/c1[0]/shard"));
CollectionAdminRequest.createCollectionWithImplicitRouter("policiesTest", null, "s1,s2", 1)
@@ -80,8 +82,6 @@ public class TestPolicyCloud extends SolrCloudTestCase {
coll = getCollectionState("policiesTest");
assertEquals(1, coll.getSlice("s3").getReplicas().size());
coll.getSlice("s3").forEach(replica -> assertEquals(jetty.getNodeName(), replica.getNodeName()));
- cluster.getSolrClient().getZkStateReader().getZkClient().setData(ZkStateReader.SOLR_AUTOSCALING_CONF_PATH,
- "{}".getBytes(StandardCharsets.UTF_8), true);
}
public void testDataProvider() throws IOException, SolrServerException, KeeperException, InterruptedException {
@@ -98,14 +98,14 @@ public class TestPolicyCloud extends SolrCloudTestCase {
assertNotNull(val.get("heapUsage"));
assertNotNull(val.get("sysLoadAvg"));
assertTrue(((Number) val.get("cores")).intValue() > 0);
- assertTrue("freedisk value is " + ((Number) val.get("freedisk")).longValue(), ((Number) val.get("freedisk")).longValue() > 0);
- assertTrue("heapUsage value is " + ((Number) val.get("heapUsage")).longValue(), ((Number) val.get("heapUsage")).longValue() > 0);
- assertTrue("sysLoadAvg value is " + ((Number) val.get("sysLoadAvg")).longValue(), ((Number) val.get("sysLoadAvg")).longValue() > 0);
+ assertTrue("freedisk value is " + ((Number) val.get("freedisk")).doubleValue(), Double.compare(((Number) val.get("freedisk")).doubleValue(), 0.0d) > 0);
+ assertTrue("heapUsage value is " + ((Number) val.get("heapUsage")).doubleValue(), Double.compare(((Number) val.get("heapUsage")).doubleValue(), 0.0d) > 0);
+ assertTrue("sysLoadAvg value is " + ((Number) val.get("sysLoadAvg")).doubleValue(), Double.compare(((Number) val.get("sysLoadAvg")).doubleValue(), 0.0d) > 0);
String overseerNode = OverseerTaskProcessor.getLeaderNode(cluster.getZkClient());
cluster.getSolrClient().request(CollectionAdminRequest.addRole(overseerNode, "overseer"));
for (int i = 0; i < 10; i++) {
- Map<String, Object> data = cluster.getSolrClient().getZkStateReader().getZkClient().getJson(ZkStateReader.ROLES, true);
- if (i >= 9 && data == null) {
+ Map<String, Object> data = Utils.getJson(cluster.getZkClient(), ZkStateReader.ROLES, true);
+ if (i >= 9 && data.isEmpty()) {
throw new RuntimeException("NO overseer node created");
}
Thread.sleep(100);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/core/src/test/org/apache/solr/cloud/rule/ImplicitSnitchTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/rule/ImplicitSnitchTest.java b/solr/core/src/test/org/apache/solr/cloud/rule/ImplicitSnitchTest.java
index 94ca771..709555f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/rule/ImplicitSnitchTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/rule/ImplicitSnitchTest.java
@@ -17,24 +17,28 @@
package org.apache.solr.cloud.rule;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import com.google.common.collect.Sets;
+import org.apache.lucene.util.LuceneTestCase;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.cloud.rule.ImplicitSnitch;
+import org.apache.solr.common.cloud.rule.RemoteCallback;
import org.apache.solr.common.cloud.rule.SnitchContext;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.zookeeper.KeeperException;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.when;
-public class ImplicitSnitchTest {
+public class ImplicitSnitchTest extends LuceneTestCase {
private ImplicitSnitch snitch;
private SnitchContext context;
@@ -186,4 +190,42 @@ public class ImplicitSnitchTest {
assertFalse(snitch.isKnownTag("ip_5"));
}
+ @Test
+ public void testExceptions() throws Exception {
+ ImplicitSnitch implicitSnitch = new ImplicitSnitch();
+ ServerSnitchContext noNodeExceptionSnitch = new ServerSnitchContext(null, null, new HashMap<>(), null) {
+ @Override
+ public Map getZkJson(String path) throws KeeperException, InterruptedException {
+ throw new KeeperException.NoNodeException();
+ }
+ };
+ implicitSnitch.getTags("", Collections.singleton(ImplicitSnitch.ROLE), noNodeExceptionSnitch);
+ Map map = (Map) noNodeExceptionSnitch.retrieve(ZkStateReader.ROLES); // todo it the key really supposed to /roles.json?
+ assertNotNull(map);
+ assertEquals(0, map.size());
+
+ implicitSnitch.getTags("", Collections.singleton(ImplicitSnitch.NODEROLE), noNodeExceptionSnitch);
+ map = (Map) noNodeExceptionSnitch.retrieve(ZkStateReader.ROLES); // todo it the key really supposed to /roles.json?
+ assertNotNull(map);
+ assertEquals(0, map.size());
+
+ ServerSnitchContext keeperExceptionSnitch = new ServerSnitchContext(null, null, new HashMap<>(), null) {
+ @Override
+ public Map getZkJson(String path) throws KeeperException, InterruptedException {
+ throw new KeeperException.ConnectionLossException();
+ }
+ };
+ expectThrows(SolrException.class, KeeperException.ConnectionLossException.class, () -> implicitSnitch.getTags("", Collections.singleton(ImplicitSnitch.ROLE), keeperExceptionSnitch));
+ expectThrows(SolrException.class, KeeperException.ConnectionLossException.class, () -> implicitSnitch.getTags("", Collections.singleton(ImplicitSnitch.NODEROLE), keeperExceptionSnitch));
+
+ ServerSnitchContext remoteExceptionSnitch = new ServerSnitchContext(null, null, new HashMap<>(), null) {
+ @Override
+ public void invokeRemote(String node, ModifiableSolrParams params, String klas, RemoteCallback callback) {
+ throw new RuntimeException();
+ }
+ };
+ expectThrows(SolrException.class, RuntimeException.class, () -> implicitSnitch.getTags("", Collections.singleton(ImplicitSnitch.CORES), remoteExceptionSnitch));
+ expectThrows(SolrException.class, RuntimeException.class, () -> implicitSnitch.getTags("", Collections.singleton(ImplicitSnitch.DISK), remoteExceptionSnitch));
+ expectThrows(SolrException.class, RuntimeException.class, () -> implicitSnitch.getTags("", Collections.singleton(ImplicitSnitch.SYSPROP + "xyz"), remoteExceptionSnitch));
+ }
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
index 8bca7dc..e40f32b 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientDataProvider.java
@@ -50,7 +50,7 @@ import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.Utils;
-import org.apache.zookeeper.data.Stat;
+import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -135,15 +135,9 @@ public class SolrClientDataProvider implements ClusterDataProvider, MapWriter {
}
- public Map getZkJson(String path) {
- try {
- byte[] data = zkClientClusterStateProvider.getZkStateReader().getZkClient().getData(path, null, new Stat(), true);
- if (data == null) return null;
- return (Map) Utils.fromJSON(data);
- } catch (Exception e) {
- log.warn("Unable to read from ZK path : " + path, e);
- return null;
- }
+ @Override
+ public Map getZkJson(String path) throws KeeperException, InterruptedException {
+ return Utils.getJson(zkClientClusterStateProvider.getZkStateReader().getZkClient(), path, true);
}
public void invokeRemote(String node, ModifiableSolrParams params, String klas, RemoteCallback callback) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
index 1a8a7ab..5e4078a 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
@@ -20,6 +20,7 @@ package org.apache.solr.cloud.autoscaling;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -36,7 +37,6 @@ import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.Utils;
import static java.util.Collections.singletonMap;
-import static java.util.Collections.unmodifiableSet;
import static org.apache.solr.cloud.autoscaling.Clause.TestStatus.PASS;
import static org.apache.solr.cloud.autoscaling.Operand.EQUAL;
import static org.apache.solr.cloud.autoscaling.Operand.GREATER_THAN;
@@ -71,7 +71,7 @@ public class Clause implements MapWriter, Comparable<Clause> {
collection = parse(COLLECTION, m);
shard = parse(SHARD, m);
if(m.get(REPLICA) == null){
- throw new RuntimeException(StrUtils.formatString("'replica' is required" + Utils.toJSONString(m)));
+ throw new RuntimeException(StrUtils.formatString("'replica' is required in {0}", Utils.toJSONString(m)));
}
this.replica = parse(REPLICA, m);
if (replica.op == WILDCARD) throw new RuntimeException("replica val cannot be null" + Utils.toJSONString(m));
@@ -344,9 +344,9 @@ public class Clause implements MapWriter, Comparable<Clause> {
this.type = type;
this.vals = vals;
this.min = min;
- if(min != null && !type.isInstance(min)) throw new RuntimeException("wrong min value type");
+ if(min != null && !type.isInstance(min)) throw new RuntimeException("wrong min value type, expected: " + type.getName() + " actual: " + min.getClass().getName());
this.max = max;
- if(max != null && !type.isInstance(max)) throw new RuntimeException("wrong max value type");
+ if(max != null && !type.isInstance(max)) throw new RuntimeException("wrong max value type, expected: " + type.getName() + " actual: " + max.getClass().getName());
}
}
@@ -412,13 +412,17 @@ public class Clause implements MapWriter, Comparable<Clause> {
} else if (val instanceof Number) {
num = (Number) val;
}
- return num.longValue();
+
+ if (num != null) {
+ return num.longValue();
+ }
+ throw new RuntimeException(name + ": " + val + "not a valid number");
}
public static Double parseDouble(String name, Object val) {
if (val == null) return null;
if (val instanceof Double) return (Double) val;
- Number num = 0;
+ Number num = null;
if (val instanceof String) {
try {
num = Double.parseDouble((String) val);
@@ -429,26 +433,28 @@ public class Clause implements MapWriter, Comparable<Clause> {
} else if (val instanceof Number) {
num = (Number) val;
}
- return num.doubleValue();
+
+ if (num != null) {
+ return num.doubleValue();
+ }
+ throw new RuntimeException(name + ": " + val + "not a valid number");
}
- private static final Map<String, ValidateInfo> validatetypes = new HashMap();
+ private static final Map<String, ValidateInfo> validatetypes = new HashMap<>();
static {
validatetypes.put("collection", new ValidateInfo(String.class, null, null, null));
validatetypes.put("shard", new ValidateInfo(String.class, null, null, null));
- validatetypes.put("replica", new ValidateInfo(Long.class, null, 0l, null));
- validatetypes.put(ImplicitSnitch.PORT, new ValidateInfo(Long.class, null, 1024l, 65535l));
- validatetypes.put(ImplicitSnitch.DISK, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
- validatetypes.put(ImplicitSnitch.NODEROLE, new ValidateInfo(String.class, unmodifiableSet(new HashSet(Arrays.asList("overseer"))), null, null));
- validatetypes.put(ImplicitSnitch.CORES, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
+ validatetypes.put("replica", new ValidateInfo(Long.class, null, 0L, null));
+ validatetypes.put(ImplicitSnitch.PORT, new ValidateInfo(Long.class, null, 1L, 65535L));
+ validatetypes.put(ImplicitSnitch.DISK, new ValidateInfo(Double.class, null, 0d, Double.MAX_VALUE));
+ validatetypes.put(ImplicitSnitch.NODEROLE, new ValidateInfo(String.class, Collections.singleton("overseer"), null, null));
+ validatetypes.put(ImplicitSnitch.CORES, new ValidateInfo(Long.class, null, 0L, Long.MAX_VALUE));
validatetypes.put(ImplicitSnitch.SYSLOADAVG, new ValidateInfo(Double.class, null, 0d, 100d));
validatetypes.put(ImplicitSnitch.HEAPUSAGE, new ValidateInfo(Double.class, null, 0d, null));
- validatetypes.put("NUMBER", new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));//generic number validation
+ validatetypes.put("NUMBER", new ValidateInfo(Long.class, null, 0L, Long.MAX_VALUE));//generic number validation
validatetypes.put("STRING", new ValidateInfo(String.class, null, null, null));//generic string validation
validatetypes.put("node", new ValidateInfo(String.class, null, null, null));
- for (String ip : ImplicitSnitch.IP_SNITCHES) validatetypes.put(ip, new ValidateInfo(Long.class, null, 0l, 255l));
-
-
+ for (String ip : ImplicitSnitch.IP_SNITCHES) validatetypes.put(ip, new ValidateInfo(Long.class, null, 0L, 255L));
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java
index fce9147..72aeda9 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java
@@ -30,8 +30,8 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
-import java.util.function.Consumer;
-import java.util.function.Predicate;
+import java.util.SortedSet;
+import java.util.TreeSet;
import java.util.function.Supplier;
import java.util.stream.Collectors;
@@ -63,11 +63,11 @@ public class Policy implements MapWriter {
public static final String ANY = "#ANY";
public static final String CLUSTER_POLICY = "cluster-policy";
public static final String CLUSTER_PREFERENCE = "cluster-preferences";
- public static final Set<String> GLOBAL_ONLY_TAGS = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("cores")));
+ public static final Set<String> GLOBAL_ONLY_TAGS = Collections.singleton("cores");
final Map<String, List<Clause>> policies = new HashMap<>();
final List<Clause> clusterPolicy;
final List<Preference> clusterPreferences;
- final List<String> params = new ArrayList<>();
+ final List<String> params;
public Policy(Map<String, Object> jsonMap) {
@@ -82,13 +82,15 @@ public class Policy implements MapWriter {
if (clusterPreferences.isEmpty()) {
clusterPreferences.add(new Preference((Map<String, Object>) Utils.fromJSONString("{minimize : cores, precision:1}")));
}
+ SortedSet<String> paramsOfInterest = new TreeSet<>();
for (Preference preference : clusterPreferences) {
- if (params.contains(preference.name.name())) {
+ if (paramsOfInterest.contains(preference.name.name())) {
throw new RuntimeException(preference.name + " is repeated");
}
- params.add(preference.name.toString());
- preference.idx = params.size() - 1;
+ paramsOfInterest.add(preference.name.toString());
}
+ this.params = new ArrayList<>(paramsOfInterest);
+
clusterPolicy = ((List<Map<String, Object>>) jsonMap.getOrDefault(CLUSTER_POLICY, emptyList())).stream()
.map(Clause::new)
.filter(clause -> {
@@ -146,16 +148,13 @@ public class Policy implements MapWriter {
Set<String> collections = new HashSet<>();
List<Clause> expandedClauses;
List<Violation> violations = new ArrayList<>();
- private List<String> paramsOfInterest;
private Session(List<String> nodes, ClusterDataProvider dataProvider,
- List<Row> matrix, List<Clause> expandedClauses,
- List<String> paramsOfInterest) {
+ List<Row> matrix, List<Clause> expandedClauses) {
this.nodes = nodes;
this.dataProvider = dataProvider;
this.matrix = matrix;
this.expandedClauses = expandedClauses;
- this.paramsOfInterest = paramsOfInterest;
}
Session(ClusterDataProvider dataProvider) {
@@ -174,11 +173,9 @@ public class Policy implements MapWriter {
}
Collections.sort(expandedClauses);
- List<String> p = new ArrayList<>(params);
- p.addAll(expandedClauses.stream().map(clause -> clause.tag.name).distinct().collect(Collectors.toList()));
- paramsOfInterest = new ArrayList<>(p);
+
matrix = new ArrayList<>(nodes.size());
- for (String node : nodes) matrix.add(new Row(node, paramsOfInterest, dataProvider));
+ for (String node : nodes) matrix.add(new Row(node, params, dataProvider));
applyRules();
}
@@ -193,7 +190,7 @@ public class Policy implements MapWriter {
}
Session copy() {
- return new Session(nodes, dataProvider, getMatrixCopy(), expandedClauses, paramsOfInterest);
+ return new Session(nodes, dataProvider, getMatrixCopy(), expandedClauses);
}
List<Row> getMatrixCopy() {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java
index 0a82c7a..168e94e 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java
@@ -21,12 +21,10 @@ package org.apache.solr.cloud.autoscaling;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrRequest;
-import org.apache.solr.client.solrj.impl.SolrClientDataProvider;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.util.Utils;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java
index 69a9b9e..60a6756 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java
@@ -57,10 +57,13 @@ class Preference implements MapWriter {
Object o2 = useApprox ? r2.cells[idx].approxVal : r2.cells[idx].val;
int result = 0;
if (o1 instanceof Integer && o2 instanceof Integer) result = ((Integer) o1).compareTo((Integer) o2);
- if (o1 instanceof Long && o2 instanceof Long) result = ((Long) o1).compareTo((Long) o2);
- if (o1 instanceof Float && o2 instanceof Float) result = ((Float) o1).compareTo((Float) o2);
- if (o1 instanceof Double && o2 instanceof Double) result = ((Double) o1).compareTo((Double) o2);
- return result == 0 ? next == null ? 0 : next.compare(r1, r2, useApprox) : sort.sortval * result;
+ else if (o1 instanceof Long && o2 instanceof Long) result = ((Long) o1).compareTo((Long) o2);
+ else if (o1 instanceof Float && o2 instanceof Float) result = ((Float) o1).compareTo((Float) o2);
+ else if (o1 instanceof Double && o2 instanceof Double) result = ((Double) o1).compareTo((Double) o2);
+ else if (!o1.getClass().getName().equals(o2.getClass().getName())) {
+ throw new RuntimeException("Unable to compare " + o1 + " of type: " + o1.getClass().getName() + " from " + r1.cells[idx].toString() + " and " + o2 + " of type: " + o2.getClass().getName() + " from " + r2.cells[idx].toString());
+ }
+ return result == 0 ? (next == null ? 0 : next.compare(r1, r2, useApprox)) : sort.sortval * result;
}
//sets the new value according to precision in val_
@@ -68,7 +71,7 @@ class Preference implements MapWriter {
Object prevVal = null;
for (Row row : tmpMatrix) {
prevVal = row.cells[idx].approxVal =
- prevVal == null || Math.abs(((Number) prevVal).longValue() - ((Number) row.cells[idx].val).longValue()) > precision ?
+ (prevVal == null || Double.compare(Math.abs(((Number) prevVal).doubleValue() - ((Number) row.cells[idx].val).doubleValue()), precision) > 0) ?
row.cells[idx].val :
prevVal;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
index 507f719..66033bc 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
@@ -32,7 +32,6 @@ import java.lang.invoke.MethodHandles;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.RejectedExecutionException;
import java.util.regex.Pattern;
@@ -45,7 +44,6 @@ import org.apache.solr.common.cloud.ZkClientConnectionStrategy.ZkUpdate;
import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.ObjectReleaseTracker;
import org.apache.solr.common.util.SolrjNamedThreadFactory;
-import org.apache.solr.common.util.Utils;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.KeeperException.NoNodeException;
@@ -364,19 +362,6 @@ public class SolrZkClient implements Closeable {
}
}
- public Map<String, Object> getJson(String path, boolean retryOnConnLoss) throws KeeperException, InterruptedException {
- byte[] bytes = null;
- try {
- bytes = getData(path, null, null, retryOnConnLoss);
- } catch (KeeperException.NoNodeException e) {
- return null;
- }
- if (bytes != null && bytes.length > 0) {
- return (Map<String, Object>) Utils.fromJSON(bytes);
- }
- return null;
- }
-
/**
* Returns node's state
*/
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java b/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java
index a2af163..e88ceaf 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/rule/ImplicitSnitch.java
@@ -28,8 +28,10 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,21 +57,25 @@ public class ImplicitSnitch extends Snitch {
@Override
public void getTags(String solrNode, Set<String> requestedTags, SnitchContext ctx) {
- if (requestedTags.contains(NODE)) ctx.getTags().put(NODE, solrNode);
- if (requestedTags.contains(HOST)) {
- Matcher hostAndPortMatcher = hostAndPortPattern.matcher(solrNode);
- if (hostAndPortMatcher.find()) ctx.getTags().put(HOST, hostAndPortMatcher.group(1));
- }
- if (requestedTags.contains(PORT)) {
- Matcher hostAndPortMatcher = hostAndPortPattern.matcher(solrNode);
- if (hostAndPortMatcher.find()) ctx.getTags().put(PORT, hostAndPortMatcher.group(2));
- }
- if (requestedTags.contains(ROLE)) fillRole(solrNode, ctx, ROLE);
- if (requestedTags.contains(NODEROLE)) fillRole(solrNode, ctx, NODEROLE);// for new policy framework
+ try {
+ if (requestedTags.contains(NODE)) ctx.getTags().put(NODE, solrNode);
+ if (requestedTags.contains(HOST)) {
+ Matcher hostAndPortMatcher = hostAndPortPattern.matcher(solrNode);
+ if (hostAndPortMatcher.find()) ctx.getTags().put(HOST, hostAndPortMatcher.group(1));
+ }
+ if (requestedTags.contains(PORT)) {
+ Matcher hostAndPortMatcher = hostAndPortPattern.matcher(solrNode);
+ if (hostAndPortMatcher.find()) ctx.getTags().put(PORT, hostAndPortMatcher.group(2));
+ }
+ if (requestedTags.contains(ROLE)) fillRole(solrNode, ctx, ROLE);
+ if (requestedTags.contains(NODEROLE)) fillRole(solrNode, ctx, NODEROLE);// for new policy framework
- addIpTags(solrNode, requestedTags, ctx);
+ addIpTags(solrNode, requestedTags, ctx);
- getRemoteInfo(solrNode, requestedTags, ctx);
+ getRemoteInfo(solrNode, requestedTags, ctx);
+ } catch (Exception e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+ }
}
protected void getRemoteInfo(String solrNode, Set<String> requestedTags, SnitchContext ctx) {
@@ -82,16 +88,24 @@ public class ImplicitSnitch extends Snitch {
if (params.size() > 0) ctx.invokeRemote(solrNode, params, "org.apache.solr.cloud.rule.ImplicitSnitch", null);
}
- private void fillRole(String solrNode, SnitchContext ctx, String key) {
+ private void fillRole(String solrNode, SnitchContext ctx, String key) throws KeeperException, InterruptedException {
Map roles = (Map) ctx.retrieve(ZkStateReader.ROLES); // we don't want to hit the ZK for each node
// so cache and reuse
- if(roles == null) roles = ctx.getZkJson(ZkStateReader.ROLES);
- ctx.store(ZkStateReader.ROLES, roles == null ? Collections.emptyMap() : roles);
+ try {
+ if (roles == null) roles = ctx.getZkJson(ZkStateReader.ROLES);
+ cacheRoles(solrNode, ctx, key, roles);
+ } catch (KeeperException.NoNodeException e) {
+ cacheRoles(solrNode, ctx, key, Collections.emptyMap());
+ }
+ }
+
+ private void cacheRoles(String solrNode, SnitchContext ctx, String key, Map roles) {
+ ctx.store(ZkStateReader.ROLES, roles);
if (roles != null) {
for (Object o : roles.entrySet()) {
Map.Entry e = (Map.Entry) o;
if (e.getValue() instanceof List) {
- if(((List) e.getValue()).contains(solrNode)) {
+ if (((List) e.getValue()).contains(solrNode)) {
ctx.getTags().put(key, e.getKey());
break;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/common/cloud/rule/Snitch.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/rule/Snitch.java b/solr/solrj/src/java/org/apache/solr/common/cloud/rule/Snitch.java
index e0417a7..7f9cbcd 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/rule/Snitch.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/rule/Snitch.java
@@ -16,18 +16,14 @@
*/
package org.apache.solr.common.cloud.rule;
-import java.util.Arrays;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Set;
-import org.apache.solr.common.cloud.rule.ImplicitSnitch;
-
/**
*
*/
public abstract class Snitch {
- public static final Set<Class> WELL_KNOWN_SNITCHES = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(ImplicitSnitch.class)));
+ public static final Set<Class> WELL_KNOWN_SNITCHES = Collections.singleton(ImplicitSnitch.class);
public abstract void getTags(String solrNode, Set<String> requestedTags, SnitchContext ctx);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/common/cloud/rule/SnitchContext.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/rule/SnitchContext.java b/solr/solrj/src/java/org/apache/solr/common/cloud/rule/SnitchContext.java
index 69a353e..584533e 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/rule/SnitchContext.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/rule/SnitchContext.java
@@ -22,6 +22,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -58,7 +59,7 @@ public abstract class SnitchContext implements RemoteCallback {
}
- public abstract Map getZkJson(String path) ;
+ public abstract Map getZkJson(String path) throws KeeperException, InterruptedException;
public String getNode() {
return node;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
index cf83dee..5dc96f0 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
@@ -41,6 +41,9 @@ import org.apache.http.util.EntityUtils;
import org.apache.solr.common.IteratorWriter;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.cloud.SolrZkClient;
+import org.apache.solr.common.cloud.ZkOperation;
+import org.apache.zookeeper.KeeperException;
import org.noggit.CharArr;
import org.noggit.JSONParser;
import org.noggit.JSONWriter;
@@ -267,6 +270,26 @@ public class Utils {
while (is.read() != -1) {}
}
+ /**
+ * Assumes data in ZooKeeper is a JSON string, deserializes it and returns as a Map
+ *
+ * @param zkClient the zookeeper client
+ * @param path the path to the znode being read
+ * @param retryOnConnLoss whether to retry the operation automatically on connection loss, see {@link org.apache.solr.common.cloud.ZkCmdExecutor#retryOperation(ZkOperation)}
+ * @return a Map if the node exists and contains valid JSON or an empty map if znode does not exist or has a null data
+ */
+ public static Map<String, Object> getJson(SolrZkClient zkClient, String path, boolean retryOnConnLoss) throws KeeperException, InterruptedException {
+ try {
+ byte[] bytes = zkClient.getData(path, null, null, retryOnConnLoss);
+ if (bytes != null && bytes.length > 0) {
+ return (Map<String, Object>) Utils.fromJSON(bytes);
+ }
+ } catch (KeeperException.NoNodeException e) {
+ return Collections.emptyMap();
+ }
+ return Collections.emptyMap();
+ }
+
public static final Pattern ARRAY_ELEMENT_INDEX = Pattern
.compile("(\\S*?)\\[(\\d+)\\]");
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/744d1ab9/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
index 120276c..f992109 100644
--- a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
+++ b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
@@ -143,8 +143,8 @@ public class TestPolicy extends SolrTestCaseJ4 {
expectError("port", "70000","must be less than ");
expectError("port", 70000,"must be less than ");
- expectError("port", "1000","must be greater than");
- expectError("port", 1000,"must be greater than");
+ expectError("port", "0","must be greater than");
+ expectError("port", 0,"must be greater than");
expectError("cores", "-1","must be greater than");
@@ -268,8 +268,8 @@ public class TestPolicy extends SolrTestCaseJ4 {
List<Row> l = session.getSorted();
assertEquals("node1", l.get(0).node);
- assertEquals("node3", l.get(1).node);
- assertEquals("node4", l.get(2).node);
+ assertEquals("node4", l.get(1).node);
+ assertEquals("node3", l.get(2).node);
assertEquals("node2", l.get(3).node);
[03/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10559: Add
tuple documentation
Posted by sh...@apache.org.
SOLR-10559: Add tuple documentation
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/a827a9d9
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/a827a9d9
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/a827a9d9
Branch: refs/heads/feature/autoscaling
Commit: a827a9d909b38ea9bcd466e1b5ce3f7685cc6a3e
Parents: 057451a
Author: Joel Bernstein <jb...@apache.org>
Authored: Thu Jun 1 17:11:50 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Thu Jun 1 17:11:50 2017 -0400
----------------------------------------------------------------------
solr/solr-ref-guide/src/stream-sources.adoc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a827a9d9/solr/solr-ref-guide/src/stream-sources.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/stream-sources.adoc b/solr/solr-ref-guide/src/stream-sources.adoc
index 2bb0805..e8887b4 100644
--- a/solr/solr-ref-guide/src/stream-sources.adoc
+++ b/solr/solr-ref-guide/src/stream-sources.adoc
@@ -485,7 +485,7 @@ topic(checkpointCollection,
The `tuple` function emits a single Tuple with name/value pairs. The values can be set to variables assigned in a `let` expression, literals, Stream Evaluators or
Stream Expressions. In the case of Stream Evaluators the tuple will output the return value from the evaluator.
-This could be a numeric, list or map. If a Stream Expression is set to a value, the `tuple` function will flatten
+This could be a numeric, list or map. If a value is set to a Stream Expression, the `tuple` function will flatten
the tuple stream from the Stream Expression into a list of Tuples.
=== tuple Parameters
[07/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10790: Fix
warnings in Assign.java and ReplicaAssigner.java classes.
Posted by sh...@apache.org.
SOLR-10790: Fix warnings in Assign.java and ReplicaAssigner.java classes.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/cccf97ca
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/cccf97ca
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/cccf97ca
Branch: refs/heads/feature/autoscaling
Commit: cccf97cae85e4714c2e7a5f042032c9fce2f47cf
Parents: 72ba34f
Author: Christine Poerschke <cp...@apache.org>
Authored: Fri Jun 2 10:39:18 2017 +0100
Committer: Christine Poerschke <cp...@apache.org>
Committed: Fri Jun 2 10:39:18 2017 +0100
----------------------------------------------------------------------
solr/CHANGES.txt | 3 +++
solr/core/src/java/org/apache/solr/cloud/Assign.java | 2 +-
.../core/src/java/org/apache/solr/cloud/rule/ReplicaAssigner.java | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cccf97ca/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index af9ec5e..d8c9d04 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -298,6 +298,9 @@ Other Changes
* SOLR-10741: Factor out createSliceShardsStr method from HttpShardHandler.prepDistributed.
(Domenico Fabio Marino via Christine Poerschke)
+* SOLR-10790: Fix warnings in Assign.java and ReplicaAssigner.java classes.
+ (Christine Poerschke)
+
================== 6.6.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cccf97ca/solr/core/src/java/org/apache/solr/cloud/Assign.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/Assign.java b/solr/core/src/java/org/apache/solr/cloud/Assign.java
index 265e453..63e006e 100644
--- a/solr/core/src/java/org/apache/solr/cloud/Assign.java
+++ b/solr/core/src/java/org/apache/solr/cloud/Assign.java
@@ -98,7 +98,7 @@ public class Assign {
map.put(shardId, cnt);
}
- Collections.sort(shardIdNames, (o1, o2) -> {
+ Collections.sort(shardIdNames, (String o1, String o2) -> {
Integer one = map.get(o1);
Integer two = map.get(o2);
return one.compareTo(two);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cccf97ca/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 506e158..669e82b 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
@@ -211,7 +211,7 @@ public class ReplicaAssigner {
int startPosition = 0;
Map<String, Map<String, Integer>> copyOfCurrentState = getDeepCopy(shardVsNodes, 2);
List<String> sortedLiveNodes = new ArrayList<>(this.participatingLiveNodes);
- Collections.sort(sortedLiveNodes, (n1, n2) -> {
+ Collections.sort(sortedLiveNodes, (String n1, String n2) -> {
int result1 = 0;
for (int i = 0; i < rulePermutation.length; i++) {
Rule rule = rules.get(rulePermutation[i]);
[10/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-9735:
validation of all input values to either string or long
Posted by sh...@apache.org.
SOLR-9735: validation of all input values to either string or long
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4e691f9e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4e691f9e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4e691f9e
Branch: refs/heads/feature/autoscaling
Commit: 4e691f9e4ae4269d4fbf8d947cc82bb7123085e7
Parents: e2ae999
Author: Noble Paul <no...@apache.org>
Authored: Fri Jun 2 23:27:22 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Fri Jun 2 23:27:22 2017 +0930
----------------------------------------------------------------------
.../autoscaling/AutoScalingHandlerTest.java | 2 +-
.../apache/solr/cloud/autoscaling/Clause.java | 70 +++++++++++++-------
.../apache/solr/cloud/autoscaling/Operand.java | 52 ++-------------
.../org/apache/solr/cloud/autoscaling/Row.java | 2 +-
.../solr/cloud/autoscaling/TestPolicy.java | 42 ++++++------
5 files changed, 77 insertions(+), 91 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e691f9e/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
index 44cbd67..8b0401b 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
@@ -259,7 +259,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
assertEquals(5, node.size());
assertNotNull(sortedNodeNames[i] = (String) node.get("node"));
assertNotNull(node.get("cores"));
- assertEquals(0, node.get("cores"));
+ assertEquals("0", String.valueOf(node.get("cores")));
assertNotNull(node.get("freedisk"));
assertNotNull(node.get("sysLoadAvg"));
assertNotNull(node.get("heapUsage"));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e691f9e/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
index bf0ebfb..9b88d78 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
@@ -33,6 +33,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.solr.cloud.autoscaling.Policy.ReplicaInfo;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.cloud.rule.ImplicitSnitch;
+import org.apache.solr.common.util.RetryUtil;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.Utils;
@@ -74,16 +75,8 @@ public class Clause implements MapWriter, Comparable<Clause> {
if(m.get(REPLICA) == null){
throw new RuntimeException(StrUtils.formatString("'replica' is required" + Utils.toJSONString(m)));
}
- Condition replica = parse(REPLICA, m);
- try {
- int replicaCount = Integer.parseInt(String.valueOf(replica.val));
- if(replicaCount<0){
- throw new RuntimeException("replica value sould be non null "+ Utils.toJSONString(m));
- }
- this.replica = new Condition(replica.name, replicaCount, replica.op);
- } catch (NumberFormatException e) {
- throw new RuntimeException("Only an integer value is supported for replica " + Utils.toJSONString(m));
- }
+ this.replica = parse(REPLICA, m);
+ if (replica.op == WILDCARD) throw new RuntimeException("replica val cannot be null" + Utils.toJSONString(m));
m.forEach((s, o) -> parseCondition(s, o));
}
if (tag == null)
@@ -117,7 +110,7 @@ public class Clause implements MapWriter, Comparable<Clause> {
if (this.isPerCollectiontag() && that.isPerCollectiontag()) {
v = Integer.compare(this.replica.op.priority, that.replica.op.priority);
if (v == 0) {
- v = Integer.compare((Integer) this.replica.val, (Integer) that.replica.val);
+ v = Long.compare((Long) this.replica.val, (Long) that.replica.val);
v = this.replica.op == LESS_THAN ? v : v * -1;
}
return v;
@@ -154,7 +147,7 @@ public class Clause implements MapWriter, Comparable<Clause> {
}
boolean isPass(Object inputVal) {
- return op.match(val, inputVal) == PASS;
+ return op.match(val, validate(name, inputVal, false)) == PASS;
}
boolean isPass(Row row) {
@@ -180,8 +173,28 @@ public class Clause implements MapWriter, Comparable<Clause> {
Object val = m.get(s);
try {
String conditionName = s.trim();
- String value = val == null ? null : String.valueOf(val).trim();
Operand operand = null;
+ if (val == null) {
+ operand = WILDCARD;
+ expectedVal = Policy.ANY;
+ } else if (val instanceof String) {
+ String strVal = ((String) val).trim();
+ if (Policy.ANY.equals(strVal) || Policy.EACH.equals(strVal)) operand = WILDCARD;
+ else if (strVal.startsWith(NOT_EQUAL.operand)) operand = NOT_EQUAL;
+ else if (strVal.startsWith(GREATER_THAN.operand)) operand = GREATER_THAN;
+ else if (strVal.startsWith(LESS_THAN.operand)) operand = LESS_THAN;
+ else operand = EQUAL;
+ expectedVal = validate(s, strVal.substring(EQUAL == operand || WILDCARD == operand ? 0 : 1), true);
+ } else if (val instanceof Number) {
+ operand = EQUAL;
+ expectedVal = validate(s, val, true);
+ }
+/*
+
+
+ String value = val == null ? null : String.valueOf(val).trim();
+ if(WILDCARD)
+
if ((expectedVal = WILDCARD.parse(value)) != null) {
operand = WILDCARD;
} else if ((expectedVal = NOT_EQUAL.parse(value)) != null) {
@@ -194,6 +207,7 @@ public class Clause implements MapWriter, Comparable<Clause> {
operand = EQUAL;
expectedVal = EQUAL.parse(value);
}
+*/
return new Condition(conditionName, expectedVal, operand);
@@ -357,26 +371,34 @@ public class Clause implements MapWriter, Comparable<Clause> {
}
- public static Object validate(String name, Object val) {
+ /**
+ *
+ * @param name name of the condition
+ * @param val value of the condition
+ * @param isRuleVal is this provided in the rule
+ * @return actual validated value
+ */
+ public static Object validate(String name, Object val, boolean isRuleVal) {
if (val == null) return null;
ValidateInfo info = validatetypes.get(name);
- if (info == null && name.startsWith(ImplicitSnitch.SYSPROP)) info = validatetypes.get(null);
+ if (info == null && name.startsWith(ImplicitSnitch.SYSPROP)) info = validatetypes.get("STRING");
if (info == null) throw new RuntimeException("Unknown type :" + name);
if (info.type == Long.class) {
Long num = parseNumber(name, val);
- if (info.min != null)
- if (num < info.min) throw new RuntimeException(name + ": " + val + " must be greater than " + info.min);
- if (info.max != null)
- if (num > info.max) throw new RuntimeException(name + ": " + val + " must be less than " + info.max);
+ if (isRuleVal) {
+ if (info.min != null)
+ if (num < info.min) throw new RuntimeException(name + ": " + val + " must be greater than " + info.min);
+ if (info.max != null)
+ if (num > info.max) throw new RuntimeException(name + ": " + val + " must be less than " + info.max);
+ }
return num;
} else if (info.type == String.class) {
- if (info.vals != null && !info.vals.contains(val))
+ if (isRuleVal && info.vals != null && !info.vals.contains(val))
throw new RuntimeException(name + ": " + val + " must be one of " + StrUtils.join(info.vals, ','));
return val;
} else {
throw new RuntimeException("Invalid type ");
}
-
}
public static Long parseNumber(String name, Object val) {
@@ -384,7 +406,7 @@ public class Clause implements MapWriter, Comparable<Clause> {
Number num = 0;
if (val instanceof String) {
try {
- num = Long.parseLong((String) val);
+ num = Long.parseLong(((String) val).trim());
} catch (NumberFormatException e) {
try {
num = Double.parseDouble((String) val);
@@ -411,7 +433,9 @@ public class Clause implements MapWriter, Comparable<Clause> {
validatetypes.put(ImplicitSnitch.CORES, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
validatetypes.put(ImplicitSnitch.SYSLOADAVG, new ValidateInfo(Long.class, null, 0l, 100l));
validatetypes.put(ImplicitSnitch.HEAPUSAGE, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
- validatetypes.put(null, new ValidateInfo(String.class, null, null, null));
+ validatetypes.put("NUMBER", new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));//generic number validation
+ validatetypes.put("STRING", new ValidateInfo(String.class, null, null, null));//generic string validation
+ validatetypes.put("node", new ValidateInfo(String.class, null, null, null));
for (String ip : ImplicitSnitch.IP_SNITCHES) validatetypes.put(ip, new ValidateInfo(Long.class, null, 0l, 255l));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e691f9e/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java
index 5371c25..bf36ef6 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Operand.java
@@ -34,11 +34,6 @@ public enum Operand {
return testVal == null ? NOT_APPLICABLE : PASS;
}
- @Override
- public Object parse(String val) {
- if (val == null) return ANY;
- return ANY.equals(val) || Policy.EACH.equals(val) ? val : null;
- }
},
EQUAL("", 0) {
@Override
@@ -60,15 +55,9 @@ public enum Operand {
},
GREATER_THAN(">", 1) {
@Override
- public Object parse(String val) {
- return checkNumeric(super.parse(val));
- }
-
-
- @Override
public TestStatus match(Object ruleVal, Object testVal) {
if (testVal == null) return NOT_APPLICABLE;
- return compareNum(ruleVal, testVal) == 1 ? PASS : FAIL;
+ return getLong(testVal) > getLong(ruleVal) ? PASS: FAIL ;
}
@Override
@@ -80,7 +69,7 @@ public enum Operand {
@Override
public TestStatus match(Object ruleVal, Object testVal) {
if (testVal == null) return NOT_APPLICABLE;
- return compareNum(ruleVal, testVal) == -1 ? PASS : FAIL;
+ return getLong(testVal) < getLong(ruleVal) ? PASS: FAIL ;
}
@Override
@@ -88,10 +77,6 @@ public enum Operand {
return actual < expected ? 0 : (expected ) - actual;
}
- @Override
- public Object parse(String val) {
- return checkNumeric(super.parse(val));
- }
};
public final String operand;
final int priority;
@@ -105,38 +90,15 @@ public enum Operand {
return operand + expectedVal.toString();
}
- Integer checkNumeric(Object val) {
- if (val == null) return null;
- try {
- return Integer.parseInt(val.toString());
- } catch (NumberFormatException e) {
- throw new RuntimeException("for operand " + operand + " the value must be numeric");
- }
- }
-
- public Object parse(String val) {
- if (operand.isEmpty()) return val;
- return val.startsWith(operand) ? val.substring(1) : null;
- }
-
public TestStatus match(Object ruleVal, Object testVal) {
- return Objects.equals(String.valueOf(ruleVal), String.valueOf(testVal)) ? PASS : FAIL;
+ return Objects.equals(ruleVal, testVal) ? PASS : FAIL;
}
+ Long getLong(Object o) {
+ if (o instanceof Long) return (Long) o;
+ if(o instanceof Number ) return ((Number) o).longValue();
+ return Long.parseLong(String.valueOf(o));
- public int compareNum(Object n1Val, Object n2Val) {
- Integer n1 = (Integer) parseObj(n1Val, Integer.class);
- Integer n2 = (Integer) parseObj(n2Val, Integer.class);
- return n1 > n2 ? -1 : Objects.equals(n1, n2) ? 0 : 1;
- }
-
- Object parseObj(Object o, Class typ) {
- if (o == null) return o;
- if (typ == String.class) return String.valueOf(o);
- if (typ == Integer.class) {
- return Integer.parseInt(String.valueOf(o));
- }
- return o;
}
public Integer delta(Object expected, Object actual) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e691f9e/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
index a2546d0..92b4bac 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
@@ -48,7 +48,7 @@ class Row implements MapWriter {
Map<String, Object> vals = dataProvider.getNodeValues(node, params);
for (int i = 0; i < params.size(); i++) {
String s = params.get(i);
- cells[i] = new Cell(i, s, vals.get(s));
+ cells[i] = new Cell(i, s, Clause.validate(s,vals.get(s), false));
if (NODE.equals(s)) cells[i].val = node;
if (cells[i].val == null) anyValueMissing = true;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4e691f9e/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
index 08e1e1b..6bdd7cf 100644
--- a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
+++ b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
@@ -113,10 +113,10 @@ public class TestPolicy extends SolrTestCaseJ4 {
public void testValidate() {
expectError("replica", -1, "must be greater than" );
expectError("replica","hello", "not a valid number" );
- assertEquals( 1l, Clause.validate("replica", "1"));
- assertEquals("c", Clause.validate("collection", "c"));
- assertEquals( "s", Clause.validate("shard", "s"));
- assertEquals( "overseer", Clause.validate("nodeRole", "overseer"));
+ assertEquals( 1l, Clause.validate("replica", "1", true));
+ assertEquals("c", Clause.validate("collection", "c", true));
+ assertEquals( "s", Clause.validate("shard", "s",true));
+ assertEquals( "overseer", Clause.validate("nodeRole", "overseer",true));
expectError("nodeRole", "wrong","must be one of");
@@ -125,8 +125,8 @@ public class TestPolicy extends SolrTestCaseJ4 {
expectError("sysLoadAvg", "-1","must be greater than");
expectError("sysLoadAvg", -1,"must be greater than");
- assertEquals(12l,Clause.validate("sysLoadAvg", "12.46"));
- assertEquals(12l,Clause.validate("sysLoadAvg", 12.46d));
+ assertEquals(12l,Clause.validate("sysLoadAvg", "12.46",true));
+ assertEquals(12l,Clause.validate("sysLoadAvg", 12.46d,true));
expectError("ip_1", "300","must be less than ");
@@ -134,12 +134,12 @@ public class TestPolicy extends SolrTestCaseJ4 {
expectError("ip_1", "-1","must be greater than");
expectError("ip_1", -1,"must be greater than");
- assertEquals(1l,Clause.validate("ip_1", "1"));
+ assertEquals(1l,Clause.validate("ip_1", "1",true));
expectError("heapUsage", "-1","must be greater than");
expectError("heapUsage", -1,"must be greater than");
- assertEquals(69l,Clause.validate("heapUsage", "69.9"));
- assertEquals(69l,Clause.validate("heapUsage", 69.9d));
+ assertEquals(69l,Clause.validate("heapUsage", "69.9",true));
+ assertEquals(69l,Clause.validate("heapUsage", 69.9d,true));
expectError("port", "70000","must be less than ");
expectError("port", 70000,"must be less than ");
@@ -153,7 +153,7 @@ public class TestPolicy extends SolrTestCaseJ4 {
private static void expectError(String name, Object val, String msg){
try {
- Clause.validate(name, val);
+ Clause.validate(name, val,true);
fail("expected exception containing "+msg);
} catch (Exception e) {
assertTrue("expected exception containing "+msg,e.getMessage().contains(msg));
@@ -202,7 +202,7 @@ public class TestPolicy extends SolrTestCaseJ4 {
" 'policy1': [" +
" { 'replica': '1', 'sysprop.fs': 'ssd', 'shard': '#EACH'}," +
" { 'replica': '<2', 'shard': '#ANY', 'node': '#ANY'}," +
- " { 'replica': '<2', 'shard': '#EACH', 'rack': 'rack1'}" +
+ " { 'replica': '<2', 'shard': '#EACH', 'sysprop.rack': 'rack1'}" +
" ]" +
" }" +
"}");
@@ -213,7 +213,7 @@ public class TestPolicy extends SolrTestCaseJ4 {
assertEquals("1", String.valueOf(clauses.get(0).original.get("replica")));
assertEquals("0", String.valueOf(clauses.get(1).original.get("replica")));
assertEquals("#ANY", clauses.get(3).original.get("shard"));
- assertEquals("rack1", clauses.get(2).original.get("rack"));
+ assertEquals("rack1", clauses.get(2).original.get("sysprop.rack"));
assertEquals("overseer", clauses.get(1).original.get("nodeRole"));
}
@@ -223,13 +223,13 @@ public class TestPolicy extends SolrTestCaseJ4 {
" { 'nodeRole':'overseer', replica: 0, 'strict':false}," +
" { 'replica':'<1', 'node':'node3', 'shard':'#EACH'}," +
" { 'replica':'<2', 'node':'#ANY', 'shard':'#EACH'}," +
- " { 'replica':1, 'rack':'rack1'}]" +
+ " { 'replica':1, 'sysprop.rack':'rack1'}]" +
" }";
Policy p = new Policy((Map<String, Object>) Utils.fromJSONString(rules));
List<Clause> clauses = new ArrayList<>(p.getClusterPolicy());
Collections.sort(clauses);
assertEquals("nodeRole", clauses.get(1).tag.name);
- assertEquals("rack", clauses.get(0).tag.name);
+ assertEquals("sysprop.rack", clauses.get(0).tag.name);
}
public void testRules() throws IOException {
@@ -467,7 +467,7 @@ public class TestPolicy extends SolrTestCaseJ4 {
"{replica:0, 'nodeRole':'overseer','strict':false}," +
"{'replica':'<1','node':'node3'}," +
"{'replica':'<2','node':'#ANY','shard':'#EACH'}," +
- "{'replica':'<3','shard':'#EACH','rack':'#ANY'}" +
+ "{'replica':'<3','shard':'#EACH','sysprop.rack':'#ANY'}" +
"]" +
"}" +
"}";
@@ -476,7 +476,7 @@ public class TestPolicy extends SolrTestCaseJ4 {
"node1:{cores:12, freedisk: 334, heapUsage:10480, rack: rack4}," +
"node2:{cores:4, freedisk: 749, heapUsage:6873, rack: rack3}," +
"node3:{cores:7, freedisk: 262, heapUsage:7834, rack: rack2}," +
- "node4:{cores:8, freedisk: 375, heapUsage:16900, nodeRole:overseer, rack: rack1}" +
+ "node4:{cores:8, freedisk: 375, heapUsage:16900, nodeRole:overseer, sysprop.rack: rack1}" +
"}");
Policy policy = new Policy((Map<String, Object>) Utils.fromJSONString(rules));
ClusterDataProvider clusterDataProvider = getClusterDataProvider(nodeValues, clusterState);
@@ -593,17 +593,17 @@ public class TestPolicy extends SolrTestCaseJ4 {
" 'policies': {" +
" 'policy1': [" +
" { 'replica': '<2', 'shard': '#EACH', 'node': '#ANY'}," +
- " { 'replica': '<2', 'shard': '#EACH', 'rack': 'rack1'}" +
+ " { 'replica': '<2', 'shard': '#EACH', 'sysprop.rack': 'rack1'}" +
" ]" +
" }" +
"}";
Map<String, Map> nodeValues = (Map<String, Map>) Utils.fromJSONString("{" +
- "node1:{cores:12, freedisk: 334, heap:10480, rack:rack3}," +
- "node2:{cores:4, freedisk: 749, heap:6873, sysprop.fs : ssd, rack:rack1}," +
- "node3:{cores:7, freedisk: 262, heap:7834, rack:rack4}," +
- "node4:{cores:0, freedisk: 900, heap:16900, nodeRole:overseer, rack:rack2}" +
+ "node1:{cores:12, freedisk: 334, heap:10480, sysprop.rack:rack3}," +
+ "node2:{cores:4, freedisk: 749, heap:6873, sysprop.fs : ssd, sysprop.rack:rack1}," +
+ "node3:{cores:7, freedisk: 262, heap:7834, sysprop.rack:rack4}," +
+ "node4:{cores:0, freedisk: 900, heap:16900, nodeRole:overseer, sysprop.rack:rack2}" +
"}");
ClusterDataProvider dataProvider = new ClusterDataProvider() {
[14/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10447: Ref
guide documentation
Posted by sh...@apache.org.
SOLR-10447: Ref guide documentation
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/ac26d811
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/ac26d811
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/ac26d811
Branch: refs/heads/feature/autoscaling
Commit: ac26d81116079365dfdb8d70e8e0f50f93749b8b
Parents: 2eb324f
Author: Ishan Chattopadhyaya <is...@apache.org>
Authored: Fri Jun 2 20:58:22 2017 +0530
Committer: Ishan Chattopadhyaya <is...@apache.org>
Committed: Fri Jun 2 20:58:22 2017 +0530
----------------------------------------------------------------------
solr/solr-ref-guide/src/collections-api.adoc | 30 +++++++++++++++++++++++
1 file changed, 30 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ac26d811/solr/solr-ref-guide/src/collections-api.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/collections-api.adoc b/solr/solr-ref-guide/src/collections-api.adoc
index 3300b6e..35300a3 100644
--- a/solr/solr-ref-guide/src/collections-api.adoc
+++ b/solr/solr-ref-guide/src/collections-api.adoc
@@ -536,6 +536,36 @@ http://localhost:8983/solr/admin/collections?action=DELETEALIAS&name=testalias
</response>
----
+[[CollectionsAPI-listaliases]]
+== LISTALIASES: List of all aliases in the cluster
+
+`/admin/collections?action=LISTALIASES`
+
+[[CollectionsAPI-Output.6]]
+=== Output
+
+The output will contain a list of aliases with the corresponding collection names.
+
+[[CollectionsAPI-Examples.6]]
+=== Examples
+
+*Output*
+
+[source,xml]
+----
+<response>
+ <lst name="responseHeader">
+ <int name="status">0</int>
+ <int name="QTime">0</int>
+ </lst>
+ <lst name="aliases">
+ <str name="testalias1">collection1</str>
+ <str name="testalias2">collection2</str>
+ </lst>
+</response>
+----
+
+
[[CollectionsAPI-delete]]
== DELETE: Delete a Collection
[32/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10813: Add
arraySort Stream Evaluator
Posted by sh...@apache.org.
SOLR-10813: Add arraySort Stream Evaluator
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/78d95014
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/78d95014
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/78d95014
Branch: refs/heads/feature/autoscaling
Commit: 78d95014e75530fcd91040b1df3c0317a959b887
Parents: 6a9830c
Author: Joel Bernstein <jb...@apache.org>
Authored: Mon Jun 5 11:18:57 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Mon Jun 5 11:19:17 2017 -0400
----------------------------------------------------------------------
.../org/apache/solr/handler/StreamHandler.java | 1 +
.../solrj/io/eval/ArraySortEvaluator.java | 77 ++++++++++++++++++++
.../solrj/io/stream/StreamExpressionTest.java | 25 ++++++-
3 files changed, 102 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/78d95014/solr/core/src/java/org/apache/solr/handler/StreamHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/StreamHandler.java b/solr/core/src/java/org/apache/solr/handler/StreamHandler.java
index d4029ff..7889bf7 100644
--- a/solr/core/src/java/org/apache/solr/handler/StreamHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/StreamHandler.java
@@ -195,6 +195,7 @@ public class StreamHandler extends RequestHandlerBase implements SolrCoreAware,
.withFunctionName("hist", HistogramEvaluator.class)
.withFunctionName("anova", AnovaEvaluator.class)
.withFunctionName("movingAvg", MovingAverageEvaluator.class)
+ .withFunctionName("arraySort", ArraySortEvaluator.class)
// metrics
.withFunctionName("min", MinMetric.class)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/78d95014/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ArraySortEvaluator.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ArraySortEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ArraySortEvaluator.java
new file mode 100644
index 0000000..dabc615
--- /dev/null
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/ArraySortEvaluator.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.client.solrj.io.eval;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.solr.client.solrj.io.Tuple;
+import org.apache.solr.client.solrj.io.stream.expr.Explanation;
+import org.apache.solr.client.solrj.io.stream.expr.Explanation.ExpressionType;
+import org.apache.solr.client.solrj.io.stream.expr.Expressible;
+import org.apache.solr.client.solrj.io.stream.expr.StreamExpression;
+import org.apache.solr.client.solrj.io.stream.expr.StreamExpressionParameter;
+import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
+
+public class ArraySortEvaluator extends ComplexEvaluator implements Expressible {
+
+ private static final long serialVersionUID = 1;
+
+ public ArraySortEvaluator(StreamExpression expression, StreamFactory factory) throws IOException {
+ super(expression, factory);
+ }
+
+ public List<Number> evaluate(Tuple tuple) throws IOException {
+
+ if(subEvaluators.size() != 1) {
+ throw new IOException("Array sort evaluator expects 1 parameters found: "+subEvaluators.size());
+ }
+
+ StreamEvaluator colEval1 = subEvaluators.get(0);
+
+ List<Number> numbers1 = (List<Number>)colEval1.evaluate(tuple);
+ List<Number> numbers2 = new ArrayList();
+ numbers2.addAll(numbers1);
+ Collections.sort(numbers2, new Comparator<Number>() {
+ @Override
+ public int compare(Number o1, Number o2) {
+ Double d1 = o1.doubleValue();
+ Double d2 = o2.doubleValue();
+ return d1.compareTo(d2);
+ }
+ });
+ return numbers2;
+ }
+
+ @Override
+ public StreamExpressionParameter toExpression(StreamFactory factory) throws IOException {
+ StreamExpression expression = new StreamExpression(factory.getFunctionName(getClass()));
+ return expression;
+ }
+
+ @Override
+ public Explanation toExplanation(StreamFactory factory) throws IOException {
+ return new Explanation(nodeId.toString())
+ .withExpressionType(ExpressionType.EVALUATOR)
+ .withFunctionName(factory.getFunctionName(getClass()))
+ .withImplementingClass(getClass().getName())
+ .withExpression(toExpression(factory).toString());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/78d95014/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
index 8ca52d1..3466af2 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
@@ -5808,9 +5808,32 @@ public class StreamExpressionTest extends SolrCloudTestCase {
tuple = tuples.get(0);
p = tuple.getDouble("return-value");
assertEquals(p, 2.4, 0.001);
-
}
+ @Test
+ public void testArraySort() throws Exception {
+ String cexpr = "arraySort(array(11.5, 12.3, 4, 3, 1, 0))";
+ ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
+ paramsLoc.set("expr", cexpr);
+ paramsLoc.set("qt", "/stream");
+
+ String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString()+"/"+COLLECTIONORALIAS;
+ TupleStream solrStream = new SolrStream(url, paramsLoc);
+
+ StreamContext context = new StreamContext();
+ solrStream.setStreamContext(context);
+ List<Tuple> tuples = getTuples(solrStream);
+ assertTrue(tuples.size() == 1);
+ Tuple tuple = tuples.get(0);
+ List<Number> asort = (List<Number>)tuple.get("return-value");
+ assertEquals(asort.size(), 6);
+ assertEquals(asort.get(0).doubleValue(), 0, 0.0);
+ assertEquals(asort.get(1).doubleValue(), 1, 0.0);
+ assertEquals(asort.get(2).doubleValue(), 3, 0.0);
+ assertEquals(asort.get(3).doubleValue(), 4, 0.0);
+ assertEquals(asort.get(4).doubleValue(), 11.5, 0.0);
+ assertEquals(asort.get(5).doubleValue(), 12.3, 0.0);
+ }
@Test
public void testCumulativeProbability() throws Exception {
[26/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-8762: respond
child docs in DIH debug
Posted by sh...@apache.org.
SOLR-8762: respond child docs in DIH debug
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/db2b19f6
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/db2b19f6
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/db2b19f6
Branch: refs/heads/feature/autoscaling
Commit: db2b19f6ba7766cf42bde668f8ec4e7b237e6007
Parents: 2c9f860
Author: Mikhail Khludnev <mk...@apache.org>
Authored: Sat Jun 3 13:41:51 2017 +0300
Committer: Mikhail Khludnev <mk...@apache.org>
Committed: Sat Jun 3 21:36:52 2017 +0300
----------------------------------------------------------------------
solr/CHANGES.txt | 2 ++
.../solr/handler/dataimport/DebugInfo.java | 32 +++++++++++++++++++-
.../AbstractDataImportHandlerTestCase.java | 4 +--
.../dataimport/TestHierarchicalDocBuilder.java | 31 +++++++++++++------
4 files changed, 56 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/db2b19f6/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 3c887be..ff6ff46 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -315,6 +315,8 @@ Other Changes
* SOLR-8437: Improve RAMDirectory details in sample solrconfig files (Mark Miller, Varun Thacker)
+* SOLR-8762: return child docs in DIH debug (Gopikannan Venugopalsamy via Mikhail Khludnev)
+
================== 6.6.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/db2b19f6/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugInfo.java
----------------------------------------------------------------------
diff --git a/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugInfo.java b/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugInfo.java
index 9bd217a..623832f 100644
--- a/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugInfo.java
+++ b/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DebugInfo.java
@@ -16,6 +16,7 @@
*/
package org.apache.solr.handler.dataimport;
+import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -25,7 +26,35 @@ import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.StrUtils;
public class DebugInfo {
- public List<SolrInputDocument> debugDocuments = new ArrayList<>(0);
+
+ private static final class ChildRollupDocs extends AbstractList<SolrInputDocument> {
+
+ private List<SolrInputDocument> delegate = new ArrayList<>();
+
+ @Override
+ public SolrInputDocument get(int index) {
+ return delegate.get(index);
+ }
+
+ @Override
+ public int size() {
+ return delegate.size();
+ }
+
+ public boolean add(SolrInputDocument e) {
+ SolrInputDocument transformed = e.deepCopy();
+ if (transformed.hasChildDocuments()) {
+ ChildRollupDocs childList = new ChildRollupDocs();
+ childList.addAll(transformed.getChildDocuments());
+ transformed.addField("_childDocuments_", childList);
+ transformed.getChildDocuments().clear();
+ }
+ return delegate.add(transformed);
+ }
+ }
+
+ public List<SolrInputDocument> debugDocuments = new ChildRollupDocs();
+
public NamedList<String> debugVerboseOutput = null;
public boolean verbose;
@@ -34,3 +63,4 @@ public class DebugInfo {
debugVerboseOutput = new NamedList<>();
}
}
+
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/db2b19f6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractDataImportHandlerTestCase.java
----------------------------------------------------------------------
diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractDataImportHandlerTestCase.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractDataImportHandlerTestCase.java
index db02993..7b8ff88 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractDataImportHandlerTestCase.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractDataImportHandlerTestCase.java
@@ -80,11 +80,11 @@ public abstract class AbstractDataImportHandlerTestCase extends
}
}
- protected void runFullImport(String dataConfig) throws Exception {
+ protected String runFullImport(String dataConfig) throws Exception {
LocalSolrQueryRequest request = lrf.makeRequest("command", "full-import",
"debug", "on", "clean", "true", "commit", "true", "dataConfig",
dataConfig);
- h.query("/dataimport", request);
+ return h.query("/dataimport", request);
}
protected void runDeltaImport(String dataConfig) throws Exception {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/db2b19f6/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java
----------------------------------------------------------------------
diff --git a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java
index 603980a..086d7be 100644
--- a/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java
+++ b/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java
@@ -39,6 +39,7 @@ import org.apache.solr.common.util.StrUtils;
import org.apache.solr.handler.dataimport.config.ConfigNameConstants;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.search.SolrIndexSearcher;
+import org.apache.solr.util.TestHarness;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -118,7 +119,7 @@ public class TestHierarchicalDocBuilder extends AbstractDataImportHandlerTestCas
List<String> parentIds = createDataIterator("select * from PARENT", parentType, parentType, parentsNum);
Collections.shuffle(parentIds, random());
- String parentId1 = parentIds.get(0);
+ final String parentId1 = parentIds.get(0);
String parentId2 = parentIds.get(1);
//parent 1 children
@@ -129,21 +130,24 @@ public class TestHierarchicalDocBuilder extends AbstractDataImportHandlerTestCas
childrenNum += childrenIds.size();
// grand children of first parent first child
- String childId = childrenIds.get(0);
+ final String childId = childrenIds.get(0);
String description = "grandchild of first parent, child of " + childId + " child";
select = "select * from GRANDCHILD where parent_id='" + childId + "'";
List<String> grandChildrenIds = createDataIterator(select, grandChildType, description, atLeast(2));
grandChildrenNum += grandChildrenIds.size();
// grand children of first parent second child
- childId = childrenIds.get(1);
- description = "grandchild of first parent, child of " + childId + " child";
- select = "select * from GRANDCHILD where parent_id='" + childId + "'";
- List<String> grandChildrenIds2 = createDataIterator(select, grandChildType, description, atLeast(2));
+ {
+ String childId2 = childrenIds.get(1);
+ description = "grandchild of first parent, child of " + childId2 + " child";
+ select = "select * from GRANDCHILD where parent_id='" + childId2 + "'";
+ }
+ final List<String> grandChildrenIds2 = createDataIterator(select, grandChildType, description, atLeast(2));
grandChildrenNum += grandChildrenIds2.size();
- grandChildrenIds.addAll(grandChildrenIds2);
-
+ List<String> allGrandChildrenIds = new ArrayList<>(grandChildrenIds);
+ allGrandChildrenIds.addAll(grandChildrenIds2);
+
// third children of first parent has no grand children
// parent 2 children (no grand children)
@@ -155,7 +159,14 @@ public class TestHierarchicalDocBuilder extends AbstractDataImportHandlerTestCas
int totalDocsNum = parentsNum + childrenNum + grandChildrenNum;
- runFullImport(THREE_LEVEL_HIERARCHY_CONFIG);
+ String resp = runFullImport(THREE_LEVEL_HIERARCHY_CONFIG);
+ String xpath = "//arr[@name='documents']/lst/arr[@name='id' and .='"+parentId1+"']/../"+
+ "arr[@name='_childDocuments_']/lst/arr[@name='id' and .='"+childId+"']/../"+
+ "arr[@name='_childDocuments_']/lst/arr[@name='id' and .='"+grandChildrenIds.get(0)+"']";
+ String results = TestHarness.validateXPath(resp,
+ xpath);
+ assertTrue("Debug documents does not contain child documents\n"+resp+"\n"+ xpath+
+ "\n"+results, results == null);
assertTrue("Update request processor processAdd was not called", TestUpdateRequestProcessor.processAddCalled);
assertTrue("Update request processor processCommit was not callled", TestUpdateRequestProcessor.processCommitCalled);
@@ -169,7 +180,7 @@ public class TestHierarchicalDocBuilder extends AbstractDataImportHandlerTestCas
// let's check BlockJoin
// get first parent by any grand children
- String randomGrandChildId = grandChildrenIds.get(random().nextInt(grandChildrenIds.size()));
+ String randomGrandChildId = allGrandChildrenIds.get(random().nextInt(allGrandChildrenIds.size()));
Query query = createToParentQuery(parentType, FIELD_ID, randomGrandChildId);
assertSearch(query, FIELD_ID, parentId1);
[30/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10744: remove
unused import
Posted by sh...@apache.org.
SOLR-10744: remove unused import
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/b1b9a94b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/b1b9a94b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/b1b9a94b
Branch: refs/heads/feature/autoscaling
Commit: b1b9a94b1d8c0f418d0c7408a17147e8cca2d2e1
Parents: 1f437fe
Author: Christine Poerschke <cp...@apache.org>
Authored: Mon Jun 5 10:35:53 2017 +0100
Committer: Christine Poerschke <cp...@apache.org>
Committed: Mon Jun 5 10:35:53 2017 +0100
----------------------------------------------------------------------
solr/core/src/test/org/apache/solr/util/TestUtils.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b1b9a94b/solr/core/src/test/org/apache/solr/util/TestUtils.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/util/TestUtils.java b/solr/core/src/test/org/apache/solr/util/TestUtils.java
index 5c55cd7..4cf6f6b 100644
--- a/solr/core/src/test/org/apache/solr/util/TestUtils.java
+++ b/solr/core/src/test/org/apache/solr/util/TestUtils.java
@@ -18,7 +18,6 @@ package org.apache.solr.util;
import java.io.IOException;
import java.io.StringReader;
-import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
[41/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10419: All
collection APIs should use the new Policy framework for replica placement
Posted by sh...@apache.org.
SOLR-10419: All collection APIs should use the new Policy framework for replica placement
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/b47572ee
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/b47572ee
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/b47572ee
Branch: refs/heads/feature/autoscaling
Commit: b47572ee879468ac552668dcc78095c6dfbec11b
Parents: 744d1ab
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Tue Jun 6 09:22:38 2017 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Tue Jun 6 09:22:38 2017 +0530
----------------------------------------------------------------------
solr/CHANGES.txt | 2 +
.../src/java/org/apache/solr/cloud/Assign.java | 7 +-
.../apache/solr/cloud/CreateCollectionCmd.java | 2 +-
.../cloud/OverseerCollectionMessageHandler.java | 5 +-
.../java/org/apache/solr/cloud/RestoreCmd.java | 2 +-
.../org/apache/solr/cloud/SplitShardCmd.java | 2 +-
.../solr/cloud/autoscaling/TestPolicyCloud.java | 69 ++++++++++++++++++++
.../apache/solr/cloud/autoscaling/Policy.java | 13 +++-
.../solr/cloud/autoscaling/PolicyHelper.java | 10 ++-
.../solr/cloud/autoscaling/TestPolicy.java | 4 +-
10 files changed, 102 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 21d9ec1..d83b786 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -208,6 +208,8 @@ Other Changes
* SOLR-10782: Improve error handling and tests for Snitch and subclasses and general cleanups. (Noble Paul, shalin)
+* SOLR-10419: All collection APIs should use the new Policy framework for replica placement. (Noble Paul, shalin)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/solr/core/src/java/org/apache/solr/cloud/Assign.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/Assign.java b/solr/core/src/java/org/apache/solr/cloud/Assign.java
index 4e1fd68..eeab761 100644
--- a/solr/core/src/java/org/apache/solr/cloud/Assign.java
+++ b/solr/core/src/java/org/apache/solr/cloud/Assign.java
@@ -199,7 +199,7 @@ public class Assign {
Map autoScalingJson = Utils.getJson(cc.getZkController().getZkClient(), SOLR_AUTOSCALING_CONF_PATH, true);
if (policyName != null || autoScalingJson.get(Policy.CLUSTER_POLICY) != null) {
positions= Assign.getPositionsUsingPolicy(collectionName, Collections.singletonList(shard), numberOfNodes,
- policyName, cc.getZkController().getZkStateReader());
+ policyName, cc.getZkController().getZkStateReader(), createNodeList);
}
if(positions != null){
@@ -216,7 +216,8 @@ public class Assign {
}
public static Map<ReplicaAssigner.Position, String> getPositionsUsingPolicy(String collName, List<String> shardNames, int numReplicas,
- String policyName, ZkStateReader zkStateReader) throws KeeperException, InterruptedException {
+ String policyName, ZkStateReader zkStateReader,
+ List<String> nodesList) throws KeeperException, InterruptedException {
try (CloudSolrClient csc = new CloudSolrClient.Builder()
.withClusterStateProvider(new ZkClientClusterStateProvider(zkStateReader))
.build()) {
@@ -224,7 +225,7 @@ public class Assign {
Map<String, Object> autoScalingJson = Utils.getJson(zkStateReader.getZkClient(), SOLR_AUTOSCALING_CONF_PATH, true);
Map<String, List<String>> locations = PolicyHelper.getReplicaLocations(collName,
autoScalingJson,
- clientDataProvider, singletonMap(collName, policyName), shardNames, numReplicas);
+ clientDataProvider, singletonMap(collName, policyName), shardNames, numReplicas, nodesList);
Map<ReplicaAssigner.Position, String> result = new HashMap<>();
for (Map.Entry<String, List<String>> e : locations.entrySet()) {
List<String> value = e.getValue();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java
index 3d1a54e..e0d4cba 100644
--- a/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/CreateCollectionCmd.java
@@ -162,7 +162,7 @@ public class CreateCollectionCmd implements Cmd {
+ " shards to be created (higher than the allowed number)");
}
- positionVsNodes = ocmh.identifyNodes(clusterState, nodeList, message, shardNames, numNrtReplicas, numTlogReplicas, numPullReplicas);
+ positionVsNodes = ocmh.identifyNodes(clusterState, nodeList, collectionName, message, shardNames, numNrtReplicas, numTlogReplicas, numPullReplicas);
}
ZkStateReader zkStateReader = ocmh.zkStateReader;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/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 e5b3b9b..a055033 100644
--- a/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
@@ -706,6 +706,7 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler
Map<Position, String> identifyNodes(ClusterState clusterState,
List<String> nodeList,
+ String collectionName,
ZkNodeProps message,
List<String> shardNames,
int numNrtReplicas,
@@ -741,8 +742,8 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler
}
if (policyName != null || autoScalingJson.get(Policy.CLUSTER_POLICY) != null) {
- return Assign.getPositionsUsingPolicy(message.getStr(COLLECTION_PROP, message.getStr(NAME)),
- shardNames, numNrtReplicas, policyName, zkStateReader);
+ return Assign.getPositionsUsingPolicy(collectionName,
+ shardNames, numNrtReplicas, policyName, zkStateReader, nodeList);
} else {
List<Rule> rules = new ArrayList<>();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java b/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java
index 76c12b8..6a18bff 100644
--- a/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java
@@ -214,7 +214,7 @@ public class RestoreCmd implements OverseerCollectionMessageHandler.Cmd {
restoreCollection.getSlices().forEach(x -> sliceNames.add(x.getName()));
Map<ReplicaAssigner.Position, String> positionVsNodes = ocmh.identifyNodes(clusterState, nodeList,
- message, sliceNames, numNrtReplicas, numTlogReplicas, numPullReplicas);
+ restoreCollectionName, message, sliceNames, numNrtReplicas, numTlogReplicas, numPullReplicas);
//Create one replica per shard and copy backed up data to it
for (Slice slice : restoreCollection.getSlices()) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/solr/core/src/java/org/apache/solr/cloud/SplitShardCmd.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/SplitShardCmd.java b/solr/core/src/java/org/apache/solr/cloud/SplitShardCmd.java
index fe95458..2e2e335 100644
--- a/solr/core/src/java/org/apache/solr/cloud/SplitShardCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/SplitShardCmd.java
@@ -381,9 +381,9 @@ public class SplitShardCmd implements Cmd {
// TODO: change this to handle sharding a slice into > 2 sub-shards.
-
Map<ReplicaAssigner.Position, String> nodeMap = ocmh.identifyNodes(clusterState,
new ArrayList<>(clusterState.getLiveNodes()),
+ collectionName,
new ZkNodeProps(collection.getProperties()),
subSlices, repFactor - 1, 0, 0);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
index fa592f3..ddb9d11 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
+import java.util.List;
import java.util.Map;
import org.apache.lucene.util.LuceneTestCase;
@@ -31,7 +32,9 @@ import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.cloud.OverseerTaskProcessor;
import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.common.cloud.DocCollection;
+import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.Utils;
import org.apache.zookeeper.KeeperException;
import org.junit.After;
@@ -61,6 +64,72 @@ public class TestPolicyCloud extends SolrCloudTestCase {
"{}".getBytes(StandardCharsets.UTF_8), true);
}
+ public void testCreateCollectionAddReplica() throws Exception {
+ JettySolrRunner jetty = cluster.getRandomJetty(random());
+ int port = jetty.getLocalPort();
+
+ String commands = "{set-policy :{c1 : [{replica:2 , shard:'#EACH', port: '" + port + "'}]}}";
+ cluster.getSolrClient().request(AutoScalingHandlerTest.createAutoScalingRequest(SolrRequest.METHOD.POST, commands));
+
+ String collectionName = "testCreateCollectionAddReplica";
+ CollectionAdminRequest.createCollection(collectionName, 1, 1)
+ .setPolicy("c1")
+ .process(cluster.getSolrClient());
+
+ getCollectionState(collectionName).forEachReplica((s, replica) -> assertEquals(jetty.getNodeName(), replica.getNodeName()));
+
+ CollectionAdminRequest.addReplicaToShard(collectionName, "shard1").process(cluster.getSolrClient());
+ waitForState("Timed out waiting to see 2 replicas for collection: " + collectionName,
+ collectionName, (liveNodes, collectionState) -> collectionState.getReplicas().size() == 2);
+
+ getCollectionState(collectionName).forEachReplica((s, replica) -> assertEquals(jetty.getNodeName(), replica.getNodeName()));
+ }
+
+ public void testCreateCollectionSplitShard() throws Exception {
+ JettySolrRunner firstNode = cluster.getRandomJetty(random());
+ int firstNodePort = firstNode.getLocalPort();
+
+ JettySolrRunner secondNode = null;
+ while (true) {
+ secondNode = cluster.getRandomJetty(random());
+ if (secondNode.getLocalPort() != firstNodePort) break;
+ }
+ int secondNodePort = secondNode.getLocalPort();
+
+ String commands = "{set-policy :{c1 : [{replica:1 , shard:'#EACH', port: '" + firstNodePort + "'}, {replica:1, shard:'#EACH', port:'" + secondNodePort + "'}]}}";
+ NamedList<Object> response = cluster.getSolrClient().request(AutoScalingHandlerTest.createAutoScalingRequest(SolrRequest.METHOD.POST, commands));
+ assertEquals("success", response.get("result"));
+
+ String collectionName = "testCreateCollectionSplitShard";
+ CollectionAdminRequest.createCollection(collectionName, 1, 2)
+ .setPolicy("c1")
+ .setMaxShardsPerNode(10)
+ .process(cluster.getSolrClient());
+
+ DocCollection docCollection = getCollectionState(collectionName);
+ List<Replica> list = docCollection.getReplicas(firstNode.getNodeName());
+ int replicasOnNode1 = list != null ? list.size() : 0;
+ list = docCollection.getReplicas(secondNode.getNodeName());
+ int replicasOnNode2 = list != null ? list.size() : 0;
+
+ assertEquals("Expected exactly one replica of collection on node with port: " + firstNodePort, 1, replicasOnNode1);
+ assertEquals("Expected exactly one replica of collection on node with port: " + secondNodePort, 1, replicasOnNode2);
+
+ CollectionAdminRequest.splitShard(collectionName).setShardName("shard1").process(cluster.getSolrClient());
+
+ waitForState("Timed out waiting to see 6 replicas for collection: " + collectionName,
+ collectionName, (liveNodes, collectionState) -> collectionState.getReplicas().size() == 6);
+
+ docCollection = getCollectionState(collectionName);
+ list = docCollection.getReplicas(firstNode.getNodeName());
+ replicasOnNode1 = list != null ? list.size() : 0;
+ list = docCollection.getReplicas(secondNode.getNodeName());
+ replicasOnNode2 = list != null ? list.size() : 0;
+
+ assertEquals("Expected exactly three replica of collection on node with port: " + firstNodePort, 3, replicasOnNode1);
+ assertEquals("Expected exactly three replica of collection on node with port: " + secondNodePort, 3, replicasOnNode2);
+ }
+
public void testCreateCollectionAddShardUsingPolicy() throws Exception {
JettySolrRunner jetty = cluster.getRandomJetty(random());
int port = jetty.getLocalPort();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java
index 72aeda9..dd9dfc5 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Policy.java
@@ -348,7 +348,11 @@ public class Policy implements MapWriter {
}
public Suggester hint(Hint hint, Object value) {
- hints.put(hint, value);
+ if (hint == Hint.TARGET_NODE || hint == Hint.SRC_NODE) {
+ ((Set) hints.computeIfAbsent(hint, h -> new HashSet<>())).add(value);
+ } else {
+ hints.put(hint, value);
+ }
return this;
}
@@ -461,7 +465,12 @@ public class Policy implements MapWriter {
protected boolean isAllowed(Object v, Hint hint) {
Object hintVal = hints.get(hint);
- return hintVal == null || Objects.equals(v, hintVal);
+ if (hint == Hint.TARGET_NODE || hint == Hint.SRC_NODE) {
+ Set set = (Set) hintVal;
+ return set == null || set.contains(v);
+ } else {
+ return hintVal == null || Objects.equals(v, hintVal);
+ }
}
public enum Hint {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java
index 168e94e..33d4b97 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/PolicyHelper.java
@@ -25,10 +25,10 @@ import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.cloud.autoscaling.Policy.Suggester.Hint;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.util.Utils;
-import org.apache.solr.cloud.autoscaling.Policy.Suggester.Hint;
import static org.apache.solr.common.params.CollectionParams.CollectionAction.ADDREPLICA;
@@ -37,7 +37,8 @@ public class PolicyHelper {
ClusterDataProvider cdp,
Map<String, String> optionalPolicyMapping,
List<String> shardNames,
- int repFactor) {
+ int repFactor,
+ List<String> nodesList) {
Map<String, List<String>> positionMapping = new HashMap<>();
for (String shardName : shardNames) positionMapping.put(shardName, new ArrayList<>(repFactor));
if (optionalPolicyMapping != null) {
@@ -76,6 +77,11 @@ public class PolicyHelper {
Policy.Suggester suggester = session.getSuggester(ADDREPLICA)
.hint(Hint.COLL, collName)
.hint(Hint.SHARD, shardName);
+ if (nodesList != null) {
+ for (String nodeName : nodesList) {
+ suggester = suggester.hint(Hint.TARGET_NODE, nodeName);
+ }
+ }
SolrRequest op = suggester.getOperation();
if (op == null) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "No node can satisfy the rules "+ Utils.toJSONString(Utils.getDeepCopy(session.expandedClauses, 4, true)));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/b47572ee/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
index f992109..8c296b9 100644
--- a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
+++ b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
@@ -586,7 +586,7 @@ public class TestPolicy extends SolrTestCaseJ4 {
};
Map<String, List<String>> locations = PolicyHelper.getReplicaLocations(
"newColl", (Map<String, Object>) Utils.fromJSONString(autoScaleJson),
- dataProvider, Collections.singletonMap("newColl", "c1"), Arrays.asList("shard1", "shard2"), 1);
+ dataProvider, Collections.singletonMap("newColl", "c1"), Arrays.asList("shard1", "shard2"), 1, null);
assertTrue(locations.get("shard1").containsAll(ImmutableList.of("127.0.0.1:50096_solr")));
assertTrue(locations.get("shard2").containsAll(ImmutableList.of("127.0.0.1:50096_solr")));
}
@@ -643,7 +643,7 @@ public class TestPolicy extends SolrTestCaseJ4 {
};
Map<String, List<String>> locations = PolicyHelper.getReplicaLocations(
"newColl", (Map<String, Object>) Utils.fromJSONString(autoScaleJson),
- dataProvider, Collections.singletonMap("newColl", "policy1"), Arrays.asList("shard1", "shard2"), 3);
+ dataProvider, Collections.singletonMap("newColl", "policy1"), Arrays.asList("shard1", "shard2"), 3, null);
assertTrue(locations.get("shard1").containsAll(ImmutableList.of("node2", "node1", "node3")));
assertTrue(locations.get("shard2").containsAll(ImmutableList.of("node2", "node1", "node3")));
[18/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10801: Remove
several deprecated methods that were exposed to plugin writers
Posted by sh...@apache.org.
SOLR-10801: Remove several deprecated methods that were exposed to plugin writers
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/038baaed
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/038baaed
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/038baaed
Branch: refs/heads/feature/autoscaling
Commit: 038baaed92a0894faa4204089373fd1deb295097
Parents: 3b45d82
Author: Chris Hostetter <ho...@apache.org>
Authored: Fri Jun 2 10:49:26 2017 -0700
Committer: Chris Hostetter <ho...@apache.org>
Committed: Fri Jun 2 10:51:23 2017 -0700
----------------------------------------------------------------------
solr/CHANGES.txt | 2 +
.../apache/solr/search/LuceneQParserPlugin.java | 6 --
.../java/org/apache/solr/search/QParser.java | 10 ----
.../org/apache/solr/search/QueryParsing.java | 26 --------
.../org/apache/solr/util/SolrPluginUtils.java | 63 --------------------
5 files changed, 2 insertions(+), 105 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/038baaed/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 6b664e4..b7e0b61 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -228,6 +228,8 @@ Other Changes
* SOLR-10799: Extracted functionality to collect eligible replicas from HttpShardHandler.prepDistributed()
to a new method (Domenico Fabio Marino via Tomás Fernández Löbbe)
+* SOLR-10801: Remove several deprecated methods that were exposed to plugin writers (hossman)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/038baaed/solr/core/src/java/org/apache/solr/search/LuceneQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/LuceneQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/LuceneQParserPlugin.java
index 8668330..912b57f 100644
--- a/solr/core/src/java/org/apache/solr/search/LuceneQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/LuceneQParserPlugin.java
@@ -79,12 +79,6 @@ class OldLuceneQParser extends LuceneQParser {
}
@Override
- @Deprecated
- public SortSpec getSort(boolean useGlobal) throws SyntaxError {
- return getSortSpec(useGlobal);
- }
-
- @Override
public SortSpec getSortSpec(boolean useGlobal) throws SyntaxError {
SortSpec sort = super.getSortSpec(useGlobal);
if (sortStr != null && sortStr.length()>0 && sort.getSort()==null) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/038baaed/solr/core/src/java/org/apache/solr/search/QParser.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/QParser.java b/solr/core/src/java/org/apache/solr/search/QParser.java
index 58c0265..7392cbc 100644
--- a/solr/core/src/java/org/apache/solr/search/QParser.java
+++ b/solr/core/src/java/org/apache/solr/search/QParser.java
@@ -238,16 +238,6 @@ public abstract class QParser {
/**
* @param useGlobalParams look up sort, start, rows in global params if not in local params
* @return the sort specification
- * @deprecated Use the not misleadingly named getSortSpec() function instead.
- */
- @Deprecated
- public SortSpec getSort(boolean useGlobalParams) throws SyntaxError {
- return getSortSpec(useGlobalParams);
- }
-
- /**
- * @param useGlobalParams look up sort, start, rows in global params if not in local params
- * @return the sort specification
*/
public SortSpec getSortSpec(boolean useGlobalParams) throws SyntaxError {
getQuery(); // ensure query is parsed first
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/038baaed/solr/core/src/java/org/apache/solr/search/QueryParsing.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/QueryParsing.java b/solr/core/src/java/org/apache/solr/search/QueryParsing.java
index bbce610..f636aca 100644
--- a/solr/core/src/java/org/apache/solr/search/QueryParsing.java
+++ b/solr/core/src/java/org/apache/solr/search/QueryParsing.java
@@ -57,32 +57,6 @@ public class QueryParsing {
// true if the value was specified by the "v" param (i.e. v=myval, or v=$param)
public static final String VAL_EXPLICIT = "__VAL_EXPLICIT__";
-
- /**
- * Returns the default operator for use by Query Parsers, parsed from the df string
- * @param notUsed is not used, but is there for back compat with 3rd party QParsers
- * @param df the df string from request
- * @deprecated this method is here purely not to break code back compat in 7.x
- */
- @Deprecated
- public static QueryParser.Operator getQueryParserDefaultOperator(final IndexSchema notUsed,
- final String df) {
- return parseOP(df);
- }
-
- /**
- * Returns the effective default field based on the 'df' param.
- * TODO: This is kept for 3rd party QParser compat in 7.x. Remove this method in Solr 8.0
- * @param ignored Not in use
- * @param df the default field, which will be returned as-is
- * @see org.apache.solr.common.params.CommonParams#DF
- * @deprecated IndexScema does not contain defaultField anymore, you must rely on df alone
- */
- @Deprecated
- public static String getDefaultField(final IndexSchema ignored, final String df) {
- return df;
- }
-
/**
* @param txt Text to parse
* @param start Index into text for start of parsing
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/038baaed/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java b/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
index 658b035..1d265c7 100644
--- a/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
@@ -35,7 +35,6 @@ import java.util.TreeMap;
import java.util.regex.Pattern;
import org.apache.lucene.document.Document;
-import org.apache.lucene.index.IndexableField;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
@@ -44,8 +43,6 @@ import org.apache.lucene.search.DisjunctionMaxQuery;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
-import org.apache.solr.common.SolrDocument;
-import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
@@ -1009,66 +1006,6 @@ public class SolrPluginUtils {
}
}
- /**
- * Convert a DocList to a SolrDocumentList
- *
- * The optional param "ids" is populated with the lucene document id
- * for each SolrDocument.
- *
- * @param docs The {@link org.apache.solr.search.DocList} to convert
- * @param searcher The {@link org.apache.solr.search.SolrIndexSearcher} to use to load the docs from the Lucene index
- * @param fields The names of the Fields to load
- * @param ids A map to store the ids of the docs
- * @return The new {@link org.apache.solr.common.SolrDocumentList} containing all the loaded docs
- * @throws java.io.IOException if there was a problem loading the docs
- * @since solr 1.4
- * @deprecated TODO in 7.0 remove this. It was inlined into ClusteringComponent. DWS: 'ids' is ugly.
- */
- public static SolrDocumentList docListToSolrDocumentList(
- DocList docs,
- SolrIndexSearcher searcher,
- Set<String> fields,
- Map<SolrDocument, Integer> ids ) throws IOException
- {
- /* DWS deprecation note:
- It's only called by ClusteringComponent, and I think the "ids" param aspect is a bit messy and not worth supporting.
- If someone wants a similar method they can speak up and we can add a method to SolrDocumentFetcher.
- */
- IndexSchema schema = searcher.getSchema();
-
- SolrDocumentList list = new SolrDocumentList();
- list.setNumFound(docs.matches());
- list.setMaxScore(docs.maxScore());
- list.setStart(docs.offset());
-
- DocIterator dit = docs.iterator();
-
- while (dit.hasNext()) {
- int docid = dit.nextDoc();
-
- Document luceneDoc = searcher.doc(docid, fields);
- SolrDocument doc = new SolrDocument();
-
- for( IndexableField field : luceneDoc) {
- if (null == fields || fields.contains(field.name())) {
- SchemaField sf = schema.getField( field.name() );
- doc.addField( field.name(), sf.getType().toObject( field ) );
- }
- }
- if (docs.hasScores() && (null == fields || fields.contains("score"))) {
- doc.addField("score", dit.score());
- }
-
- list.add( doc );
-
- if( ids != null ) {
- ids.put( doc, new Integer(docid) );
- }
- }
- return list;
- }
-
-
public static void invokeSetters(Object bean, Iterable<Map.Entry<String,Object>> initArgs) {
invokeSetters(bean, initArgs, false);
}
[02/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10559: Add
tuple documentation
Posted by sh...@apache.org.
SOLR-10559: Add tuple documentation
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/057451ac
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/057451ac
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/057451ac
Branch: refs/heads/feature/autoscaling
Commit: 057451ac643b134dda3f685c5ffec1b2cdc23dc0
Parents: 6d6e47f
Author: Joel Bernstein <jb...@apache.org>
Authored: Thu Jun 1 17:08:52 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Thu Jun 1 17:08:52 2017 -0400
----------------------------------------------------------------------
solr/solr-ref-guide/src/stream-sources.adoc | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/057451ac/solr/solr-ref-guide/src/stream-sources.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/stream-sources.adoc b/solr/solr-ref-guide/src/stream-sources.adoc
index 986a5da..2bb0805 100644
--- a/solr/solr-ref-guide/src/stream-sources.adoc
+++ b/solr/solr-ref-guide/src/stream-sources.adoc
@@ -480,3 +480,24 @@ topic(checkpointCollection,
q="topic query",
fl="id, name, country")
----
+
+== tuple
+
+The `tuple` function emits a single Tuple with name/value pairs. The values can be set to variables assigned in a `let` expression, literals, Stream Evaluators or
+Stream Expressions. In the case of Stream Evaluators the tuple will output the return value from the evaluator.
+This could be a numeric, list or map. If a Stream Expression is set to a value, the `tuple` function will flatten
+the tuple stream from the Stream Expression into a list of Tuples.
+
+=== tuple Parameters
+
+* name=value pairs
+
+=== tuple Syntax
+
+[source,text]
+----
+tuple(a=add(1,1),
+ b=search(collection1, q="cat:a", fl="a, b, c", sort"a desc"))
+----
+
+
[11/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-9735:
validation of all input values to either string or long
Posted by sh...@apache.org.
SOLR-9735: validation of all input values to either string or long
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2a625dfb
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2a625dfb
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2a625dfb
Branch: refs/heads/feature/autoscaling
Commit: 2a625dfb1ff6d71cb2435e3efeefafe80746cd72
Parents: 4e691f9
Author: Noble Paul <no...@apache.org>
Authored: Fri Jun 2 23:28:53 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Fri Jun 2 23:28:53 2017 +0930
----------------------------------------------------------------------
solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2a625dfb/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
index 92b4bac..463d434 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
@@ -97,7 +97,7 @@ class Row implements MapWriter {
if (replicas == null) c.put(shard, replicas = new ArrayList<>());
replicas.add(new ReplicaInfo("" + new Random().nextInt(1000) + 1000, coll, shard, new HashMap<>()));
for (Cell cell : row.cells) {
- if (cell.name.equals("cores")) cell.val = ((Number) cell.val).intValue() + 1;
+ if (cell.name.equals("cores")) cell.val = ((Number) cell.val).longValue() + 1;
}
return row;
[46/50] [abbrv] lucene-solr:feature/autoscaling: Merge branch
'master' into feature/autoscaling
Posted by sh...@apache.org.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/CHANGES.txt
----------------------------------------------------------------------
diff --cc solr/CHANGES.txt
index 1ca238d,5343bc5..ed2feac
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@@ -71,23 -98,36 +98,46 @@@ New Feature
* SOLR-9835: Create another replication mode for SolrCloud
- * SOLR-10292: Adds CartesianProductStream which turns a single tuple with a multi-valued field into N
- tuples, one for each value in the multi-valued field. (Dennis Gove)
+ * SOLR-10356: Adds basic math Streaming Evaluators (Dennis Gove)
+
+ * SOLR-10393: Adds UUID Streaming Evaluator (Dennis Gove)
+
+ * SOLR-10046: Add UninvertDocValuesMergePolicyFactory class. (Keith Laban, Christine Poerschke)
+
+ * SOLR-10547: JSON Facet API: Implement support for single-valued string fields for min/max aggregations.
+ (yonik)
+
+ * SOLR-10262: Add support for configurable metrics implementations. (ab)
+
+ * SOLR-10431: Make it possible to invoke v2 api calls using SolrJ (Cao Manh Dat, Noble Paul, shalin)
+
+ * SOLR-10233: Add support for different replica types, that can handle updates differently:
- - NRT: Writes updates to transaction log and indexes locally. Replicas of type “NRT” support NRT
- (soft commits) and RTG. Any NRT replica can become a leader. This was the only type supported
++ - NRT: Writes updates to transaction log and indexes locally. Replicas of type “NRT” support NRT
++ (soft commits) and RTG. Any NRT replica can become a leader. This was the only type supported
+ in SolrCloud until now and it’s the default type.
- - TLOG: Writes to transaction log, but not to index, uses replication to copy segment files from the
- shard leader. Any TLOG replica can become leader (by first applying all local transaction log
++ - TLOG: Writes to transaction log, but not to index, uses replication to copy segment files from the
++ shard leader. Any TLOG replica can become leader (by first applying all local transaction log
+ elements). If a replica is of type TLOG but is also the leader, it will behave as a NRT. This
+ is exactly what was added in SOLR-9835 (non-realtime replicas), just the API and naming changes.
- - PULL: Doesn’t index or writes to transaction log, just replicates from the shard leader. PULL replicas
- can’t become shard leaders (i.e., if there are only PULL replicas in the collection at some point,
- updates will fail same as if there is no leaders, queries continue to work), so they don’t even
++ - PULL: Doesn’t index or writes to transaction log, just replicates from the shard leader. PULL replicas
++ can’t become shard leaders (i.e., if there are only PULL replicas in the collection at some point,
++ updates will fail same as if there is no leaders, queries continue to work), so they don’t even
+ participate in elections.
+ (Tomás Fernández Löbbe)
+
+ * SOLR-10278: A new DSL to set cluster-wide preferences and policies on how to allocate replicas to nodes
+ (noble, shalin)
+* SOLR-10339: New set-trigger and remove-trigger APIs for autoscaling. (shalin)
+
+* SOLR-10340: New set-listener and remove-listener API for autoscaling. (shalin)
+
+* SOLR-10358: New suspend-trigger and resume-trigger APIs for autoscaling. (shalin)
+
- * SOLR-10356: Adds basic math Streaming Evaluators (Dennis Gove)
-
- * SOLR-10393: Adds UUID Streaming Evaluator (Dennis Gove)
-
+* SOLR-10376: Implement autoscaling trigger for nodeAdded event. (shalin)
+
+* SOLR-10396: Implement trigger support for nodeLost event type (Cao Manh Dat, shalin)
+
* SOLR-10373: Implement read API for autoscaling configuration at /admin/autoscaling or
/cluster/autoscaling paths. (shalin)
@@@ -102,13 -142,20 +152,27 @@@ Bug Fixe
* SOLR-9837: Fix 55% performance regression of FieldCache uninvert time of
numeric fields. (yonik)
+ * SOLR-10408: v2 API introspect should return useful message for non-existent command (Cao Manh Dat)
+
+ * SOLR-10411: v2 Collection API "modify" command specification's replicationFactor property is incorrectly typed as string,
+ should be integer (Cao Manh Dat)
+
+ * SOLR-10405: v2 API introspect response contains multiple copies of the experimental format WARNING (Cao Manh Dat)
+
+ * SOLR-10412: v2 API: many API command specification properties are typed "number" but should instead be typed "integer"
+ (Steve Rowe, Cao Manh Dat)
+
+ * SOLR-10413: v2 API: parsed JSON type should be coerced to expected type (Cao Manh Dat, Noble Paul)
+
+ * SOLR-10223: Allow running examples as root on Linux with -force option (janhoy)
+
+* SOLR-10602: Triggers should be able to restore state from old instances when taking over. (shalin)
+
+* SOLR-10714: OverseerTriggerThread does not start triggers on overseer start until autoscaling
+ config watcher is fired. (shalin)
+
+* SOLR-10738: TriggerAction is initialised even if the trigger is never scheduled. (shalin)
+
Optimizations
----------------------
@@@ -140,12 -191,195 +208,197 @@@ Other Change
Add support for selecting specific properties from any compound metric using 'property' parameter to
/admin/metrics handler. (ab)
+ * SOLR-10557: Make "compact" format default for /admin/metrics. (ab)
+
+ * SOLR-10310: By default, stop splitting on whitespace prior to analysis
+ in edismax and standard/"lucene" query parsers. (Steve Rowe)
+
+ * SOLR-10647: Move the V1 <-> V2 API mapping to SolrJ (noble)
+
+ * SOLR-10584: We'll now always throw an exception if defaultOperator is found in schema. This config has
+ been deprecated since 3.6, and enforced for new configs since 6.6 (janhoy)
+
+ * SOLR-10585: We'll now always throw an exception if defaultSearchField is found in schema. This config has
+ been deprecated since 3.6, and enforced for new configs since 6.6 (janhoy, David Smiley)
+
+ * SOLR-10414: RecoveryStrategy is now a Runnable instead of a Thread. (Tomás Fernández Löbbe)
+
+ * SOLR-10042: Delete old deprecated Admin UI, leaving the AngularJS UI the only one supported (janhoy)
+
+ * SOLR-10378: Clicking Solr logo on AdminUI shows blank page (Takumi Yoshida via janhoy)
+
+ * SOLR-10700: Deprecated and converted the PostingsSolrHighlighter to extend UnifiedSolrHighlighter and thus no
+ longer use the PostingsHighlighter. It should behave mostly the same. (David Smiley)
+
+ * SOLR-10710: Fix LTR failing tests. (Diego Ceccarelli via Tomás Fernández Löbbe)
+
+ * SOLR-10755: delete/refactor many solrj deprecations (hossman)
+
+ * SOLR-10752: replicationFactor (nrtReplicas) default is 0 if tlogReplicas is specified when creating a collection
+ (Tomás Fernández Löbbe)
+
+ * SOLR-10757: delete/refactor/cleanup CollectionAdminRequest deprecations (hossman)
+
+ * SOLR-10793: BlobHandler should have a well-known permission name (noble)
+
+ * SOLR-10744: Update noggit to newer version (0.8) (noble)
+
+ * SOLR-10792: Deprecate and remove implicit registration of "lucenePlusSort" aka OldLuceneQParser (hossman)
+
+ * SOLR-10791: Remove deprecated options in SSLTestConfig (hossman)
+
+ * LUCENE-7852: Correct copyright year(s) in solr/LICENSE.txt file.
+ (Christine Poerschke, Steve Rowe)
+
+ * SOLR-8668: In solrconfig.xml remove <mergePolicy> (and related <mergeFactor> and <maxMergeDocs>)
+ support in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
+ (Christine Poerschke, hossman)
+
+ * SOLR-10799: Extracted functionality to collect eligible replicas from HttpShardHandler.prepDistributed()
+ to a new method (Domenico Fabio Marino via Tomás Fernández Löbbe)
+
+ * SOLR-10801: Remove several deprecated methods that were exposed to plugin writers (hossman)
+
+ * SOLR-10671: Add abstract doInit method to the SolrMetricReporter base class.
+ (Christine Poerschke, Anshum Gupta)
+
+ * SOLR-10713: Ignore .pid and .out files in solr working directory (Jason Gerlowski via Mike Drob)
+
+* SOLR-10643: Throttling strategy for triggers and policy executions. (shalin)
+
* SOLR-10764: AutoScalingHandler should validate policy and preferences before updating zookeeper. (shalin)
+ * SOLR-10782: Improve error handling and tests for Snitch and subclasses and general cleanups. (Noble Paul, shalin)
+
+ * SOLR-10419: All collection APIs should use the new Policy framework for replica placement. (Noble Paul, shalin)
+
+ ================== 6.7.0 ==================
+
+ Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+ Versions of Major Components
+ ---------------------
+ Apache Tika 1.13
+ Carrot2 3.15.0
+ Velocity 1.7 and Velocity Tools 2.0
+ Apache UIMA 2.3.1
+ Apache ZooKeeper 3.4.10
+ Jetty 9.3.14.v20161028
+
+ Detailed Change List
----------------------
+ Upgrade Notes
+ ----------------------
+
+ * SOLR-10307: If starting Jetty without the Solr start script, you must now pass keystore and truststore
+ passwords via the env variables SOLR_SSL_KEY_STORE_PASSWORD and SOLR_SSL_TRUST_STORE_PASSWORD rather
+ than system properties.
+
+ * SOLR-10379: ManagedSynonymFilterFactory has been deprecated in favor of ManagedSynonymGraphFilterFactory.
+
+ New Features
+ ----------------------
+
+ * SOLR-10307: Allow Passing SSL passwords through environment variables. (Mano Kovacs via Mark Miller)
+
+ * SOLR-10721: Provide a way to know when Core Discovery is finished and when all async cores are done loading
+ (Erick Erickson)
-
++
+ * SOLR-10379: Add ManagedSynonymGraphFilterFactory, deprecate ManagedSynonymFilterFactory. (Steve Rowe)
+
+ * SOLR-10479: Adds support for HttpShardHandlerFactory.loadBalancerRequests(MinimumAbsolute|MaximumFraction)
+ configuration. (Ramsey Haddad, Daniel Collins, Christine Poerschke)
+
+ * SOLR-3702: concat(...) function query (Andrey Kudryavtsev via Mikhail Khludnev)
+
+ * SOLR-10767: Add movingAvg Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10813: Add arraySort Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10696: Add cumulative probability function (Joel Bernstein)
+
+ * SOLR-10765: Add anova Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10754: Add hist Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10753: Add array Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10747: Allow /stream handler to execute Stream Evaluators directly (Joel Bernstein)
+
+ * SOLR-10743: Add sequence StreamEvaluator (Joel Bernstein)
+
+ * SOLR-10684: Add finddelay Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10731: Add knn Streaming Expression (Joel Bernstein)
+
+ * SOLR-10724: Add describe Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10693: Add copyOfRange Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10623: Add sql Streaming Expression (Joel Bernstein)
+
+ * SOLR-10661: Add copyOf Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10663: Add distance Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10664: Add scale Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10666: Add rank transformation Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10662: Add length Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10660: Add reverse Stream Evaluator (Joel Bernstein)
+
+ Bug Fixes
+ ----------------------
+ * SOLR-10723 JSON Facet API: resize() implemented incorrectly for CountSlotAcc, HllAgg.NumericAcc
+ resulting in exceptions when using a hashing faceting method and sorting by hll(numeric_field).
+ (yonik)
+
+ * SOLR-10719: Creating a core.properties fails if the parent of core.properties is a symlinked dierctory
+ (Erick Erickson)
+
+ * SOLR-10360: Solr HDFS snapshot export fails due to FileNotFoundException error when using MR1 instead of
+ yarn. (Hrishikesh via Mark Miller)
+
+ * SOLR-10137: Ensure that ConfigSets created via API are mutable. (Hrishikesh via Mark Miller)
+
+ Optimizations
+ ----------------------
+ * SOLR-10634: JSON Facet API: When a field/terms facet will retrieve all buckets (i.e. limit:-1)
+ and there are no nested facets, aggregations are computed in the first collection phase
+ so that the second phase which would normally involve calculating the domain for the bucket
+ can be skipped entirely, leading to large performance improvements. (yonik)
+
+ Other Changes
+ ----------------------
+
+ * SOLR-10617: JDBCStream accepts columns of type TIME, DATE & TIMESTAMP as well as CLOBs and decimal
+ numeric types (James Dyer)
+
+ * SOLR-10400: Replace (instanceof TrieFooField || instanceof FooPointField) constructs with
+ FieldType.getNumberType() or SchemaField.getSortField() where appropriate. (hossman, Steve Rowe)
-
-* SOLR-10438: Assign explicit useDocValuesAsStored values to all points field types in
++
++* SOLR-10438: Assign explicit useDocValuesAsStored values to all points field types in
+ schema-point.xml/TestPointFields. (hossman, Steve Rowe)
-
++
+ * LUCENE-7705: Allow CharTokenizer-derived tokenizers and KeywordTokenizer to configure the max token length.
+ (Amrit Sarkar via Erick Erickson)
+
+ * SOLR-10659: Remove ResponseBuilder.getSortSpec use in SearchGroupShardResponseProcessor.
+ (Judith Silverman via Christine Poerschke)
+
+ * SOLR-10741: Factor out createSliceShardsStr method from HttpShardHandler.prepDistributed.
+ (Domenico Fabio Marino via Christine Poerschke)
+
+ * SOLR-10790: Fix warnings in Assign.java and ReplicaAssigner.java classes.
+ (Christine Poerschke)
+
+ * SOLR-8437: Improve RAMDirectory details in sample solrconfig files (Mark Miller, Varun Thacker)
+
+ * SOLR-8762: return child docs in DIH debug (Gopikannan Venugopalsamy via Mikhail Khludnev)
+
================== 6.6.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
@@@ -202,6 -439,61 +458,61 @@@ New Feature
Example: json.facet={x:"stddev(field1)", y:"variance(field2)"}
(Rustam Hashimov, yonik)
+ * SOLR-10505: Add multi-field support to TermsComponent when requesting terms' statistics. (Shai Erera)
+
+ * SOLR-10537: SolrJ: Added SolrParams.toLocalParamsString() and ClientUtils.encodeLocalParamVal. (David Smiley)
+
+ * SOLR-10507: Core Admin status command to emit collection details of each core (noble)
+
-* SOLR-10521: introducing sort=childfield(field) asc for searching by {!parent} (Mikhail Khludnev)
++* SOLR-10521: introducing sort=childfield(field) asc for searching by {!parent} (Mikhail Khludnev)
+
+ * SOLR-9596: Add Solr support for SimpleTextCodec, via <codecFactory class="solr.SimpleTextCodecFactory"/>
+ in solrconfig.xml (per-field specification in the schema is not possible). (Steve Rowe)
+
+ * SOLR-1485: Add payload support with payload() value source and {!payload_score} and {!payload_check}
+ query parsers. (Erik Hatcher)
+
+ * SOLR-10430: Add ls command to ZkCLI for listing only sub-directories. (Peter Szantai-Kis via Mark Miller)
+
+ * SOLR-10583: JSON Faceting now supports a query time 'join' domain change option (hossman)
+
+ * SOLR-9530: An Update Processor to convert normal update operation to an atomic operations such as
+ add, set,inc, remove ,set, removeregex (Amrit Sarkar, noble)
+
+ * SOLR-10303: Add date/time Stream Evaluators (Gethin James, Dennis Gove, Joel Bernstein)
+
+ * SOLR-10351: Add analyze Stream Evaluator to support streaming NLP (Joel Bernstein)
+
+ * SOLR-10426: Add shuffle Streaming Expression (Joel Bernstein)
+
+ * SOLR-10274: The search Streaming Expression should work in non-SolrCloud mode (Joel Bernstein)
+
+ * SOLR-10504: Add echo Streaming Expression (Joel Bernstein)
+
+ * SOLR-10516: Add eval Streaming Expression (Joel Bernstein)
+
+ * SOLR-10566: Add timeseries Streaming Expression (Joel Bernstein)
+
+ * SOLR-10559: Add let, get and tuple Streaming Expressions (Dennis Gove, Joel Bernstein)
+
+ * SOLR-10582: Add Correlation Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10536: stats Streaming Expression should work in non-SolrCloud mode (Joel Bernstein)
+
+ * SOLR-10622: Add regress and predict Stream Evaluators (Joel Bernstein)
+
+ * SOLR-10626: Add covariance Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10625: Add convolution Stream Evaluator (Joel Bernstein)
+
+ * SOLR-10638: Add normalize Stream Evaluator (Joel Bernstein)
+
+ * SOLR-8440: Support for enabling basic authentication using bin/solr|bin/solr.cmd. (Ishan Chattopadhyaya, janhoy,
+ Noble Paul, Hrishikesh Gadre)
+
+ * SOLR-10292: Adds CartesianProductStream which turns a single tuple with a multi-valued field into N
+ tuples, one for each value in the multi-valued field. (Dennis Gove)
+
Optimizations
----------------------
@@@ -209,6 -501,19 +520,19 @@@
instance if it already is modifiable, otherwise creates a new ModifiableSolrParams instance.
(Jörg Rathlev via Koji)
+ * SOLR-10499: facet.heatmap is now significantly faster when the docset (base query) matches everything and there are no
+ deleted docs. It's also faster when the docset matches a small fraction of the index or none. (David Smiley)
+
-* SOLR-9217: Reduced heap consumption for filter({!join ... score=...})
++* SOLR-9217: Reduced heap consumption for filter({!join ... score=...})
+ (Andrey Kudryavtsev, Gopikannan Venugopalsamy via Mikhail Khludnev)
+
+ * SOLR-10548: JSON Facet API now uses hyper-log-log++ for determining the number of buckets
+ when merging requests from a multi-shard distributed request. (yonik)
+
+ * SOLR-10524: Better ZkStateWriter batching (Cao Manh Dat, Noble Paul, shalin, Scott Blum)
+
+ * SOLR-10619: Optimize using cache for DistributedQueue in case of single-consumer (Cao Manh Dat, Scott Blum)
+
Bug Fixes
----------------------
* SOLR-10281: ADMIN_PATHS is duplicated in two places and inconsistent. This can cause automatic
@@@ -220,7 -525,7 +544,7 @@@
* SOLR-10369: bin\solr.cmd delete and healthcheck now works again; fixed continuation chars ^ (Luis Goes via janhoy)
--* SOLR-10387: zkTransfer normalizes destination path incorrectly if source is a windows directory
++* SOLR-10387: zkTransfer normalizes destination path incorrectly if source is a windows directory
(gopikannan venugopalsamy, Erick Erickson)
* SOLR-10323: fix to SpellingQueryConverter to properly strip out colons in field-specific queries.
@@@ -228,8 -533,8 +552,8 @@@
* SOLR-10264: Fixes multi-term synonym parsing in ManagedSynonymFilterFactory.
(Jörg Rathlev, Steve Rowe, Christine Poerschke)
--
--* SOLR-8807: fix Spellcheck "collateMaxCollectDocs" parameter to work with queries that have the
++
++* SOLR-8807: fix Spellcheck "collateMaxCollectDocs" parameter to work with queries that have the
CollpasingQParserPlugin applied. (James Dyer)
* SOLR-10474: TestPointFields.testPointFieldReturn() depends on order of unsorted hits. (Steve Rowe)
@@@ -245,6 -550,51 +569,51 @@@
* SOLR-5127: Multiple highlight fields and wildcards are now supported e.g. hl.fl=title,text_*
(Sven-S. Porst, Daniel Debray, Simon Endele, Christine Poerschke)
+ * SOLR-10493: Investigate SolrCloudExampleTest failures. (Erick Erickson)
+
+ * SOLR-10552: JSON Facet API numBuckets was not consistent between distributed and non-distributed requests
+ when there was a mincount > 1. This has been corrected by changing numBuckets cardinality processing to
+ ignore mincount > 1 for non-distributed requests. (yonik)
+
-* SOLR-10520: child.facet.field doubled counts at least when rows>0. (Dr. Oleg Savrasov via Mikhail Khludnev)
++* SOLR-10520: child.facet.field doubled counts at least when rows>0. (Dr. Oleg Savrasov via Mikhail Khludnev)
+
+ * SOLR-10480: Full pagination in JSON Facet API using offset does not work. (yonik)
+
+ * SOLR-10526: facet.heatmap didn't honor facet exclusions ('ex') for distributed search. (David Smiley)
+
-* SOLR-10500: nested child docs are adopted by neighbour when several parents come in update/json/docs
++* SOLR-10500: nested child docs are adopted by neighbour when several parents come in update/json/docs
+ (Alexey Suprun,noble via Mikhail Khludnev)
+
+ * SOLR-10316: Unloading a core can remove a ZK SolrCore registration entry for the wrong SolrCore. (Mark Miller)
+
+ * SOLR-10588: Prevent redundant core reload on config update (Mikhail Khludnev)
+
+ * SOLR-10549: The new 'large' attribute had been forgotten in /schema/fieldtypes?showDefaults=true (David Smiley)
+
+ * SOLR-10615: requests are suspended until SolrDispatchFilter initialization is completed.
+ After core container shutdown or severe initialization problem Solr responds with
+ http stauts 404 Not Found instead of 500 as it was before (Mikhail Khludnev)
+
+ * SOLR-8149: Admin UI - Plugins / Stats - active item is now highlighted (Labuzov Dmitriy via janhoy)
+
+ * SOLR-10630: HttpSolrCall.getAuthCtx().new AuthorizationContext() {...}.getParams()
+ sometimes throws java.lang.NullPointerException (hu xiaodong via shalin)
+
+ * SOLR-9527: Improve distribution of replicas when restoring a collection
+ (Hrishikesh Gadre, Stephen Lewis, Rohit, Varun Thacker)
+
+ * LUCENE-7821: The classic and flexible query parsers, as well as Solr's
+ "lucene"/standard query parser, should require " TO " in range queries,
+ and accept "TO" as endpoints in range queries. (hossman, Steve Rowe)
+
+ * SOLR-10735: Windows script (solr.cmd) didn't work properly with directory containing spaces. Adding quotations
- to fix (Uwe Schindler, janhoy, Tomas Fernandez-Lobbe, Ishan Chattopadhyaya)
++ to fix (Uwe Schindler, janhoy, Tomas Fernandez-Lobbe, Ishan Chattopadhyaya)
+
+ Ref Guide
+ ----------------------
+
+ * SOLR-10758: Modernize the Solr ref guide's Chinese language analysis coverage. (Steve Rowe)
+
Other Changes
----------------------
@@@ -257,7 -607,7 +626,7 @@@
* SOLR-10352: bin/solr script now prints warning when available system entropy is lower than 300 (Esther Quansah via
Ishan Chattopadhyaya)
--
++
* SOLR-10344: Update Solr default/example and test configs to use WordDelimiterGraphFilterFactory. (Steve Rowe)
* SOLR-10343: Update Solr default/example and test configs to use SynonymGraphFilterFactory. (Steve Rowe)
@@@ -265,8 -615,9 +634,9 @@@
* SOLR-10365: Handle a SolrCoreInitializationException while publishing core state during SolrCore creation
(Ishan Chattopadhyaya)
--* SOLR-10357: Enable edismax and standard query parsers to handle the option combination
++* SOLR-10357: Enable edismax and standard query parsers to handle the option combination
sow=false / autoGeneratePhraseQueries="true" by setting QueryBuilder.autoGenerateMultiTermSynonymsQuery.
+ (Steve Rowe)
* SOLR-10147: Admin UI -> Cloud -> Graph: Impossible to see shard state (Amrit Sarkar, janhoy)
@@@ -311,7 -688,7 +707,7 @@@ Bug Fixe
* SOLR-10404: The fetch() streaming expression wouldn't work if a value included query syntax chars (like :+-).
Fixed, and enhanced the generated query to not pollute the queryCache. (David Smiley)
--
++
* SOLR-10423: Disable graph query production via schema configuration <fieldtype ... enableGraphQueries="false">.
This fixes broken queries for ShingleFilter-containing query-time analyzers when request param sow=false.
(Steve Rowe)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/java/org/apache/solr/cloud/Overseer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/java/org/apache/solr/cloud/autoscaling/AutoScalingHandler.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/cloud/autoscaling/AutoScalingHandler.java
index bf1cc51,5946bf4..ff101f3
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/AutoScalingHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/AutoScalingHandler.java
@@@ -21,15 -21,9 +21,13 @@@ import java.io.IOException
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
import java.util.HashMap;
- import java.util.HashSet;
import java.util.List;
- import java.util.Locale;
import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
import com.google.common.collect.ImmutableSet;
import org.apache.solr.api.Api;
@@@ -49,8 -44,6 +48,7 @@@ import org.apache.solr.request.SolrRequ
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.security.AuthorizationContext;
import org.apache.solr.security.PermissionNameProvider;
- import org.apache.solr.util.CommandOperation;
+import org.apache.solr.util.TimeSource;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
index c0ceddb,6d70435..da9f70b
--- a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
@@@ -68,9 -73,9 +73,10 @@@ import org.apache.solr.schema.FieldType
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.DocList;
+import org.apache.solr.search.SolrDocumentFetcher;
import org.apache.solr.search.QParser;
import org.apache.solr.search.ReturnFields;
+ import org.apache.solr.search.SolrDocumentFetcher;
import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.search.SolrReturnFields;
import org.apache.solr.search.SyntaxError;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGangliaReporter.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/metrics/reporters/SolrGangliaReporter.java
index 142ddd8,4dfdbeb..0eec3a0
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGangliaReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrGangliaReporter.java
@@@ -110,11 -110,14 +110,18 @@@ public class SolrGangliaReporter extend
}
@Override
+ protected void doInit() {
+ if (!testing) {
+ start();
+ }
+ }
+
+ @Override
protected void validate() throws IllegalStateException {
+ if (!enabled) {
+ log.info("Reporter disabled for registry " + registryName);
+ return;
+ }
if (host == null) {
throw new IllegalStateException("Init argument 'host' must be set to a valid Ganglia server name.");
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/resources/apispec/autoscaling.Commands.json
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
----------------------------------------------------------------------
diff --cc solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
index 39dea17,7bf4616..2f02df9
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
@@@ -516,8 -198,8 +515,8 @@@ public class AutoScalingHandlerTest ext
" {'nodeRole':'overseer', 'replica':0}" +
" ]" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, setClusterPolicyCommand);
- SolrRequest req = createAutoScalingRequest(SolrRequest.METHOD.POST, setClusterPolicyCommand);
- NamedList<Object> response = solrClient.request(req);
++ req = createAutoScalingRequest(SolrRequest.METHOD.POST, setClusterPolicyCommand);
+ response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
String setPreferencesCommand = "{" +
@@@ -544,20 -226,9 +543,19 @@@
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
- SolrQuery query = new SolrQuery().setParam(CommonParams.QT, path);
- QueryResponse queryResponse = solrClient.query(query);
- response = queryResponse.getResponse();
+ req = createAutoScalingRequest(SolrRequest.METHOD.GET, null);
+ response = solrClient.request(req);
+ Map triggers = (Map) response.get("triggers");
+ assertNotNull(triggers);
+ assertEquals(1, triggers.size());
+ assertTrue(triggers.containsKey("node_added_trigger1"));
+ Map node_added_trigger1 = (Map) triggers.get("node_added_trigger1");
+ assertEquals(4, node_added_trigger1.size());
+ assertEquals(0L, node_added_trigger1.get("waitFor"));
+ assertEquals(true, node_added_trigger1.get("enabled"));
+ assertEquals(3, ((List)node_added_trigger1.get("actions")).size());
+
List<Map> clusterPrefs = (List<Map>) response.get("cluster-preferences");
assertNotNull(clusterPrefs);
assertEquals(4, clusterPrefs.size());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/solr-ref-guide/src/fonts/Noto_Sans/LICENSE.txt
----------------------------------------------------------------------
diff --cc solr/solr-ref-guide/src/fonts/Noto_Sans/LICENSE.txt
index 0000000,75b5248..d645695
mode 000000,100755..100755
--- a/solr/solr-ref-guide/src/fonts/Noto_Sans/LICENSE.txt
+++ b/solr/solr-ref-guide/src/fonts/Noto_Sans/LICENSE.txt
@@@ -1,0 -1,202 +1,202 @@@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
++
++ Apache License
++ Version 2.0, January 2004
++ http://www.apache.org/licenses/
++
++ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
++
++ 1. Definitions.
++
++ "License" shall mean the terms and conditions for use, reproduction,
++ and distribution as defined by Sections 1 through 9 of this document.
++
++ "Licensor" shall mean the copyright owner or entity authorized by
++ the copyright owner that is granting the License.
++
++ "Legal Entity" shall mean the union of the acting entity and all
++ other entities that control, are controlled by, or are under common
++ control with that entity. For the purposes of this definition,
++ "control" means (i) the power, direct or indirect, to cause the
++ direction or management of such entity, whether by contract or
++ otherwise, or (ii) ownership of fifty percent (50%) or more of the
++ outstanding shares, or (iii) beneficial ownership of such entity.
++
++ "You" (or "Your") shall mean an individual or Legal Entity
++ exercising permissions granted by this License.
++
++ "Source" form shall mean the preferred form for making modifications,
++ including but not limited to software source code, documentation
++ source, and configuration files.
++
++ "Object" form shall mean any form resulting from mechanical
++ transformation or translation of a Source form, including but
++ not limited to compiled object code, generated documentation,
++ and conversions to other media types.
++
++ "Work" shall mean the work of authorship, whether in Source or
++ Object form, made available under the License, as indicated by a
++ copyright notice that is included in or attached to the work
++ (an example is provided in the Appendix below).
++
++ "Derivative Works" shall mean any work, whether in Source or Object
++ form, that is based on (or derived from) the Work and for which the
++ editorial revisions, annotations, elaborations, or other modifications
++ represent, as a whole, an original work of authorship. For the purposes
++ of this License, Derivative Works shall not include works that remain
++ separable from, or merely link (or bind by name) to the interfaces of,
++ the Work and Derivative Works thereof.
++
++ "Contribution" shall mean any work of authorship, including
++ the original version of the Work and any modifications or additions
++ to that Work or Derivative Works thereof, that is intentionally
++ submitted to Licensor for inclusion in the Work by the copyright owner
++ or by an individual or Legal Entity authorized to submit on behalf of
++ the copyright owner. For the purposes of this definition, "submitted"
++ means any form of electronic, verbal, or written communication sent
++ to the Licensor or its representatives, including but not limited to
++ communication on electronic mailing lists, source code control systems,
++ and issue tracking systems that are managed by, or on behalf of, the
++ Licensor for the purpose of discussing and improving the Work, but
++ excluding communication that is conspicuously marked or otherwise
++ designated in writing by the copyright owner as "Not a Contribution."
++
++ "Contributor" shall mean Licensor and any individual or Legal Entity
++ on behalf of whom a Contribution has been received by Licensor and
++ subsequently incorporated within the Work.
++
++ 2. Grant of Copyright License. Subject to the terms and conditions of
++ this License, each Contributor hereby grants to You a perpetual,
++ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
++ copyright license to reproduce, prepare Derivative Works of,
++ publicly display, publicly perform, sublicense, and distribute the
++ Work and such Derivative Works in Source or Object form.
++
++ 3. Grant of Patent License. Subject to the terms and conditions of
++ this License, each Contributor hereby grants to You a perpetual,
++ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
++ (except as stated in this section) patent license to make, have made,
++ use, offer to sell, sell, import, and otherwise transfer the Work,
++ where such license applies only to those patent claims licensable
++ by such Contributor that are necessarily infringed by their
++ Contribution(s) alone or by combination of their Contribution(s)
++ with the Work to which such Contribution(s) was submitted. If You
++ institute patent litigation against any entity (including a
++ cross-claim or counterclaim in a lawsuit) alleging that the Work
++ or a Contribution incorporated within the Work constitutes direct
++ or contributory patent infringement, then any patent licenses
++ granted to You under this License for that Work shall terminate
++ as of the date such litigation is filed.
++
++ 4. Redistribution. You may reproduce and distribute copies of the
++ Work or Derivative Works thereof in any medium, with or without
++ modifications, and in Source or Object form, provided that You
++ meet the following conditions:
++
++ (a) You must give any other recipients of the Work or
++ Derivative Works a copy of this License; and
++
++ (b) You must cause any modified files to carry prominent notices
++ stating that You changed the files; and
++
++ (c) You must retain, in the Source form of any Derivative Works
++ that You distribute, all copyright, patent, trademark, and
++ attribution notices from the Source form of the Work,
++ excluding those notices that do not pertain to any part of
++ the Derivative Works; and
++
++ (d) If the Work includes a "NOTICE" text file as part of its
++ distribution, then any Derivative Works that You distribute must
++ include a readable copy of the attribution notices contained
++ within such NOTICE file, excluding those notices that do not
++ pertain to any part of the Derivative Works, in at least one
++ of the following places: within a NOTICE text file distributed
++ as part of the Derivative Works; within the Source form or
++ documentation, if provided along with the Derivative Works; or,
++ within a display generated by the Derivative Works, if and
++ wherever such third-party notices normally appear. The contents
++ of the NOTICE file are for informational purposes only and
++ do not modify the License. You may add Your own attribution
++ notices within Derivative Works that You distribute, alongside
++ or as an addendum to the NOTICE text from the Work, provided
++ that such additional attribution notices cannot be construed
++ as modifying the License.
++
++ You may add Your own copyright statement to Your modifications and
++ may provide additional or different license terms and conditions
++ for use, reproduction, or distribution of Your modifications, or
++ for any such Derivative Works as a whole, provided Your use,
++ reproduction, and distribution of the Work otherwise complies with
++ the conditions stated in this License.
++
++ 5. Submission of Contributions. Unless You explicitly state otherwise,
++ any Contribution intentionally submitted for inclusion in the Work
++ by You to the Licensor shall be under the terms and conditions of
++ this License, without any additional terms or conditions.
++ Notwithstanding the above, nothing herein shall supersede or modify
++ the terms of any separate license agreement you may have executed
++ with Licensor regarding such Contributions.
++
++ 6. Trademarks. This License does not grant permission to use the trade
++ names, trademarks, service marks, or product names of the Licensor,
++ except as required for reasonable and customary use in describing the
++ origin of the Work and reproducing the content of the NOTICE file.
++
++ 7. Disclaimer of Warranty. Unless required by applicable law or
++ agreed to in writing, Licensor provides the Work (and each
++ Contributor provides its Contributions) on an "AS IS" BASIS,
++ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
++ implied, including, without limitation, any warranties or conditions
++ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
++ PARTICULAR PURPOSE. You are solely responsible for determining the
++ appropriateness of using or redistributing the Work and assume any
++ risks associated with Your exercise of permissions under this License.
++
++ 8. Limitation of Liability. In no event and under no legal theory,
++ whether in tort (including negligence), contract, or otherwise,
++ unless required by applicable law (such as deliberate and grossly
++ negligent acts) or agreed to in writing, shall any Contributor be
++ liable to You for damages, including any direct, indirect, special,
++ incidental, or consequential damages of any character arising as a
++ result of this License or out of the use or inability to use the
++ Work (including but not limited to damages for loss of goodwill,
++ work stoppage, computer failure or malfunction, or any and all
++ other commercial damages or losses), even if such Contributor
++ has been advised of the possibility of such damages.
++
++ 9. Accepting Warranty or Additional Liability. While redistributing
++ the Work or Derivative Works thereof, You may choose to offer,
++ and charge a fee for, acceptance of support, warranty, indemnity,
++ or other liability obligations and/or rights consistent with this
++ License. However, in accepting such obligations, You may act only
++ on Your own behalf and on Your sole responsibility, not on behalf
++ of any other Contributor, and only if You agree to indemnify,
++ defend, and hold each Contributor harmless for any liability
++ incurred by, or claims asserted against, such Contributor by reason
++ of your accepting any such warranty or additional liability.
++
++ END OF TERMS AND CONDITIONS
++
++ APPENDIX: How to apply the Apache License to your work.
++
++ To apply the Apache License to your work, attach the following
++ boilerplate notice, with the fields enclosed by brackets "[]"
++ replaced with your own identifying information. (Don't include
++ the brackets!) The text should be enclosed in the appropriate
++ comment syntax for the file format. We also recommend that a
++ file or class name and description of purpose be included on the
++ same "printed page" as the copyright notice for easier
++ identification within third-party archives.
++
++ Copyright [yyyy] [name of copyright owner]
++
++ Licensed under the Apache License, Version 2.0 (the "License");
++ you may not use this file except in compliance with the License.
++ You may obtain a copy of the License at
++
++ http://www.apache.org/licenses/LICENSE-2.0
++
++ Unless required by applicable law or agreed to in writing, software
++ distributed under the License is distributed on an "AS IS" BASIS,
++ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ See the License for the specific language governing permissions and
++ limitations under the License.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Cell.java
----------------------------------------------------------------------
diff --cc solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Cell.java
index 0f2b24b,0f2b24b..d1a3626
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Cell.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Cell.java
@@@ -1,57 -1,57 +1,7 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one or more
-- * contributor license agreements. See the NOTICE file distributed with
-- * this work for additional information regarding copyright ownership.
-- * The ASF licenses this file to You under the Apache License, Version 2.0
-- * (the "License"); you may not use this file except in compliance with
-- * the License. You may obtain a copy of the License at
-- *
-- * http://www.apache.org/licenses/LICENSE-2.0
-- *
-- * Unless required by applicable law or agreed to in writing, software
-- * distributed under the License is distributed on an "AS IS" BASIS,
-- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- * See the License for the specific language governing permissions and
-- * limitations under the License.
-- */
--
package org.apache.solr.cloud.autoscaling;
--import java.io.IOException;
--import java.util.HashMap;
--
--import org.apache.solr.common.MapWriter;
--import org.apache.solr.common.util.Utils;
--
--class Cell implements MapWriter {
-- final int index;
-- final String name;
-- Object val, approxVal;
--
-- Cell(int index, String name, Object val) {
-- this.index = index;
-- this.name = name;
-- this.val = val;
-- }
--
-- Cell(int index, String name, Object val, Object approxVal) {
-- this.index = index;
-- this.name = name;
-- this.val = val;
-- this.approxVal = approxVal;
-- }
--
-- @Override
-- public void writeMap(EntryWriter ew) throws IOException {
-- ew.put(name, val);
-- }
--
-- @Override
-- public String toString() {
-- return Utils.toJSONString(this.toMap(new HashMap<>()));
-- }
--
-- public Cell copy() {
-- return new Cell(index, name, val, approxVal);
-- }
++/**
++ * Created by shalin on 6/6/17.
++ */
++public class Cell {
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6a8768e3/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java
----------------------------------------------------------------------
[25/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-8437: Improve
RAMDirectory details in sample solrconfig files
Posted by sh...@apache.org.
SOLR-8437: Improve RAMDirectory details in sample solrconfig files
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2c9f8604
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2c9f8604
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2c9f8604
Branch: refs/heads/feature/autoscaling
Commit: 2c9f8604c2a8a82d53c125a5af4ad6326df311ac
Parents: 2eacf13
Author: Varun Thacker <va...@apache.org>
Authored: Fri Jun 2 21:56:49 2017 -0700
Committer: Varun Thacker <va...@apache.org>
Committed: Fri Jun 2 21:56:49 2017 -0700
----------------------------------------------------------------------
solr/CHANGES.txt | 2 ++
solr/example/example-DIH/solr/db/conf/solrconfig.xml | 3 +--
solr/example/example-DIH/solr/mail/conf/solrconfig.xml | 3 +--
solr/example/example-DIH/solr/solr/conf/solrconfig.xml | 3 +--
solr/example/files/conf/solrconfig.xml | 3 +--
solr/server/solr/configsets/basic_configs/conf/solrconfig.xml | 3 +--
.../configsets/data_driven_schema_configs/conf/solrconfig.xml | 3 +--
.../configsets/sample_techproducts_configs/conf/solrconfig.xml | 3 +--
8 files changed, 9 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2c9f8604/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index b7e0b61..3c887be 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -313,6 +313,8 @@ Other Changes
* SOLR-10790: Fix warnings in Assign.java and ReplicaAssigner.java classes.
(Christine Poerschke)
+* SOLR-8437: Improve RAMDirectory details in sample solrconfig files (Mark Miller, Varun Thacker)
+
================== 6.6.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2c9f8604/solr/example/example-DIH/solr/db/conf/solrconfig.xml
----------------------------------------------------------------------
diff --git a/solr/example/example-DIH/solr/db/conf/solrconfig.xml b/solr/example/example-DIH/solr/db/conf/solrconfig.xml
index 71d8f5a..8513aa0 100644
--- a/solr/example/example-DIH/solr/db/conf/solrconfig.xml
+++ b/solr/example/example-DIH/solr/db/conf/solrconfig.xml
@@ -112,8 +112,7 @@
One can force a particular implementation via solr.MMapDirectoryFactory,
solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
- solr.RAMDirectoryFactory is memory based, not
- persistent, and doesn't work with replication.
+ solr.RAMDirectoryFactory is memory based and not persistent.
-->
<directoryFactory name="DirectoryFactory"
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2c9f8604/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
----------------------------------------------------------------------
diff --git a/solr/example/example-DIH/solr/mail/conf/solrconfig.xml b/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
index 8bc24f5..7120e43 100644
--- a/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
+++ b/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
@@ -115,8 +115,7 @@
One can force a particular implementation via solr.MMapDirectoryFactory,
solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
- solr.RAMDirectoryFactory is memory based, not
- persistent, and doesn't work with replication.
+ solr.RAMDirectoryFactory is memory based and not persistent.
-->
<directoryFactory name="DirectoryFactory"
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2c9f8604/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
----------------------------------------------------------------------
diff --git a/solr/example/example-DIH/solr/solr/conf/solrconfig.xml b/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
index 873391b..5fc9711 100644
--- a/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
+++ b/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
@@ -112,8 +112,7 @@
One can force a particular implementation via solr.MMapDirectoryFactory,
solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
- solr.RAMDirectoryFactory is memory based, not
- persistent, and doesn't work with replication.
+ solr.RAMDirectoryFactory is memory based and not persistent.
-->
<directoryFactory name="DirectoryFactory"
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2c9f8604/solr/example/files/conf/solrconfig.xml
----------------------------------------------------------------------
diff --git a/solr/example/files/conf/solrconfig.xml b/solr/example/files/conf/solrconfig.xml
index f83c235..71da510 100644
--- a/solr/example/files/conf/solrconfig.xml
+++ b/solr/example/files/conf/solrconfig.xml
@@ -114,8 +114,7 @@
One can force a particular implementation via solr.MMapDirectoryFactory,
solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
- solr.RAMDirectoryFactory is memory based, not
- persistent, and doesn't work with replication.
+ solr.RAMDirectoryFactory is memory based and not persistent.
-->
<directoryFactory name="DirectoryFactory"
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2c9f8604/solr/server/solr/configsets/basic_configs/conf/solrconfig.xml
----------------------------------------------------------------------
diff --git a/solr/server/solr/configsets/basic_configs/conf/solrconfig.xml b/solr/server/solr/configsets/basic_configs/conf/solrconfig.xml
index e009aab..53f74c3 100644
--- a/solr/server/solr/configsets/basic_configs/conf/solrconfig.xml
+++ b/solr/server/solr/configsets/basic_configs/conf/solrconfig.xml
@@ -112,8 +112,7 @@
One can force a particular implementation via solr.MMapDirectoryFactory,
solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
- solr.RAMDirectoryFactory is memory based, not
- persistent, and doesn't work with replication.
+ solr.RAMDirectoryFactory is memory based and not persistent.
-->
<directoryFactory name="DirectoryFactory"
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2c9f8604/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml
----------------------------------------------------------------------
diff --git a/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml b/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml
index 2ca1b7f..48d47e3 100644
--- a/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml
+++ b/solr/server/solr/configsets/data_driven_schema_configs/conf/solrconfig.xml
@@ -112,8 +112,7 @@
One can force a particular implementation via solr.MMapDirectoryFactory,
solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
- solr.RAMDirectoryFactory is memory based, not
- persistent, and doesn't work with replication.
+ solr.RAMDirectoryFactory is memory based and not persistent.
-->
<directoryFactory name="DirectoryFactory"
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2c9f8604/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
----------------------------------------------------------------------
diff --git a/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml b/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
index 23c2acd..698213d 100644
--- a/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
+++ b/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
@@ -116,8 +116,7 @@
One can force a particular implementation via solr.MMapDirectoryFactory,
solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
- solr.RAMDirectoryFactory is memory based, not
- persistent, and doesn't work with replication.
+ solr.RAMDirectoryFactory is memory based and not persistent.
-->
<directoryFactory name="DirectoryFactory"
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
[16/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10799: Refator
HttpShardHandler.prepDistributed collection of shard replicas
Posted by sh...@apache.org.
SOLR-10799: Refator HttpShardHandler.prepDistributed collection of shard replicas
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/3618fc52
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/3618fc52
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/3618fc52
Branch: refs/heads/feature/autoscaling
Commit: 3618fc529dff85ee604614b3c545fa0b5fbf3b06
Parents: 393a2ed
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Fri Jun 2 10:34:30 2017 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Fri Jun 2 10:34:30 2017 -0700
----------------------------------------------------------------------
solr/CHANGES.txt | 3 ++
.../handler/component/HttpShardHandler.java | 47 +++++++++++++-------
2 files changed, 33 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3618fc52/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 195443d..6b664e4 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -225,6 +225,9 @@ Other Changes
support in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
(Christine Poerschke, hossman)
+* SOLR-10799: Extracted functionality to collect eligible replicas from HttpShardHandler.prepDistributed()
+ to a new method (Domenico Fabio Marino via Tomás Fernández Löbbe)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3618fc52/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
index bc620b6..2954cff 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
@@ -30,6 +30,7 @@ import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
import org.apache.http.client.HttpClient;
import org.apache.solr.client.solrj.SolrClient;
@@ -398,18 +399,11 @@ public class HttpShardHandler extends ShardHandler {
continue;
// throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "no such shard: " + sliceName);
}
- Replica shardLeader = null;
-
- final Collection<Replica> allSliceReplicas = slice.getReplicasMap().values();
- final List<Replica> eligibleSliceReplicas = new ArrayList<>(allSliceReplicas.size());
- for (Replica replica : allSliceReplicas) {
- if (!clusterState.liveNodesContain(replica.getNodeName())
- || replica.getState() != Replica.State.ACTIVE
- || (onlyNrtReplicas && replica.getType() == Replica.Type.PULL)) {
- continue;
- }
-
- if (onlyNrtReplicas && replica.getType() == Replica.Type.TLOG) {
+ final Predicate<Replica> isShardLeader = new Predicate<Replica>() {
+ private Replica shardLeader = null;
+
+ @Override
+ public boolean test(Replica replica) {
if (shardLeader == null) {
try {
shardLeader = zkController.getZkStateReader().getLeaderRetry(cloudDescriptor.getCollectionName(), slice.getName());
@@ -424,12 +418,11 @@ public class HttpShardHandler extends ShardHandler {
throw e;
}
}
- if (!replica.getName().equals(shardLeader.getName())) {
- continue;
- }
+ return replica.getName().equals(shardLeader.getName());
}
- eligibleSliceReplicas.add(replica);
- }
+ };
+
+ final List<Replica> eligibleSliceReplicas = collectEligibleReplicas(slice, clusterState, onlyNrtReplicas, isShardLeader);
replicaListTransformer.transform(eligibleSliceReplicas);
@@ -462,6 +455,26 @@ public class HttpShardHandler extends ShardHandler {
}
}
+ private static List<Replica> collectEligibleReplicas(Slice slice, ClusterState clusterState, boolean onlyNrtReplicas, Predicate<Replica> isShardLeader) {
+ final Collection<Replica> allSliceReplicas = slice.getReplicasMap().values();
+ final List<Replica> eligibleSliceReplicas = new ArrayList<>(allSliceReplicas.size());
+ for (Replica replica : allSliceReplicas) {
+ if (!clusterState.liveNodesContain(replica.getNodeName())
+ || replica.getState() != Replica.State.ACTIVE
+ || (onlyNrtReplicas && replica.getType() == Replica.Type.PULL)) {
+ continue;
+ }
+
+ if (onlyNrtReplicas && replica.getType() == Replica.Type.TLOG) {
+ if (!isShardLeader.test(replica)) {
+ continue;
+ }
+ }
+ eligibleSliceReplicas.add(replica);
+ }
+ return eligibleSliceReplicas;
+ }
+
private static String createSliceShardsStr(final List<String> shardUrls) {
final StringBuilder sliceShardsStr = new StringBuilder();
boolean first = true;
[47/50] [abbrv] lucene-solr:feature/autoscaling: Merge branch
'master' into feature/autoscaling
Posted by sh...@apache.org.
Merge branch 'master' into feature/autoscaling
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/6a8768e3
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6a8768e3
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6a8768e3
Branch: refs/heads/feature/autoscaling
Commit: 6a8768e3959e6bb1beb8082ed9f4cc6807f94aff
Parents: ee2be20 ea79c66
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Tue Jun 6 19:30:00 2017 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Tue Jun 6 19:30:00 2017 +0530
----------------------------------------------------------------------
.gitignore | 41 +-
dev-tools/doap/lucene.rdf | 7 +
dev-tools/doap/solr.rdf | 7 +
dev-tools/idea/.idea/libraries/HSQLDB.xml | 2 +-
.../lucene/classification/classification.iml | 3 +-
dev-tools/idea/solr/core/src/java/solr-core.iml | 1 +
dev-tools/scripts/buildAndPushRelease.py | 4 +-
dev-tools/scripts/checkJavaDocs.py | 2 +-
dev-tools/scripts/checkJavadocLinks.py | 5 +-
dev-tools/scripts/smokeTestRelease.py | 6 +-
lucene/CHANGES.txt | 97 +
lucene/MIGRATE.txt | 6 +
lucene/NOTICE.txt | 12 +-
.../lucene/analysis/core/KeywordTokenizer.java | 10 +-
.../analysis/core/KeywordTokenizerFactory.java | 19 +-
.../lucene/analysis/core/LetterTokenizer.java | 14 +
.../analysis/core/LetterTokenizerFactory.java | 19 +-
.../analysis/core/LowerCaseTokenizer.java | 13 +
.../core/LowerCaseTokenizerFactory.java | 37 +-
.../lucene/analysis/core/StopFilterFactory.java | 2 +-
.../core/UnicodeWhitespaceTokenizer.java | 13 +
.../analysis/core/WhitespaceTokenizer.java | 13 +
.../core/WhitespaceTokenizerFactory.java | 18 +-
.../lucene/analysis/util/CharTokenizer.java | 27 +-
.../lucene/analysis/util/UnicodeProps.java | 6 +-
.../org/tartarus/snowball/SnowballProgram.java | 20 +-
.../compound/hyphenation/hyphenation.dtd | 2 +-
.../lucene/analysis/compound/hyphenation.dtd | 2 +-
.../analysis/core/TestKeywordTokenizer.java | 88 +
.../core/TestUnicodeWhitespaceTokenizer.java | 51 +
.../analysis/util/TestCharTokenizers.java | 95 +
.../icu/src/data/utr30/DiacriticFolding.txt | 5 +
.../icu/src/data/utr30/NativeDigitFolding.txt | 30 +
lucene/analysis/icu/src/data/utr30/nfc.txt | 22 +-
lucene/analysis/icu/src/data/utr30/nfkc.txt | 5 +-
lucene/analysis/icu/src/data/utr30/nfkc_cf.txt | 225 +-
.../analysis/icu/segmentation/Default.brk | Bin 35264 -> 36768 bytes
.../icu/segmentation/MyanmarSyllable.brk | Bin 19776 -> 20744 bytes
.../org/apache/lucene/analysis/icu/utr30.nrm | Bin 53840 -> 55184 bytes
.../icu/segmentation/TestICUTokenizerCJK.java | 9 +-
.../analysis/icu/GenerateUTR30DataFiles.java | 2 +-
.../uk/UkrainianMorfologikAnalyzer.java | 2 +
.../analysis/uk/TestUkrainianAnalyzer.java | 9 +-
.../apache/lucene/legacy/LegacyDoubleField.java | 174 -
.../org/apache/lucene/legacy/LegacyField.java | 90 -
.../apache/lucene/legacy/LegacyFieldType.java | 149 -
.../apache/lucene/legacy/LegacyFloatField.java | 174 -
.../apache/lucene/legacy/LegacyIntField.java | 175 -
.../apache/lucene/legacy/LegacyLongField.java | 184 -
.../lucene/legacy/LegacyNumericRangeQuery.java | 537 -
.../lucene/legacy/LegacyNumericTokenStream.java | 357 -
.../apache/lucene/legacy/LegacyNumericType.java | 34 -
.../lucene/legacy/LegacyNumericUtils.java | 510 -
.../lucene/legacy/doc-files/nrq-formula-1.png | Bin 3171 -> 0 bytes
.../lucene/legacy/doc-files/nrq-formula-2.png | Bin 3694 -> 0 bytes
.../org/apache/lucene/legacy/package-info.java | 21 -
.../index/TestBackwardsCompatibility.java | 56 +-
.../org/apache/lucene/index/index.6.5.1-cfs.zip | Bin 0 -> 15842 bytes
.../apache/lucene/index/index.6.5.1-nocfs.zip | Bin 0 -> 15827 bytes
.../apache/lucene/legacy/TestLegacyField.java | 186 -
.../lucene/legacy/TestLegacyFieldReuse.java | 81 -
.../lucene/legacy/TestLegacyNumericUtils.java | 571 -
.../apache/lucene/legacy/TestLegacyTerms.java | 164 -
.../TestMultiValuedNumericRangeQuery.java | 84 -
.../lucene/legacy/TestNumericRangeQuery32.java | 461 -
.../lucene/legacy/TestNumericRangeQuery64.java | 490 -
.../lucene/legacy/TestNumericTokenStream.java | 188 -
lucene/benchmark/conf/highlighters-postings.alg | 4 +-
.../tasks/SearchTravRetHighlightTask.java | 30 -
.../lucene/benchmark/quality/trecQRels.txt | 1090 +-
lucene/classification/build.xml | 8 +-
.../lucene/classification/BM25NBClassifier.java | 243 +
.../classification/KNearestFuzzyClassifier.java | 224 +
.../classification/utils/DatasetSplitter.java | 2 +-
.../classification/BM25NBClassifierTest.java | 154 +
.../KNearestFuzzyClassifierTest.java | 119 +
.../utils/ConfusionMatrixGeneratorTest.java | 123 +-
.../codecs/simpletext/SimpleTextBKDWriter.java | 20 +-
.../org/apache/lucene/codecs/CodecUtil.java | 8 +-
.../apache/lucene/document/RangeFieldQuery.java | 48 +-
.../lucene/index/BufferedUpdatesStream.java | 5 +-
.../org/apache/lucene/index/CheckIndex.java | 32 +-
.../lucene/index/DefaultIndexingChain.java | 8 +-
.../lucene/index/DocumentsWriterPerThread.java | 4 +
.../apache/lucene/index/FieldInvertState.java | 17 +-
.../apache/lucene/index/IndexFileDeleter.java | 12 +-
.../org/apache/lucene/index/IndexReader.java | 4 +-
.../org/apache/lucene/index/IndexWriter.java | 21 +-
.../apache/lucene/index/SegmentCoreReaders.java | 5 +-
.../apache/lucene/index/SegmentDocValues.java | 3 +-
.../org/apache/lucene/index/SegmentReader.java | 5 +-
.../lucene/index/StandardDirectoryReader.java | 9 +-
.../lucene/search/DoubleValuesSource.java | 47 +-
.../org/apache/lucene/search/LRUQueryCache.java | 2 +-
.../search/similarities/BM25Similarity.java | 79 +-
.../search/similarities/ClassicSimilarity.java | 101 +-
.../search/similarities/SimilarityBase.java | 65 +-
.../search/similarities/TFIDFSimilarity.java | 128 +-
.../org/apache/lucene/store/FSDirectory.java | 2 +-
.../apache/lucene/util/AttributeFactory.java | 39 +-
.../java/org/apache/lucene/util/IOUtils.java | 92 +-
.../org/apache/lucene/util/OfflineSorter.java | 453 +-
.../lucene/util/SameThreadExecutorService.java | 71 +
.../java/org/apache/lucene/util/SmallFloat.java | 83 +-
.../java/org/apache/lucene/util/Version.java | 7 +
.../org/apache/lucene/util/bkd/BKDWriter.java | 21 +-
.../graph/GraphTokenStreamFiniteStrings.java | 34 +-
.../org/apache/lucene/codecs/TestCodecUtil.java | 13 +
.../index/TestDemoParallelLeafReader.java | 12 +-
.../apache/lucene/index/TestIndexSorting.java | 82 +
.../lucene/index/TestMaxTermFrequency.java | 47 +-
.../test/org/apache/lucene/index/TestNorms.java | 65 +-
.../org/apache/lucene/index/TestOmitTf.java | 4 +-
.../lucene/search/TestDisjunctionMaxQuery.java | 3 +-
.../search/TestDoubleRangeFieldQueries.java | 15 +-
.../lucene/search/TestDoubleValuesSource.java | 63 +
.../lucene/search/TestElevationComparator.java | 9 +-
.../search/TestFloatRangeFieldQueries.java | 15 +-
.../lucene/search/TestIntRangeFieldQueries.java | 23 +-
.../apache/lucene/search/TestLRUQueryCache.java | 2 +
.../search/TestLongRangeFieldQueries.java | 23 +-
.../apache/lucene/search/TestPhraseQuery.java | 7 +-
.../apache/lucene/search/TestQueryRescorer.java | 18 +-
.../apache/lucene/search/TestSimilarity.java | 14 +-
.../lucene/search/TestSimilarityProvider.java | 117 +-
.../apache/lucene/search/TestSortRescorer.java | 2 +-
.../similarities/TestAxiomaticSimilarity.java | 13 -
.../search/similarities/TestBM25Similarity.java | 70 +-
.../similarities/TestBooleanSimilarity.java | 5 +-
.../similarities/TestClassicSimilarity.java | 91 +-
.../search/similarities/TestSimilarityBase.java | 99 +-
.../org/apache/lucene/store/TestDirectory.java | 17 +-
.../apache/lucene/util/TestOfflineSorter.java | 50 +-
.../org/apache/lucene/util/TestSmallFloat.java | 54 +-
.../TestGraphTokenStreamFiniteStrings.java | 53 +
.../lucene/expressions/ExpressionRescorer.java | 13 +-
.../expressions/ExpressionValueSource.java | 15 +
.../expressions/js/JavascriptCompiler.java | 131 +-
.../lucene/expressions/TestDemoExpressions.java | 32 +-
.../expressions/TestExpressionRescorer.java | 4 +-
.../apache/lucene/facet/FacetsCollector.java | 56 +-
.../lucene/facet/FacetsCollectorManager.java | 16 +-
.../org/apache/lucene/facet/FacetsConfig.java | 2 +-
...ConcurrentSortedSetDocValuesFacetCounts.java | 353 +
.../DefaultSortedSetDocValuesReaderState.java | 56 +-
.../SortedSetDocValuesFacetCounts.java | 231 +-
.../sortedset/SortedSetDocValuesFacetField.java | 1 +
.../SortedSetDocValuesReaderState.java | 7 +-
.../facet/range/TestRangeFacetCounts.java | 5 +
.../sortedset/TestSortedSetDocValuesFacets.java | 70 +-
.../CustomSeparatorBreakIterator.java | 150 -
.../DefaultPassageFormatter.java | 137 -
.../MultiTermHighlighting.java | 282 -
.../search/postingshighlight/Passage.java | 159 -
.../postingshighlight/PassageFormatter.java | 40 -
.../search/postingshighlight/PassageScorer.java | 104 -
.../postingshighlight/PostingsHighlighter.java | 820 --
.../postingshighlight/WholeBreakIterator.java | 116 -
.../search/postingshighlight/package-info.java | 21 -
.../CustomSeparatorBreakIterator.java | 150 +
.../search/uhighlight/WholeBreakIterator.java | 116 +
.../search/highlight/HighlighterTest.java | 8 +-
.../search/postingshighlight/CambridgeMA.utf8 | 1 -
.../TestCustomSeparatorBreakIterator.java | 114 -
.../TestMultiTermHighlighting.java | 884 --
.../TestPostingsHighlighter.java | 1185 --
.../TestPostingsHighlighterRanking.java | 324 -
.../TestWholeBreakIterator.java | 134 -
.../uhighlight/LengthGoalBreakIteratorTest.java | 1 -
.../TestCustomSeparatorBreakIterator.java | 114 +
.../uhighlight/TestUnifiedHighlighter.java | 1 -
.../uhighlight/TestWholeBreakIterator.java | 134 +
lucene/ivy-versions.properties | 25 +-
.../lucene/search/join/GlobalOrdinalsQuery.java | 6 +-
.../join/GlobalOrdinalsWithScoreQuery.java | 18 +-
.../org/apache/lucene/search/join/JoinUtil.java | 23 +-
.../join/PointInSetIncludingScoreQuery.java | 10 +-
.../search/join/TermsIncludingScoreQuery.java | 91 +-
.../apache/lucene/search/join/TermsQuery.java | 39 +-
.../search/join/ToParentBlockJoinQuery.java | 2 +-
.../search/join/ToParentBlockJoinSortField.java | 26 +
.../lucene/search/join/TestBlockJoin.java | 62 +-
.../search/join/TestBlockJoinSorting.java | 41 +-
.../apache/lucene/search/join/TestJoinUtil.java | 246 +
lucene/licenses/icu4j-56.1.jar.sha1 | 1 -
lucene/licenses/icu4j-59.1.jar.sha1 | 1 +
.../morfologik-ukrainian-search-3.7.6.jar.sha1 | 1 +
.../apache/lucene/index/memory/MemoryIndex.java | 2 +-
.../lucene/index/memory/TestMemoryIndex.java | 34 +-
.../apache/lucene/misc/SweetSpotSimilarity.java | 25 +-
.../lucene/misc/SweetSpotSimilarityTest.java | 117 +-
.../search/TestInetAddressRangeQueries.java | 18 +-
.../queries/function/FunctionScoreQuery.java | 11 +-
.../lucene/queries/function/ValueSource.java | 11 +
.../function/valuesource/NormValueSource.java | 36 +-
.../queries/payloads/PayloadScoreQuery.java | 32 +-
.../queries/payloads/SpanPayloadCheckQuery.java | 22 +-
.../function/TestFunctionScoreExplanations.java | 2 +-
.../function/TestFunctionScoreQuery.java | 4 +-
.../function/TestLongNormValueSource.java | 117 +-
.../queries/function/TestValueSources.java | 2 +-
.../queries/payloads/TestPayloadCheckQuery.java | 43 +-
.../queries/payloads/TestPayloadScoreQuery.java | 45 +-
.../queries/payloads/TestPayloadTermQuery.java | 3 +-
.../lucene/queryparser/classic/QueryParser.java | 47 +-
.../lucene/queryparser/classic/QueryParser.jj | 6 +-
.../flexible/core/util/QueryNodeOperation.java | 2 +-
.../standard/parser/StandardSyntaxParser.java | 43 +-
.../standard/parser/StandardSyntaxParser.jj | 6 +-
.../queryparser/util/QueryParserTestBase.java | 51 +
.../lucene/replicator/http/HttpClientBase.java | 7 +-
.../apache/lucene/replicator/nrt/CopyJob.java | 2 +-
.../lucene/replicator/nrt/CopyOneFile.java | 5 +-
.../lucene/replicator/nrt/ReplicaNode.java | 4 +-
lucene/spatial-extras/build.xml | 2 -
.../lucene/spatial/bbox/BBoxStrategy.java | 59 +-
.../prefix/BytesRefIteratorTokenStream.java | 2 -
.../prefix/NumberRangePrefixTreeStrategy.java | 24 +-
.../spatial/prefix/PrefixTreeStrategy.java | 15 +-
.../prefix/RecursivePrefixTreeStrategy.java | 42 +-
.../prefix/tree/DateRangePrefixTree.java | 8 +-
.../prefix/tree/PackedQuadPrefixTree.java | 30 +-
.../spatial/vector/PointVectorStrategy.java | 52 -
.../lucene/spatial/DistanceStrategyTest.java | 3 -
.../lucene/spatial/QueryEqualsHashCodeTest.java | 2 -
.../lucene/spatial/bbox/TestBBoxStrategy.java | 33 +-
.../spatial/prefix/DateNRStrategyTest.java | 52 +-
.../RandomSpatialOpFuzzyPrefixTreeTest.java | 41 +-
.../spatial/vector/TestPointVectorStrategy.java | 7 +-
.../spatial3d/geom/GeoPolygonFactory.java | 63 +
.../spatial3d/geom/GeoWideLongitudeSlice.java | 8 +-
.../lucene/spatial3d/geom/GeoPolygonTest.java | 63 +
.../analyzing/SuggestStopFilterFactory.java | 2 +-
.../lucene/index/OwnCacheKeyMultiReader.java | 5 +-
.../org/apache/lucene/mockfile/VerboseFS.java | 14 +-
.../search/BaseRangeFieldQueryTestCase.java | 4 +-
.../search/similarities/RandomSimilarity.java | 2 +-
.../lucene/store/MockDirectoryWrapper.java | 2 +-
solr/.gitignore | 30 +
solr/CHANGES.txt | 431 +-
solr/NOTICE.txt | 36 +-
solr/bin/install_solr_service.sh | 8 +-
solr/bin/solr | 195 +-
solr/bin/solr.cmd | 130 +-
solr/bin/solr.in.cmd | 3 +
solr/bin/solr.in.sh | 3 +
solr/build.xml | 3 +
.../collection1/conf/schema-folding-extra.xml | 1 -
.../collection1/conf/schema-icucollate-dv.xml | 1 -
.../solr/collection1/conf/schema-icucollate.xml | 1 -
.../conf/schema-icucollateoptions.xml | 1 -
.../StatsCollectorSupplierFactory.java | 2 +-
.../solr/analytics/util/AnalyticsParams.java | 3 +-
.../solr/analytics/util/AnalyticsParsers.java | 2 +-
.../util/valuesource/ConcatStringFunction.java | 54 -
.../util/valuesource/DateFieldSource.java | 2 +-
.../util/valuesource/MultiStringFunction.java | 146 -
.../clustering/solr/collection1/conf/schema.xml | 6 -
.../conf/dataimport-schema-no-unique-key.xml | 7 -
solr/contrib/dataimporthandler/ivy.xml | 2 +-
.../solr/handler/dataimport/DebugInfo.java | 32 +-
.../solr/collection1/conf/dataimport-schema.xml | 2 -
.../conf/dataimport-solr_id-schema.xml | 7 -
.../collection1/conf/dataimport-solrconfig.xml | 1 +
.../AbstractDataImportHandlerTestCase.java | 4 +-
.../dataimport/TestContentStreamDataSource.java | 2 +-
.../dataimport/TestHierarchicalDocBuilder.java | 31 +-
.../TestVariableResolverEndToEnd.java | 8 +-
.../extraction/solr/collection1/conf/schema.xml | 1 -
.../extraction/TestXLSXResponseWriter.java | 2 +-
.../langid/solr/collection1/conf/schema.xml | 1 -
.../solr/ltr/feature/FieldLengthFeature.java | 3 +-
.../apache/solr/ltr/TestLTRQParserPlugin.java | 11 +-
.../solr/ltr/TestParallelWeightCreation.java | 5 +-
.../solr/ltr/TestSelectiveWeightCreation.java | 44 +-
.../uima/solr/collection1/conf/schema.xml | 9 -
.../test-files/uima/uima-tokenizers-schema.xml | 9 -
.../velocity/src/resources/velocity/head.vm | 2 +-
.../velocity/solr/collection1/conf/schema.xml | 5 -
.../src/java/org/apache/solr/api/ApiBag.java | 11 +-
.../java/org/apache/solr/api/V2HttpCall.java | 2 +
.../org/apache/solr/cloud/AddReplicaCmd.java | 10 +-
.../src/java/org/apache/solr/cloud/Assign.java | 78 +-
.../org/apache/solr/cloud/CloudDescriptor.java | 45 +-
.../apache/solr/cloud/CreateCollectionCmd.java | 40 +-
.../org/apache/solr/cloud/CreateShardCmd.java | 48 +-
.../org/apache/solr/cloud/DistributedQueue.java | 47 +-
.../org/apache/solr/cloud/ElectionContext.java | 13 +-
.../java/org/apache/solr/cloud/MigrateCmd.java | 8 +-
.../org/apache/solr/cloud/MoveReplicaCmd.java | 4 +-
.../java/org/apache/solr/cloud/Overseer.java | 3 +-
.../cloud/OverseerCollectionMessageHandler.java | 123 +-
.../org/apache/solr/cloud/RecoveryStrategy.java | 171 +-
.../org/apache/solr/cloud/ReplaceNodeCmd.java | 4 +-
.../apache/solr/cloud/ReplicateFromLeader.java | 42 +-
.../java/org/apache/solr/cloud/RestoreCmd.java | 123 +-
.../org/apache/solr/cloud/SolrZkServer.java | 163 +-
.../org/apache/solr/cloud/SplitShardCmd.java | 6 +-
.../src/java/org/apache/solr/cloud/ZkCLI.java | 96 +-
.../org/apache/solr/cloud/ZkController.java | 72 +-
.../cloud/autoscaling/AutoScalingHandler.java | 13 +-
.../solr/cloud/overseer/ReplicaMutator.java | 7 +-
.../solr/cloud/overseer/SliceMutator.java | 27 +-
.../solr/cloud/overseer/ZkStateWriter.java | 14 +-
.../apache/solr/cloud/rule/ReplicaAssigner.java | 8 +-
.../solr/cloud/rule/ServerSnitchContext.java | 18 +-
.../org/apache/solr/core/CoreContainer.java | 116 +-
.../apache/solr/core/CorePropertiesLocator.java | 23 +-
.../java/org/apache/solr/core/CoresLocator.java | 10 -
.../org/apache/solr/core/MetricsConfig.java | 121 +
.../java/org/apache/solr/core/NodeConfig.java | 32 +-
.../java/org/apache/solr/core/PluginBag.java | 2 +-
.../solr/core/SimpleTextCodecFactory.java | 38 +
.../src/java/org/apache/solr/core/SolrCore.java | 19 +-
.../java/org/apache/solr/core/SolrCores.java | 1 +
.../org/apache/solr/core/SolrXmlConfig.java | 29 +-
.../solr/core/snapshots/SolrSnapshotsTool.java | 7 +-
.../apache/solr/handler/AnalyzeEvaluator.java | 1 +
.../org/apache/solr/handler/BlobHandler.java | 17 +-
.../apache/solr/handler/CalciteJDBCStream.java | 75 +
.../org/apache/solr/handler/ExportWriter.java | 1 -
.../handler/FieldAnalysisRequestHandler.java | 11 +-
.../org/apache/solr/handler/IndexFetcher.java | 23 +-
.../apache/solr/handler/RealTimeGetHandler.java | 20 +-
.../apache/solr/handler/ReplicationHandler.java | 4 +
.../org/apache/solr/handler/SQLHandler.java | 3 +-
.../org/apache/solr/handler/SchemaHandler.java | 19 -
.../apache/solr/handler/SolrConfigHandler.java | 9 +-
.../org/apache/solr/handler/StreamHandler.java | 49 +-
.../handler/admin/BaseHandlerApiSupport.java | 76 +-
.../handler/admin/CollectionHandlerApi.java | 317 +-
.../solr/handler/admin/CollectionsHandler.java | 31 +-
.../solr/handler/admin/ConfigSetsHandler.java | 4 +
.../handler/admin/ConfigSetsHandlerApi.java | 109 +-
.../solr/handler/admin/CoreAdminHandler.java | 1 +
.../solr/handler/admin/CoreAdminHandlerApi.java | 172 +-
.../solr/handler/admin/CoreAdminOperation.java | 90 +-
.../solr/handler/admin/LukeRequestHandler.java | 1 -
.../handler/admin/MetricsCollectorHandler.java | 13 +-
.../solr/handler/admin/MetricsHandler.java | 2 +-
.../solr/handler/admin/PrepRecoveryOp.java | 30 +-
.../solr/handler/admin/SecurityConfHandler.java | 4 +-
.../handler/admin/SecurityConfHandlerLocal.java | 2 +-
.../handler/admin/SecurityConfHandlerZk.java | 2 +-
.../solr/handler/component/ExpandComponent.java | 34 +-
.../solr/handler/component/FacetComponent.java | 3 +-
.../handler/component/HighlightComponent.java | 9 +-
.../handler/component/HttpShardHandler.java | 92 +-
.../component/HttpShardHandlerFactory.java | 28 +-
.../handler/component/RealTimeGetComponent.java | 22 +-
.../handler/component/SpatialHeatmapFacets.java | 80 +-
.../handler/component/SpellCheckComponent.java | 12 +-
.../solr/handler/component/TermsComponent.java | 96 +-
.../org/apache/solr/handler/sql/SolrTable.java | 1 +
.../solr/highlight/DefaultSolrHighlighter.java | 8 +-
.../solr/highlight/PostingsSolrHighlighter.java | 326 +-
.../apache/solr/highlight/SolrHighlighter.java | 5 +-
.../solr/highlight/UnifiedSolrHighlighter.java | 4 +-
.../org/apache/solr/legacy/BBoxStrategy.java | 706 +
.../org/apache/solr/legacy/BBoxValueSource.java | 135 +
.../apache/solr/legacy/DistanceValueSource.java | 133 +
.../apache/solr/legacy/LegacyDoubleField.java | 174 +
.../org/apache/solr/legacy/LegacyField.java | 90 +
.../org/apache/solr/legacy/LegacyFieldType.java | 149 +
.../apache/solr/legacy/LegacyFloatField.java | 174 +
.../org/apache/solr/legacy/LegacyIntField.java | 175 +
.../org/apache/solr/legacy/LegacyLongField.java | 184 +
.../solr/legacy/LegacyNumericRangeQuery.java | 537 +
.../solr/legacy/LegacyNumericTokenStream.java | 357 +
.../apache/solr/legacy/LegacyNumericType.java | 34 +
.../apache/solr/legacy/LegacyNumericUtils.java | 510 +
.../apache/solr/legacy/PointVectorStrategy.java | 292 +
.../solr/legacy/doc-files/nrq-formula-1.png | Bin 0 -> 3171 bytes
.../solr/legacy/doc-files/nrq-formula-2.png | Bin 0 -> 3694 bytes
.../org/apache/solr/legacy/package-info.java | 21 +
.../apache/solr/metrics/MetricSuppliers.java | 363 +
.../solr/metrics/SolrCoreMetricManager.java | 2 +-
.../apache/solr/metrics/SolrMetricManager.java | 45 +-
.../apache/solr/metrics/SolrMetricReporter.java | 27 +
.../metrics/reporters/SolrGangliaReporter.java | 10 +-
.../metrics/reporters/SolrGraphiteReporter.java | 28 +-
.../solr/metrics/reporters/SolrJmxReporter.java | 16 +-
.../metrics/reporters/SolrSlf4jReporter.java | 16 +-
.../reporters/solr/SolrClusterReporter.java | 8 +-
.../metrics/reporters/solr/SolrReporter.java | 21 +-
.../reporters/solr/SolrShardReporter.java | 10 +-
.../org/apache/solr/parser/QueryParser.java | 49 +-
.../java/org/apache/solr/parser/QueryParser.jj | 8 +-
.../apache/solr/parser/SolrQueryParserBase.java | 2 +-
.../apache/solr/request/SolrQueryRequest.java | 44 +-
.../solr/request/SolrQueryRequestBase.java | 2 +-
.../apache/solr/response/SchemaXmlWriter.java | 9 -
.../solr/response/TextResponseWriter.java | 13 +-
.../analysis/ManagedSynonymFilterFactory.java | 5 +
.../ManagedSynonymGraphFilterFactory.java | 437 +
.../java/org/apache/solr/schema/BBoxField.java | 4 +-
.../java/org/apache/solr/schema/EnumField.java | 10 +-
.../java/org/apache/solr/schema/FieldType.java | 1 +
.../org/apache/solr/schema/GeoHashField.java | 3 +
.../org/apache/solr/schema/IndexSchema.java | 59 +-
.../java/org/apache/solr/schema/LatLonType.java | 3 +
.../apache/solr/schema/ManagedIndexSchema.java | 3 -
.../org/apache/solr/schema/SchemaManager.java | 2 +-
.../schema/SpatialPointVectorFieldType.java | 7 +-
.../SpatialTermQueryPrefixTreeFieldType.java | 3 +-
.../org/apache/solr/schema/TrieDoubleField.java | 2 +-
.../java/org/apache/solr/schema/TrieField.java | 24 +-
.../org/apache/solr/schema/TrieFloatField.java | 2 +-
.../org/apache/solr/schema/TrieIntField.java | 2 +-
.../org/apache/solr/schema/TrieLongField.java | 2 +-
.../solr/search/CollapsingQParserPlugin.java | 80 +-
.../solr/search/ComplexPhraseQParserPlugin.java | 5 +-
.../org/apache/solr/search/DisMaxQParser.java | 12 +-
.../solr/search/ExtendedDismaxQParser.java | 58 +-
.../org/apache/solr/search/FastLRUCache.java | 2 +-
.../solr/search/FloatPayloadValueSource.java | 221 +
.../apache/solr/search/JoinQParserPlugin.java | 22 +-
.../java/org/apache/solr/search/LFUCache.java | 2 +-
.../java/org/apache/solr/search/LRUCache.java | 2 +-
.../search/LegacyNumericRangeQueryBuilder.java | 8 +-
.../org/apache/solr/search/LuceneQParser.java | 7 +-
.../apache/solr/search/LuceneQParserPlugin.java | 8 +-
.../solr/search/OldLuceneQParserPlugin.java | 3 +
.../solr/search/PayloadCheckQParserPlugin.java | 109 +
.../solr/search/PayloadScoreQParserPlugin.java | 85 +
.../java/org/apache/solr/search/QParser.java | 10 -
.../org/apache/solr/search/QParserPlugin.java | 3 +-
.../org/apache/solr/search/QueryParsing.java | 63 +-
.../apache/solr/search/QueryWrapperFilter.java | 2 +-
.../apache/solr/search/SimpleQParserPlugin.java | 8 +-
.../apache/solr/search/SolrIndexSearcher.java | 3 +
.../solr/search/SurroundQParserPlugin.java | 2 +-
.../apache/solr/search/ValueSourceParser.java | 75 +-
.../apache/solr/search/XmlQParserPlugin.java | 2 +-
.../apache/solr/search/facet/FacetField.java | 7 +-
.../solr/search/facet/FacetFieldMerger.java | 14 +-
.../solr/search/facet/FacetFieldProcessor.java | 135 +-
.../facet/FacetFieldProcessorByArray.java | 2 +-
.../solr/search/facet/FacetProcessor.java | 12 +-
.../apache/solr/search/facet/FacetRequest.java | 74 +-
.../org/apache/solr/search/facet/HLLAgg.java | 8 +-
.../org/apache/solr/search/facet/MaxAgg.java | 57 -
.../org/apache/solr/search/facet/MinAgg.java | 54 -
.../org/apache/solr/search/facet/MinMaxAgg.java | 236 +
.../org/apache/solr/search/facet/SlotAcc.java | 38 +-
.../org/apache/solr/search/facet/UniqueAgg.java | 6 +-
.../solr/search/facet/UniqueMultiDvSlotAcc.java | 21 +-
.../search/facet/UniqueMultivaluedSlotAcc.java | 5 +-
.../search/facet/UniqueSinglevaluedSlotAcc.java | 20 +-
.../apache/solr/search/facet/UniqueSlotAcc.java | 6 +-
.../search/function/ConcatStringFunction.java | 53 +
.../search/function/MultiStringFunction.java | 146 +
.../SearchGroupShardResponseProcessor.java | 4 +-
.../join/BlockJoinFacetComponentSupport.java | 12 +-
.../search/join/BlockJoinParentQParser.java | 11 +-
.../join/ChildFieldValueSourceParser.java | 197 +
.../search/join/ScoreJoinQParserPlugin.java | 11 +-
.../apache/solr/search/mlt/CloudMLTQParser.java | 2 +-
.../solr/search/mlt/SimpleMLTQParser.java | 2 +-
.../PayloadScoringSimilarityWrapper.java | 80 +
.../similarities/SchemaSimilarityFactory.java | 23 +-
.../security/AutorizationEditOperation.java | 2 +-
.../apache/solr/security/BasicAuthPlugin.java | 2 +-
.../solr/security/ConfigEditablePlugin.java | 4 +-
.../solr/security/PKIAuthenticationPlugin.java | 1 +
.../security/RuleBasedAuthorizationPlugin.java | 2 +-
.../security/Sha256AuthenticationProvider.java | 8 +-
.../org/apache/solr/servlet/HttpSolrCall.java | 6 +-
.../org/apache/solr/servlet/ResponseUtils.java | 2 +-
.../apache/solr/servlet/SolrDispatchFilter.java | 77 +-
.../apache/solr/servlet/SolrRequestParsers.java | 2 +-
.../DocumentExpressionDictionaryFactory.java | 35 +-
.../org/apache/solr/uninverting/FieldCache.java | 20 +-
.../solr/uninverting/UninvertingReader.java | 16 +-
.../solr/update/DefaultSolrCoreState.java | 4 +-
.../solr/update/DirectUpdateHandler2.java | 65 +-
.../java/org/apache/solr/update/PeerSync.java | 7 +-
.../apache/solr/update/SolrCmdDistributor.java | 4 +-
.../org/apache/solr/update/SolrIndexConfig.java | 148 +-
.../org/apache/solr/update/UpdateHandler.java | 6 +-
.../java/org/apache/solr/update/UpdateLog.java | 19 +-
.../org/apache/solr/update/VersionInfo.java | 2 +-
.../processor/AtomicUpdateProcessorFactory.java | 183 +
.../processor/DistributedUpdateProcessor.java | 51 +-
.../DocExpirationUpdateProcessorFactory.java | 2 +-
.../processor/UpdateRequestProcessorChain.java | 12 +-
.../org/apache/solr/util/CommandOperation.java | 346 -
.../java/org/apache/solr/util/FileUtils.java | 20 +
.../apache/solr/util/JsonSchemaValidator.java | 479 +-
.../org/apache/solr/util/PayloadDecoder.java | 27 +
.../java/org/apache/solr/util/PayloadUtils.java | 129 +
.../java/org/apache/solr/util/RTimerTree.java | 7 +-
.../org/apache/solr/util/SimplePostTool.java | 10 +-
.../src/java/org/apache/solr/util/SolrCLI.java | 366 +-
.../org/apache/solr/util/SolrPluginUtils.java | 82 +-
.../org/apache/solr/util/TestInjection.java | 6 +-
.../util/configuration/SSLConfigurations.java | 78 +
.../configuration/SSLConfigurationsFactory.java | 49 +
.../solr/util/configuration/package-info.java | 23 +
.../resources/apispec/autoscaling.Commands.json | 6 +-
.../src/resources/apispec/cluster.Commands.json | 2 +-
.../resources/apispec/collections.Commands.json | 18 +-
.../collections.collection.Commands.json | 4 +-
.../collections.collection.Commands.modify.json | 2 +-
.../collections.collection.shards.Commands.json | 5 +
.../apispec/core.SchemaEdit.addField.json | 10 +-
.../apispec/core.SchemaEdit.addFieldType.json | 2 +-
.../src/resources/apispec/core.SchemaRead.json | 3 +-
.../src/resources/apispec/cores.Commands.json | 2 +-
.../test-files/lib-dirs/d/d1/empty-file-d1.txt | 1 -
.../solr/analysisconfs/analysis-err-schema.xml | 1 -
.../solr/collection1/conf/bad-mp-solrconfig.xml | 36 -
.../bad-schema-analyzer-class-and-nested.xml | 1 -
.../bad-schema-codec-global-vs-ft-mismatch.xml | 1 -
.../bad-schema-currency-dynamic-multivalued.xml | 1 -
...bad-schema-currency-ft-bogus-code-in-xml.xml | 1 -
...ad-schema-currency-ft-bogus-default-code.xml | 1 -
.../conf/bad-schema-currency-ft-multivalued.xml | 1 -
.../conf/bad-schema-currency-ft-oer-norates.xml | 1 -
.../conf/bad-schema-currency-multivalued.xml | 1 -
.../conf/bad-schema-default-operator.xml | 26 +
.../conf/bad-schema-defaultsearchfield.xml | 26 +
.../conf/bad-schema-dup-dynamicField.xml | 1 -
.../collection1/conf/bad-schema-dup-field.xml | 1 -
.../conf/bad-schema-dup-fieldType.xml | 1 -
.../bad-schema-dynamicfield-default-val.xml | 1 -
.../conf/bad-schema-dynamicfield-required.xml | 1 -
.../collection1/conf/bad-schema-init-error.xml | 25 -
.../conf/bad-schema-nontext-analyzer.xml | 1 -
.../conf/bad-schema-not-indexed-but-norms.xml | 1 -
.../conf/bad-schema-not-indexed-but-pos.xml | 1 -
.../conf/bad-schema-not-indexed-but-tf.xml | 1 -
.../conf/bad-schema-omit-tf-but-not-pos.xml | 1 -
.../bad-schema-sim-default-does-not-exist.xml | 2 -
...d-schema-sim-default-has-no-explicit-sim.xml | 2 -
.../bad-schema-sim-global-vs-ft-mismatch.xml | 2 -
.../conf/bad-schema-sweetspot-both-tf.xml | 1 -
.../bad-schema-sweetspot-partial-baseline.xml | 1 -
.../bad-schema-sweetspot-partial-hyperbolic.xml | 3 +-
.../conf/bad-schema-sweetspot-partial-norms.xml | 3 +-
.../bad-schema-uniquekey-is-copyfield-dest.xml | 1 -
.../conf/bad-schema-uniquekey-multivalued.xml | 1 -
.../conf/bad-schema-uniquekey-uses-default.xml | 1 -
.../solr/collection1/conf/hyphenation.dtd | 2 +-
.../conf/schema-HighlighterMaxOffsetTest.xml | 2 -
.../collection1/conf/schema-SimpleTextCodec.xml | 32 +
.../conf/schema-blockjoinfacetcomponent.xml | 1 -
.../solr/collection1/conf/schema-bm25.xml | 1 -
.../collection1/conf/schema-charfilters.xml | 1 -
.../solr/collection1/conf/schema-collate-dv.xml | 1 -
.../solr/collection1/conf/schema-collate.xml | 1 -
.../collection1/conf/schema-complex-phrase.xml | 36 -
.../collection1/conf/schema-copyfield-test.xml | 1 -
.../collection1/conf/schema-custom-field.xml | 1 -
.../solr/collection1/conf/schema-dfi.xml | 1 -
.../solr/collection1/conf/schema-dfr.xml | 1 -
.../conf/schema-distrib-interval-faceting.xml | 1 -
.../conf/schema-docValuesFaceting.xml | 1 -
.../collection1/conf/schema-docValuesJoin.xml | 1 -
.../conf/schema-field-sort-values.xml | 1 -
.../solr/collection1/conf/schema-folding.xml | 1 -
.../solr/collection1/conf/schema-hash.xml | 1 -
.../solr/collection1/conf/schema-ib.xml | 1 -
.../collection1/conf/schema-lmdirichlet.xml | 1 -
.../collection1/conf/schema-lmjelinekmercer.xml | 1 -
.../conf/schema-not-required-unique-key.xml | 1 -
.../collection1/conf/schema-phrasesuggest.xml | 1 -
.../solr/collection1/conf/schema-point.xml | 47 +-
.../conf/schema-postingshighlight.xml | 1 -
.../collection1/conf/schema-psuedo-fields.xml | 3 +-
.../collection1/conf/schema-required-fields.xml | 1 -
.../solr/collection1/conf/schema-rest.xml | 34 +-
.../solr/collection1/conf/schema-reversed.xml | 1 -
.../solr/collection1/conf/schema-sim.xml | 1 -
.../collection1/conf/schema-simpleqpplugin.xml | 1 -
.../conf/schema-single-dynamic-copy-field.xml | 667 -
.../collection1/conf/schema-spellchecker.xml | 7 -
.../solr/collection1/conf/schema-sql.xml | 1 -
.../solr/collection1/conf/schema-stop-keep.xml | 59 -
.../solr/collection1/conf/schema-sweetspot.xml | 1 -
.../conf/schema-synonym-tokenizer.xml | 1 -
.../solr/collection1/conf/schema-tfidf.xml | 1 -
.../collection1/conf/schema-tokenizer-test.xml | 150 +
.../solr/collection1/conf/schema-trie.xml | 4 -
.../conf/schema-unifiedhighlight.xml | 1 -
.../test-files/solr/collection1/conf/schema.xml | 1 -
.../solr/collection1/conf/schema11.xml | 26 +-
.../solr/collection1/conf/schema12.xml | 1 -
.../solr/collection1/conf/schema15.xml | 9 +-
.../solr/collection1/conf/schema_codec.xml | 1 -
.../solr/collection1/conf/schema_latest.xml | 15 -
.../solr/collection1/conf/schemasurround.xml | 1 -
.../conf/solrconfig-cache-enable-disable.xml | 8 +-
.../conf/solrconfig-collapseqparser.xml | 5 +
.../collection1/conf/solrconfig-delpolicy1.xml | 3 +-
.../collection1/conf/solrconfig-delpolicy2.xml | 3 +-
.../collection1/conf/solrconfig-elevate.xml | 6 +
.../conf/solrconfig-functionquery.xml | 5 +
.../collection1/conf/solrconfig-indexconfig.xml | 31 -
.../conf/solrconfig-indexmetrics.xml | 8 +-
.../collection1/conf/solrconfig-lazywriter.xml | 29 -
.../conf/solrconfig-logmergepolicy.xml | 36 -
.../conf/solrconfig-managed-schema.xml | 6 +
.../conf/solrconfig-mergepolicy-legacy.xml | 1 -
.../conf/solrconfig-mergepolicy-nocfs.xml | 34 -
.../collection1/conf/solrconfig-minimal.xml | 6 +
.../collection1/conf/solrconfig-nocache.xml | 6 +
.../conf/solrconfig-plugcollector.xml | 6 +
.../conf/solrconfig-postingshighlight.xml | 1 +
.../conf/solrconfig-response-log-component.xml | 6 +
.../solrconfig-sortingmergepolicyfactory.xml | 5 +
.../conf/solrconfig-spellcheckcomponent.xml | 8 +-
.../conf/solrconfig-tieredmergepolicy.xml | 48 -
.../solrconfig-tlog-with-delayingcomponent.xml | 119 -
.../solr/collection1/conf/solrconfig-tlog.xml | 14 +
.../solr/collection1/conf/solrconfig-warmer.xml | 46 -
.../solrconfig.snippet.randomindexconfig.xml | 3 +-
.../solr/collection1/conf/solrconfig.xml | 17 +-
.../conf/solrconfig_SimpleTextCodec.xml | 26 +
.../configsets/cloud-dynamic/conf/schema.xml | 1 -
.../cloud-minimal/conf/solrconfig.xml | 2 +-
.../solr/configsets/doc-expiry/conf/schema.xml | 1 -
.../test-files/solr/crazy-path-to-config.xml | 7 +
.../test-files/solr/crazy-path-to-schema.xml | 1 -
.../src/test-files/solr/solr-metricsconfig.xml | 61 +
.../core/src/test-files/solr/solr-multicore.xml | 0
.../solr-shardhandler-loadBalancerRequests.xml | 23 +
.../apache/solr/DisMaxRequestHandlerTest.java | 4 +-
.../test/org/apache/solr/MinimalSchemaTest.java | 1 -
.../apache/solr/TestDistributedGrouping.java | 4 +-
.../org/apache/solr/TestGroupingSearch.java | 3 -
.../AbstractCloudBackupRestoreTestCase.java | 70 +-
.../test/org/apache/solr/cloud/AssignTest.java | 6 +
.../solr/cloud/BasicDistributedZk2Test.java | 4 +-
.../solr/cloud/BasicDistributedZkTest.java | 10 +-
.../cloud/ChaosMonkeyNothingIsSafeTest.java | 136 +-
...MonkeyNothingIsSafeWithPullReplicasTest.java | 327 +
...aosMonkeySafeLeaderWithPullReplicasTest.java | 255 +
.../CollectionsAPIAsyncDistributedZkTest.java | 62 +-
.../cloud/CollectionsAPIDistributedZkTest.java | 4 +-
.../solr/cloud/CollectionsAPISolrJTest.java | 68 +-
...ConcurrentDeleteAndCreateCollectionTest.java | 12 +-
.../org/apache/solr/cloud/DeleteNodeTest.java | 11 +-
.../apache/solr/cloud/DeleteReplicaTest.java | 22 +-
.../org/apache/solr/cloud/DeleteStatusTest.java | 23 -
.../apache/solr/cloud/DistributedQueueTest.java | 36 +
.../org/apache/solr/cloud/ForceLeaderTest.java | 29 +-
.../cloud/FullSolrCloudDistribCmdsTest.java | 16 +-
.../FullThrottleStoppableIndexingThread.java | 156 +
.../apache/solr/cloud/HttpPartitionTest.java | 44 +-
.../cloud/LeaderFailoverAfterPartitionTest.java | 10 +-
.../LeaderInitiatedRecoveryOnCommitTest.java | 27 +-
.../apache/solr/cloud/MultiThreadedOCPTest.java | 63 +-
.../solr/cloud/OnlyLeaderIndexesTest.java | 435 -
...verseerCollectionConfigSetProcessorTest.java | 3 +-
.../org/apache/solr/cloud/OverseerTest.java | 2 +-
.../solr/cloud/RecoveryAfterSoftCommitTest.java | 8 +-
.../org/apache/solr/cloud/ReplaceNodeTest.java | 23 +-
.../solr/cloud/ReplicationFactorTest.java | 8 +-
.../apache/solr/cloud/RollingRestartTest.java | 2 +-
.../org/apache/solr/cloud/ShardSplitTest.java | 8 +-
.../cloud/SharedFSAutoReplicaFailoverTest.java | 24 +-
.../cloud/SimpleCollectionCreateDeleteTest.java | 13 +-
.../apache/solr/cloud/SolrCloudExampleTest.java | 89 +-
.../solr/cloud/TestAuthenticationFramework.java | 11 +-
.../cloud/TestCloudJSONFacetJoinDomain.java | 596 +
.../apache/solr/cloud/TestCloudRecovery.java | 5 +-
.../apache/solr/cloud/TestCollectionAPI.java | 34 +-
.../apache/solr/cloud/TestConfigSetsAPI.java | 5 +-
.../solr/cloud/TestConfigSetsAPIZkFailure.java | 4 +-
.../solr/cloud/TestMiniSolrCloudCluster.java | 11 +-
.../solr/cloud/TestMiniSolrCloudClusterSSL.java | 2 +-
.../org/apache/solr/cloud/TestPullReplica.java | 645 +
.../cloud/TestPullReplicaErrorHandling.java | 344 +
.../cloud/TestRandomRequestDistribution.java | 15 +-
.../solr/cloud/TestRequestForwarding.java | 6 +-
.../TestSolrCloudWithDelegationTokens.java | 2 +-
.../cloud/TestSolrCloudWithKerberosAlt.java | 20 +-
.../TestSolrCloudWithSecureImpersonation.java | 6 +-
.../org/apache/solr/cloud/TestTlogReplica.java | 913 ++
.../test/org/apache/solr/cloud/ZkCLITest.java | 28 +
.../autoscaling/AutoScalingHandlerTest.java | 83 +-
.../solr/cloud/autoscaling/TestPolicyCloud.java | 135 +-
.../cloud/hdfs/HdfsBasicDistributedZkTest.java | 4 +-
.../solr/cloud/overseer/ZkStateWriterTest.java | 10 +-
.../solr/cloud/rule/ImplicitSnitchTest.java | 50 +-
.../org/apache/solr/core/TestBadConfig.java | 2 -
.../test/org/apache/solr/core/TestConfig.java | 9 +-
.../org/apache/solr/core/TestCoreContainer.java | 5 -
.../org/apache/solr/core/TestCoreDiscovery.java | 20 +-
.../org/apache/solr/core/TestLazyCores.java | 2 +-
.../apache/solr/core/TestMergePolicyConfig.java | 18 +-
.../test/org/apache/solr/core/TestNRTOpen.java | 3 -
.../apache/solr/core/TestSimpleTextCodec.java | 67 +
.../apache/solr/core/TestSolrConfigHandler.java | 4 +-
.../apache/solr/core/TestSolrIndexConfig.java | 2 +-
.../core/snapshots/TestSolrCloudSnapshots.java | 5 +
.../FieldAnalysisRequestHandlerTest.java | 8 +
.../org/apache/solr/handler/JsonLoaderTest.java | 139 +-
.../apache/solr/handler/TestBlobHandler.java | 10 +-
.../solr/handler/V2ApiIntegrationTest.java | 84 +-
.../solr/handler/admin/MetricsHandlerTest.java | 24 +-
.../handler/admin/SecurityConfHandlerTest.java | 2 +-
.../admin/SegmentsInfoRequestHandlerTest.java | 2 -
.../solr/handler/admin/StatsReloadRaceTest.java | 23 +-
.../solr/handler/admin/TestApiFramework.java | 2 +-
.../solr/handler/admin/TestCollectionAPIs.java | 42 +-
.../solr/handler/admin/TestConfigsApi.java | 2 +-
.../DistributedExpandComponentTest.java | 50 +-
.../DistributedTermsComponentTest.java | 10 +-
.../component/QueryElevationComponentTest.java | 4 +-
.../component/SpatialHeatmapFacetsTest.java | 22 +
.../component/SpellCheckComponentTest.java | 79 +-
.../handler/component/TermsComponentTest.java | 47 +-
.../handler/component/TestExpandComponent.java | 62 +-
.../component/TestHttpShardHandlerFactory.java | 102 +
.../highlight/HighlighterMaxOffsetTest.java | 3 +-
.../org/apache/solr/legacy/TestLegacyField.java | 186 +
.../solr/legacy/TestLegacyFieldReuse.java | 81 +
.../solr/legacy/TestLegacyNumericUtils.java | 571 +
.../org/apache/solr/legacy/TestLegacyTerms.java | 164 +
.../TestMultiValuedNumericRangeQuery.java | 84 +
.../solr/legacy/TestNumericRangeQuery32.java | 461 +
.../solr/legacy/TestNumericRangeQuery64.java | 490 +
.../solr/legacy/TestNumericTokenStream.java | 188 +
.../org/apache/solr/metrics/JvmMetricsTest.java | 4 +-
.../apache/solr/metrics/MetricsConfigTest.java | 126 +
.../solr/metrics/MockCounterSupplier.java | 36 +
.../solr/metrics/MockHistogramSupplier.java | 40 +
.../apache/solr/metrics/MockMeterSupplier.java | 36 +
.../apache/solr/metrics/MockTimerSupplier.java | 46 +
.../solr/metrics/SolrMetricTestUtils.java | 4 +-
.../metrics/SolrMetricsIntegrationTest.java | 2 +-
.../metrics/reporters/MockMetricReporter.java | 4 +-
.../metrics/reporters/SolrJmxReporterTest.java | 8 +-
.../reporters/solr/SolrCloudReportersTest.java | 10 +-
.../org/apache/solr/rest/TestRestManager.java | 4 +-
.../schema/TestDefaultSearchFieldResource.java | 28 -
.../solr/rest/schema/TestFieldTypeResource.java | 3 +-
.../solr/rest/schema/TestSchemaResource.java | 12 +-
...tSolrQueryParserDefaultOperatorResource.java | 29 -
.../schema/TestSolrQueryParserResource.java | 30 -
.../TestManagedSynonymGraphFilterFactory.java | 297 +
.../apache/solr/schema/BadIndexSchemaTest.java | 10 +-
.../org/apache/solr/schema/CopyFieldTest.java | 6 +-
.../solr/schema/TestHalfAndHalfDocValues.java | 132 +
.../apache/solr/schema/TestSchemaManager.java | 2 +-
.../solr/schema/TestUseDocValuesAsStored.java | 2 +-
.../apache/solr/search/QueryEqualityTest.java | 74 +-
.../apache/solr/search/QueryParsingTest.java | 4 +-
.../solr/search/TestCollapseQParserPlugin.java | 18 +
.../solr/search/TestExtendedDismaxParser.java | 142 +-
.../apache/solr/search/TestIndexSearcher.java | 3 -
.../TestLegacyNumericRangeQueryBuilder.java | 2 +-
.../solr/search/TestMaxScoreQueryParser.java | 6 +-
.../search/TestPayloadCheckQParserPlugin.java | 73 +
.../search/TestPayloadScoreQParserPlugin.java | 54 +
.../org/apache/solr/search/TestRangeQuery.java | 42 +
.../solr/search/TestReRankQParserPlugin.java | 6 +
.../solr/search/TestSimpleQParserPlugin.java | 4 +-
.../apache/solr/search/TestSolr4Spatial.java | 2 +-
.../apache/solr/search/TestSolrQueryParser.java | 95 +-
.../org/apache/solr/search/facet/DebugAgg.java | 146 +
.../search/facet/TestJsonFacetRefinement.java | 140 +-
.../solr/search/facet/TestJsonFacets.java | 445 +-
.../search/function/SortByFunctionTest.java | 6 +-
.../solr/search/function/TestFunctionQuery.java | 57 +-
.../solr/search/function/TestOrdValues.java | 4 +-
.../search/join/BlockJoinFacetDistribTest.java | 10 +-
.../search/join/BlockJoinFacetRandomTest.java | 1 +
.../search/join/TestCloudNestedDocsSort.java | 185 +
.../solr/search/join/TestNestedDocsSort.java | 145 +
.../search/join/TestScoreJoinQPNoScore.java | 16 +-
.../TestSweetSpotSimilarityFactory.java | 91 +-
.../solr/search/stats/TestDistribIDF.java | 13 +-
.../solr/security/BasicAuthIntegrationTest.java | 15 +-
.../TestRuleBasedAuthorizationPlugin.java | 4 +-
.../TestSha256AuthenticationProvider.java | 2 +-
.../hadoop/TestDelegationWithHadoopAuth.java | 2 +-
.../solr/uninverting/TestDocTermOrds.java | 6 +-
.../solr/uninverting/TestFieldCacheSort.java | 8 +-
.../solr/uninverting/TestLegacyFieldCache.java | 8 +-
.../solr/uninverting/TestNumericTerms32.java | 6 +-
.../solr/uninverting/TestNumericTerms64.java | 6 +-
.../solr/uninverting/TestUninvertingReader.java | 8 +-
.../solr/update/DirectUpdateHandlerTest.java | 2 -
.../solr/update/SolrCmdDistributorTest.java | 3 -
.../apache/solr/update/SolrIndexConfigTest.java | 36 +-
.../solr/update/TestInPlaceUpdatesDistrib.java | 14 +-
.../update/TestInPlaceUpdatesStandalone.java | 4 -
.../AtomicUpdateProcessorFactoryTest.java | 281 +
.../UpdateRequestProcessorFactoryTest.java | 1 +
.../org/apache/solr/util/JsonValidatorTest.java | 27 +-
.../apache/solr/util/SimplePostToolTest.java | 29 +-
.../apache/solr/util/SolrPluginUtilsTest.java | 6 +-
.../solr/util/TestMaxTokenLenTokenizer.java | 135 +
.../apache/solr/util/TestSolrCLIRunExample.java | 138 +-
.../test/org/apache/solr/util/TestUtils.java | 26 +-
.../configuration/SSLConfigurationsTest.java | 121 +
solr/example/example-DIH/ivy.xml | 2 +-
.../solr/atom/conf/atom-data-config.xml | 2 +-
.../example-DIH/solr/db/conf/managed-schema | 20 +-
.../example-DIH/solr/db/conf/solrconfig.xml | 3 +-
.../example-DIH/solr/mail/conf/managed-schema | 20 +-
.../example-DIH/solr/mail/conf/solrconfig.xml | 3 +-
.../example-DIH/solr/solr/conf/managed-schema | 20 +-
.../example-DIH/solr/solr/conf/solrconfig.xml | 3 +-
.../example-DIH/solr/tika/conf/managed-schema | 2 +-
solr/example/files/conf/solrconfig.xml | 3 +-
solr/example/files/conf/velocity/head.vm | 2 +-
.../android-json-0.0.20131108.vaadin1.jar.sha1 | 1 +
solr/licenses/android-json-LICENSE-ASL.txt | 202 +
solr/licenses/android-json-NOTICE.txt | 0
.../asciidoctor-ant-1.6.0-alpha.3.jar.sha1 | 1 +
solr/licenses/asciidoctor-ant-LICENSE-ASL.txt | 202 +
solr/licenses/asciidoctor-ant-NOTICE.txt | 5 +
solr/licenses/hsqldb-1.8.0.10.jar.sha1 | 1 -
solr/licenses/hsqldb-2.4.0.jar.sha1 | 1 +
solr/licenses/hsqldb-LICENSE-BSD_LIKE.txt | 9 +-
solr/licenses/hsqldb-NOTICE.txt | 135 +-
solr/licenses/icu4j-56.1.jar.sha1 | 1 -
solr/licenses/icu4j-59.1.jar.sha1 | 1 +
.../javacscript-natural-sort-NOTICE.txt | 5 -
.../javascript-natural-sort-LICENSE-MIT.txt | 21 -
solr/licenses/jsoup-1.8.2.jar.sha1 | 1 +
solr/licenses/jsoup-LICENSE-MIT.txt | 21 +
solr/licenses/metrics-core-3.1.2.jar.sha1 | 1 -
solr/licenses/metrics-core-3.2.2.jar.sha1 | 1 +
solr/licenses/metrics-ganglia-3.1.2.jar.sha1 | 1 -
solr/licenses/metrics-ganglia-3.2.2.jar.sha1 | 1 +
solr/licenses/metrics-graphite-3.1.2.jar.sha1 | 1 -
solr/licenses/metrics-graphite-3.2.2.jar.sha1 | 1 +
solr/licenses/metrics-jetty9-3.1.2.jar.sha1 | 1 -
solr/licenses/metrics-jetty9-3.2.2.jar.sha1 | 1 +
solr/licenses/metrics-jvm-3.1.2.jar.sha1 | 1 -
solr/licenses/metrics-jvm-3.2.2.jar.sha1 | 1 +
solr/licenses/noggit-0.6.jar.sha1 | 1 -
solr/licenses/noggit-0.8.jar.sha1 | 1 +
solr/licenses/slf4j-simple-1.7.7.jar.sha1 | 1 +
solr/licenses/zookeeper-3.4.10.jar.sha1 | 1 +
solr/licenses/zookeeper-3.4.6.jar.sha1 | 1 -
solr/server/etc/jetty-ssl.xml | 4 +-
.../server/etc/test/create-solrtest.keystore.sh | 37 -
solr/server/etc/test/solrtest.keystore | Bin 2208 -> 0 bytes
.../scripts/cloud-scripts/snapshotscli.sh | 2 +-
.../basic_configs/conf/managed-schema | 5 +-
.../basic_configs/conf/solrconfig.xml | 3 +-
.../conf/managed-schema | 30 +-
.../conf/solrconfig.xml | 3 +-
.../conf/managed-schema | 30 +-
.../conf/solrconfig.xml | 3 +-
.../conf/velocity/head.vm | 2 +-
solr/server/solr/zoo.cfg | 14 +
solr/solr-ref-guide/README.adoc | 43 +
solr/solr-ref-guide/build.xml | 239 +
solr/solr-ref-guide/ivy.xml | 34 +
.../meta-docs/asciidoc-syntax.adoc | 239 +
.../solr-ref-guide/meta-docs/editing-tools.adoc | 39 +
solr/solr-ref-guide/meta-docs/jekyll.adoc | 89 +
solr/solr-ref-guide/meta-docs/pdf.adoc | 145 +
solr/solr-ref-guide/meta-docs/publish.adoc | 220 +
solr/solr-ref-guide/src/.gitignore | 3 +
solr/solr-ref-guide/src/README.md | 3 +
solr/solr-ref-guide/src/_config.yml.template | 91 +
solr/solr-ref-guide/src/_data/strings.yml | 5 +
solr/solr-ref-guide/src/_data/tags.yml | 7 +
solr/solr-ref-guide/src/_includes/footer.html | 9 +
.../src/_includes/google_analytics.html | 6 +
solr/solr-ref-guide/src/_includes/head.html | 35 +
.../src/_includes/head_print.html | 33 +
solr/solr-ref-guide/src/_includes/sidebar.html | 65 +
solr/solr-ref-guide/src/_includes/taglogic.html | 22 +
solr/solr-ref-guide/src/_includes/toc.html | 9 +
solr/solr-ref-guide/src/_includes/topnav.html | 61 +
solr/solr-ref-guide/src/_layouts/default.html | 55 +
.../src/_layouts/default_print.html | 25 +
solr/solr-ref-guide/src/_layouts/none.html | 3 +
solr/solr-ref-guide/src/_layouts/page.html | 80 +
.../solr-ref-guide/src/_layouts/page_print.html | 15 +
solr/solr-ref-guide/src/a-quick-overview.adoc | 49 +
solr/solr-ref-guide/src/a-step-closer.adoc | 70 +
solr/solr-ref-guide/src/about-filters.adoc | 45 +
solr/solr-ref-guide/src/about-this-guide.adoc | 73 +
solr/solr-ref-guide/src/about-tokenizers.adoc | 47 +
...adding-custom-plugins-in-solrcloud-mode.adoc | 172 +
solr/solr-ref-guide/src/analysis-screen.adoc | 33 +
solr/solr-ref-guide/src/analyzers.adoc | 119 +
...uthentication-and-authorization-plugins.adoc | 186 +
.../src/basic-authentication-plugin.adoc | 156 +
solr/solr-ref-guide/src/blob-store-api.adoc | 151 +
solr/solr-ref-guide/src/blockjoin-faceting.adoc | 115 +
.../solr-ref-guide/src/charfilterfactories.adoc | 175 +
.../src/choosing-an-output-format.adoc | 25 +
solr/solr-ref-guide/src/client-api-lineup.adoc | 45 +
solr/solr-ref-guide/src/client-apis.adoc | 38 +
solr/solr-ref-guide/src/cloud-screens.adoc | 45 +
solr/solr-ref-guide/src/codec-factory.adoc | 57 +
.../src/collapse-and-expand-results.adoc | 149 +
.../src/collection-specific-tools.adoc | 46 +
solr/solr-ref-guide/src/collections-api.adoc | 1969 +++
.../src/collections-core-admin.adoc | 41 +
.../combining-distribution-and-replication.adoc | 35 +
.../src/command-line-utilities.adoc | 168 +
.../src/common-query-parameters.adoc | 381 +
solr/solr-ref-guide/src/config-api.adoc | 537 +
solr/solr-ref-guide/src/config-sets.adoc | 42 +
solr/solr-ref-guide/src/configsets-api.adoc | 212 +
solr/solr-ref-guide/src/configuration-apis.adoc | 27 +
.../solr-ref-guide/src/configuring-logging.adoc | 126 +
.../src/configuring-solrconfig-xml.adoc | 171 +
solr/solr-ref-guide/src/content-streams.adoc | 64 +
solr/solr-ref-guide/src/copying-fields.adoc | 56 +
.../solr-ref-guide/src/core-specific-tools.adoc | 52 +
solr/solr-ref-guide/src/coreadmin-api.adoc | 369 +
.../src/cross-data-center-replication-cdcr.adoc | 777 ++
solr/solr-ref-guide/src/css/comments.css | 164 +
solr/solr-ref-guide/src/css/customstyles.css | 885 ++
.../solr-ref-guide/src/css/font-awesome.min.css | 4 +
.../solr-ref-guide/src/css/lavish-bootstrap.css | 5420 ++++++++
solr/solr-ref-guide/src/css/printstyles.css | 160 +
solr/solr-ref-guide/src/css/ref-guide.css | 2840 +++++
solr/solr-ref-guide/src/css/theme-solr.css | 127 +
...adir-and-directoryfactory-in-solrconfig.adoc | 61 +
solr/solr-ref-guide/src/dataimport-screen.adoc | 29 +
solr/solr-ref-guide/src/de-duplication.adoc | 116 +
.../src/defining-core-properties.adoc | 95 +
solr/solr-ref-guide/src/defining-fields.adoc | 73 +
.../detecting-languages-during-indexing.adoc | 98 +
.../src/distributed-requests.adoc | 139 +
.../distributed-search-with-index-sharding.adoc | 181 +
.../src/documents-fields-and-schema-design.adoc | 44 +
solr/solr-ref-guide/src/documents-screen.adoc | 89 +
solr/solr-ref-guide/src/docvalues.adoc | 91 +
solr/solr-ref-guide/src/dynamic-fields.adoc | 36 +
solr/solr-ref-guide/src/enabling-ssl.adoc | 361 +
solr/solr-ref-guide/src/errata.adoc | 33 +
.../src/exporting-result-sets.adoc | 71 +
solr/solr-ref-guide/src/faceting.adoc | 754 ++
solr/solr-ref-guide/src/feed.xml | 28 +
.../src/field-properties-by-use-case.adoc | 50 +
.../field-type-definitions-and-properties.adoc | 131 +
.../src/field-types-included-with-solr.adoc | 56 +
solr/solr-ref-guide/src/files-screen.adoc | 39 +
.../solr-ref-guide/src/filter-descriptions.adoc | 1817 +++
.../src/fonts/Inconsolata/Inconsolata-Bold.ttf | Bin 0 -> 109948 bytes
.../fonts/Inconsolata/Inconsolata-Regular.ttf | Bin 0 -> 96964 bytes
.../src/fonts/Inconsolata/OFL.txt | 92 +
.../src/fonts/Noto_Sans/LICENSE.txt | 202 +
.../src/fonts/Noto_Sans/NotoSans-Bold.ttf | Bin 0 -> 415132 bytes
.../src/fonts/Noto_Sans/NotoSans-BoldItalic.ttf | Bin 0 -> 290436 bytes
.../src/fonts/Noto_Sans/NotoSans-Italic.ttf | Bin 0 -> 279268 bytes
.../src/fonts/Noto_Sans/NotoSans-Regular.ttf | Bin 0 -> 414820 bytes
.../src/fonts/fontawesome/FontAwesome.otf | Bin 0 -> 85908 bytes
.../fonts/fontawesome/fontawesome-webfont.eot | Bin 0 -> 56006 bytes
.../fonts/fontawesome/fontawesome-webfont.svg | 520 +
.../fonts/fontawesome/fontawesome-webfont.ttf | Bin 0 -> 112160 bytes
.../fonts/fontawesome/fontawesome-webfont.woff | Bin 0 -> 65452 bytes
.../glyphicons/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes
.../glyphicons/glyphicons-halflings-regular.svg | 288 +
.../glyphicons/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes
.../glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes
.../glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes
.../src/fonts/mplus1mn/mplus1mn-bold-ascii.ttf | Bin 0 -> 15868 bytes
.../mplus1mn/mplus1mn-bold_italic-ascii.ttf | Bin 0 -> 15908 bytes
.../fonts/mplus1mn/mplus1mn-italic-ascii.ttf | Bin 0 -> 15928 bytes
.../mplus1mn/mplus1mn-regular-ascii-conums.ttf | Bin 0 -> 20024 bytes
.../src/fonts/mplus1p-regular-fallback.ttf | Bin 0 -> 1405716 bytes
solr/solr-ref-guide/src/format-of-solr-xml.adoc | 170 +
solr/solr-ref-guide/src/function-queries.adoc | 273 +
solr/solr-ref-guide/src/further-assistance.adoc | 23 +
solr/solr-ref-guide/src/getting-assistance.adoc | 41 +
.../src/getting-started-with-solrcloud.adoc | 175 +
solr/solr-ref-guide/src/getting-started.adoc | 43 +
solr/solr-ref-guide/src/graph-traversal.adoc | 548 +
.../src/hadoop-authentication-plugin.adoc | 132 +
solr/solr-ref-guide/src/highlighting.adoc | 284 +
.../solr-ref-guide/src/how-solrcloud-works.adoc | 53 +
.../a-quick-overview/sample-client-app-arch.png | Bin 0 -> 52100 bytes
.../a-quick-overview/sample-client-app-arch.svg | 488 +
.../images/analysis-screen/analysis_normal.png | Bin 0 -> 57653 bytes
.../images/analysis-screen/analysis_verbose.png | Bin 0 -> 66742 bytes
.../src/images/cloud-screens/cloud-graph.png | Bin 0 -> 54929 bytes
.../src/images/cloud-screens/cloud-radial.png | Bin 0 -> 62572 bytes
.../src/images/cloud-screens/cloud-tree.png | Bin 0 -> 105371 bytes
.../collection_dashboard.png | Bin 0 -> 69978 bytes
.../collections-core-admin/DeleteShard.png | Bin 0 -> 161077 bytes
.../collections-core-admin/collection-admin.png | Bin 0 -> 60968 bytes
.../worddav4101c16174820e932b44baa22abcfcd1.png | Bin 0 -> 54328 bytes
.../core-specific-tools/core_dashboard.png | Bin 0 -> 84253 bytes
.../CDCR_arch.png | Bin 0 -> 83216 bytes
.../src/images/dataimport-screen/dataimport.png | Bin 0 -> 126440 bytes
.../documents-screen/documents_add_screen.png | Bin 0 -> 58783 bytes
.../src/images/draft-background.png | Bin 0 -> 5391 bytes
.../src/images/files-screen/files-screen.png | Bin 0 -> 129388 bytes
.../images/getting-assistance/Assistance.png | Bin 0 -> 6429 bytes
.../src/images/icons/bullet_blue.gif | Bin 0 -> 60 bytes
.../images/icons/contenttypes/home_page_16.png | Bin 0 -> 272 bytes
.../src/images/icons/emoticons/warning.png | Bin 0 -> 444 bytes
.../solr-ref-guide/src/images/icons/favicon.ico | Bin 0 -> 3262 bytes
.../worddav2b7e14725d898b4104cdd9c502fc77cd.png | Bin 0 -> 26388 bytes
.../images/java-properties/javaproperties.png | Bin 0 -> 86999 bytes
.../src/images/logging/level_menu.png | Bin 0 -> 68035 bytes
.../src/images/logging/logging.png | Bin 0 -> 49911 bytes
.../other-parsers/graph_qparser_example.png | Bin 0 -> 46673 bytes
.../other-parsers/graph_qparser_example.svg | 606 +
.../worddav16392965e726e04513a21641fabad474.png | Bin 0 -> 54279 bytes
.../worddav88969a784fb8a63d8c46e9c043f5f953.png | Bin 0 -> 246343 bytes
.../overview-of-the-solr-admin-ui/dashboard.png | Bin 0 -> 92750 bytes
.../images/parallel-sql-interface/cluster.png | Bin 0 -> 3067133 bytes
solr/solr-ref-guide/src/images/ping/ping.png | Bin 0 -> 10064 bytes
.../plugins-stats-screen/plugin-searcher.png | Bin 0 -> 103571 bytes
.../src/images/query-screen/query-top.png | Bin 0 -> 112162 bytes
.../images/replication-screen/replication.png | Bin 0 -> 55601 bytes
.../result-clustering/carrot2-workbench.png | Bin 0 -> 210974 bytes
.../src/images/result-clustering/carrot2.png | Bin 0 -> 403362 bytes
.../images/running-solr/SolrAdminDashboard.png | Bin 0 -> 249171 bytes
.../running-solr/solr34_responseHeader.png | Bin 0 -> 269440 bytes
.../analysis_compare_0.png | Bin 0 -> 57666 bytes
.../analysis_compare_1.png | Bin 0 -> 93162 bytes
.../analysis_compare_2.png | Bin 0 -> 85136 bytes
.../analysis_compare_3.png | Bin 0 -> 89766 bytes
.../analysis_compare_4.png | Bin 0 -> 97789 bytes
.../schema_browser_terms.png | Bin 0 -> 219326 bytes
.../src/images/segments-info/segments_info.png | Bin 0 -> 40880 bytes
.../zeppelin_solrjdbc_1.png | Bin 0 -> 72998 bytes
.../zeppelin_solrjdbc_2.png | Bin 0 -> 41166 bytes
.../zeppelin_solrjdbc_3.png | Bin 0 -> 62482 bytes
.../zeppelin_solrjdbc_4.png | Bin 0 -> 62527 bytes
.../zeppelin_solrjdbc_5.png | Bin 0 -> 42257 bytes
.../zeppelin_solrjdbc_6.png | Bin 0 -> 44941 bytes
.../dbvisualizer_solrjdbc_1.png | Bin 0 -> 171124 bytes
.../dbvisualizer_solrjdbc_11.png | Bin 0 -> 54439 bytes
.../dbvisualizer_solrjdbc_12.png | Bin 0 -> 130739 bytes
.../dbvisualizer_solrjdbc_13.png | Bin 0 -> 82449 bytes
.../dbvisualizer_solrjdbc_14.png | Bin 0 -> 75971 bytes
.../dbvisualizer_solrjdbc_15.png | Bin 0 -> 118023 bytes
.../dbvisualizer_solrjdbc_16.png | Bin 0 -> 162783 bytes
.../dbvisualizer_solrjdbc_17.png | Bin 0 -> 122613 bytes
.../dbvisualizer_solrjdbc_19.png | Bin 0 -> 84112 bytes
.../dbvisualizer_solrjdbc_2.png | Bin 0 -> 115345 bytes
.../dbvisualizer_solrjdbc_20.png | Bin 0 -> 145134 bytes
.../dbvisualizer_solrjdbc_3.png | Bin 0 -> 106194 bytes
.../dbvisualizer_solrjdbc_4.png | Bin 0 -> 110362 bytes
.../dbvisualizer_solrjdbc_5.png | Bin 0 -> 95829 bytes
.../dbvisualizer_solrjdbc_6.png | Bin 0 -> 106536 bytes
.../dbvisualizer_solrjdbc_7.png | Bin 0 -> 111281 bytes
.../dbvisualizer_solrjdbc_9.png | Bin 0 -> 117209 bytes
.../squirrelsql_solrjdbc_1.png | Bin 0 -> 42001 bytes
.../squirrelsql_solrjdbc_10.png | Bin 0 -> 53660 bytes
.../squirrelsql_solrjdbc_11.png | Bin 0 -> 59264 bytes
.../squirrelsql_solrjdbc_12.png | Bin 0 -> 47968 bytes
.../squirrelsql_solrjdbc_13.png | Bin 0 -> 43717 bytes
.../squirrelsql_solrjdbc_14.png | Bin 0 -> 44009 bytes
.../squirrelsql_solrjdbc_15.png | Bin 0 -> 92630 bytes
.../squirrelsql_solrjdbc_2.png | Bin 0 -> 56592 bytes
.../squirrelsql_solrjdbc_3.png | Bin 0 -> 52196 bytes
.../squirrelsql_solrjdbc_4.png | Bin 0 -> 42390 bytes
.../squirrelsql_solrjdbc_5.png | Bin 0 -> 56778 bytes
.../squirrelsql_solrjdbc_7.png | Bin 0 -> 62070 bytes
.../squirrelsql_solrjdbc_9.png | Bin 0 -> 63722 bytes
.../src/images/solr-sunOnly-small.png | Bin 0 -> 7528 bytes
.../src/images/spatial-search/bbox.png | Bin 0 -> 14893 bytes
.../src/images/spatial-search/circle.png | Bin 0 -> 14843 bytes
.../src/images/stream-screen/StreamScreen.png | Bin 0 -> 51471 bytes
.../src/images/thread-dump/thread_dump_1.png | Bin 0 -> 106104 bytes
.../src/images/thread-dump/thread_dump_2.png | Bin 0 -> 118045 bytes
.../velocity-search-ui/techproducts_browse.png | Bin 0 -> 74854 bytes
.../src/implicit-requesthandlers.adoc | 77 +
solr/solr-ref-guide/src/index-replication.adoc | 309 +
solr/solr-ref-guide/src/index.adoc | 46 +
.../src/indexconfig-in-solrconfig.adoc | 214 +
.../src/indexing-and-basic-data-operations.adoc | 49 +
solr/solr-ref-guide/src/indexupgrader-tool.adoc | 39 +
.../src/initparams-in-solrconfig.adoc | 122 +
solr/solr-ref-guide/src/installing-solr.adoc | 56 +
.../src/introduction-to-client-apis.adoc | 31 +
...ntroduction-to-scaling-and-distribution.adoc | 45 +
.../src/introduction-to-solr-indexing.adoc | 56 +
solr/solr-ref-guide/src/java-properties.adoc | 24 +
solr/solr-ref-guide/src/js/customscripts.js | 56 +
solr/solr-ref-guide/src/js/jekyll-search.js | 1 +
.../solr-ref-guide/src/js/jquery.navgoco.min.js | 8 +
solr/solr-ref-guide/src/js/ref-guide-toc.js | 36 +
solr/solr-ref-guide/src/js/toc.js | 82 +
solr/solr-ref-guide/src/jvm-settings.adoc | 54 +
.../src/kerberos-authentication-plugin.adoc | 395 +
solr/solr-ref-guide/src/language-analysis.adoc | 1646 +++
solr/solr-ref-guide/src/learning-to-rank.adoc | 760 ++
.../src/legacy-scaling-and-distribution.adoc | 34 +
.../src/lib-directives-in-solrconfig.adoc | 40 +
.../src/local-parameters-in-queries.adoc | 86 +
solr/solr-ref-guide/src/logging.adoc | 38 +
.../major-changes-from-solr-5-to-solr-6.adoc | 89 +
.../src/making-and-restoring-backups.adoc | 237 +
solr/solr-ref-guide/src/managed-resources.adoc | 298 +
solr/solr-ref-guide/src/managing-solr.adoc | 42 +
.../src/mbean-request-handler.adoc | 60 +
solr/solr-ref-guide/src/merging-indexes.adoc | 51 +
solr/solr-ref-guide/src/metrics-reporting.adoc | 397 +
solr/solr-ref-guide/src/morelikethis.adoc | 99 +
.../src/near-real-time-searching.adoc | 147 +
solr/solr-ref-guide/src/other-parsers.adoc | 983 ++
.../src/other-schema-elements.adoc | 99 +
...w-of-documents-fields-and-schema-design.adoc | 63 +
.../src/overview-of-searching-in-solr.adoc | 61 +
.../src/overview-of-the-solr-admin-ui.adoc | 38 +
.../src/pagination-of-results.adoc | 269 +
.../src/parallel-sql-interface.adoc | 434 +
.../solr-ref-guide/src/parameter-reference.adoc | 67 +
.../src/pdf/SolrRefGuide-all.adoc | 31 +
.../src/pdf/themes/refguide-theme.yml | 259 +
.../src/performance-statistics-reference.adoc | 135 +
solr/solr-ref-guide/src/phonetic-matching.adoc | 130 +
solr/solr-ref-guide/src/ping.adoc | 82 +
.../src/plugins-stats-screen.adoc | 28 +
solr/solr-ref-guide/src/post-tool.adoc | 183 +
.../src/putting-the-pieces-together.adoc | 75 +
solr/solr-ref-guide/src/query-re-ranking.adoc | 71 +
solr/solr-ref-guide/src/query-screen.adoc | 58 +
.../src/query-settings-in-solrconfig.adoc | 233 +
.../src/query-syntax-and-parsing.adoc | 33 +
.../read-and-write-side-fault-tolerance.adoc | 115 +
solr/solr-ref-guide/src/realtime-get.adoc | 118 +
solr/solr-ref-guide/src/relevance.adoc | 47 +
solr/solr-ref-guide/src/replication-screen.adoc | 37 +
.../src/request-parameters-api.adoc | 203 +
.../src/requestdispatcher-in-solrconfig.adoc | 98 +
...lers-and-searchcomponents-in-solrconfig.adoc | 183 +
solr/solr-ref-guide/src/response-writers.adoc | 340 +
solr/solr-ref-guide/src/result-clustering.adoc | 362 +
solr/solr-ref-guide/src/result-grouping.adoc | 255 +
.../src/rule-based-authorization-plugin.adoc | 241 +
.../src/rule-based-replica-placement.adoc | 197 +
.../src/running-solr-on-hdfs.adoc | 240 +
solr/solr-ref-guide/src/running-solr.adoc | 289 +
.../src/running-your-analyzer.adoc | 58 +
solr/solr-ref-guide/src/schema-api.adoc | 1186 ++
.../src/schema-browser-screen.adoc | 37 +
...schema-factory-definition-in-solrconfig.adoc | 97 +
solr/solr-ref-guide/src/schemaless-mode.adoc | 284 +
solr/solr-ref-guide/src/search.json | 21 +
solr/solr-ref-guide/src/searching.adoc | 57 +
solr/solr-ref-guide/src/securing-solr.adoc | 35 +
solr/solr-ref-guide/src/segments-info.adoc | 25 +
...tting-up-an-external-zookeeper-ensemble.adoc | 198 +
.../shards-and-indexing-data-in-solrcloud.adoc | 116 +
solr/solr-ref-guide/src/sitemap.xml | 17 +
.../src/solr-control-script-reference.adoc | 730 ++
.../src/solr-cores-and-solr-xml.adoc | 38 +
solr/solr-ref-guide/src/solr-field-types.adoc | 40 +
solr/solr-ref-guide/src/solr-glossary.adoc | 204 +
.../src/solr-jdbc-apache-zeppelin.adoc | 70 +
.../src/solr-jdbc-dbvisualizer.adoc | 136 +
.../src/solr-jdbc-python-jython.adoc | 142 +
solr/solr-ref-guide/src/solr-jdbc-r.adoc | 53 +
.../src/solr-jdbc-squirrel-sql.adoc | 96 +
solr/solr-ref-guide/src/solr-plugins.adoc | 26 +
.../solrcloud-configuration-and-parameters.adoc | 34 +
...lrcloud-with-legacy-configuration-files.adoc | 71 +
solr/solr-ref-guide/src/solrcloud.adoc | 47 +
solr/solr-ref-guide/src/spatial-search.adoc | 371 +
solr/solr-ref-guide/src/spell-checking.adoc | 390 +
solr/solr-ref-guide/src/stream-decorators.adoc | 848 ++
solr/solr-ref-guide/src/stream-evaluators.adoc | 461 +
solr/solr-ref-guide/src/stream-screen.adoc | 28 +
solr/solr-ref-guide/src/stream-sources.adoc | 503 +
.../src/streaming-expressions.adoc | 146 +
solr/solr-ref-guide/src/suggester.adoc | 476 +
.../src/taking-solr-to-production.adoc | 303 +
.../src/the-dismax-query-parser.adoc | 231 +
.../src/the-extended-dismax-query-parser.adoc | 264 +
.../src/the-query-elevation-component.adoc | 154 +
.../src/the-standard-query-parser.adoc | 418 +
.../solr-ref-guide/src/the-stats-component.adoc | 184 +
.../src/the-term-vector-component.adoc | 163 +
.../solr-ref-guide/src/the-terms-component.adoc | 311 +
.../src/the-well-configured-solr-instance.adoc | 43 +
solr/solr-ref-guide/src/thread-dump.adoc | 49 +
solr/solr-ref-guide/src/tokenizers.adoc | 517 +
.../transforming-and-indexing-custom-json.adoc | 378 +
.../src/transforming-result-documents.adoc | 340 +
solr/solr-ref-guide/src/uima-integration.adoc | 126 +
...anding-analyzers-tokenizers-and-filters.adoc | 60 +
.../src/update-request-processors.adoc | 397 +
.../src/updatehandlers-in-solrconfig.adoc | 150 +
.../src/updating-parts-of-documents.adoc | 289 +
.../src/upgrading-a-solr-cluster.adoc | 105 +
solr/solr-ref-guide/src/upgrading-solr.adoc | 82 +
.../src/uploading-data-with-index-handlers.adoc | 562 +
...g-data-with-solr-cell-using-apache-tika.adoc | 361 +
...store-data-with-the-data-import-handler.adoc | 1048 ++
solr/solr-ref-guide/src/using-javascript.adoc | 29 +
.../solr-ref-guide/src/using-jmx-with-solr.adoc | 124 +
solr/solr-ref-guide/src/using-python.adoc | 77 +
.../src/using-solr-from-ruby.adoc | 116 +
solr/solr-ref-guide/src/using-solrj.adoc | 165 +
...-the-solr-administration-user-interface.adoc | 50 +
...zookeeper-to-manage-configuration-files.adoc | 97 +
solr/solr-ref-guide/src/v2-api.adoc | 193 +
.../src/velocity-response-writer.adoc | 123 +
solr/solr-ref-guide/src/velocity-search-ui.adoc | 28 +
...king-with-currencies-and-exchange-rates.adoc | 104 +
solr/solr-ref-guide/src/working-with-dates.adoc | 173 +
.../src/working-with-enum-fields.adoc | 76 +
...rking-with-external-files-and-processes.adoc | 310 +
.../src/zookeeper-access-control.adoc | 164 +
.../tools/BuildNavAndPDFBody.java | 283 +
.../tools/CheckLinksAndAnchors.java | 229 +
solr/solr-ref-guide/tools/ReducePDFSize.java | 90 +
solr/solrj/ivy.xml | 1 +
.../solr/client/solrj/impl/CloudSolrClient.java | 302 +-
.../solrj/impl/ConcurrentUpdateSolrClient.java | 74 +-
.../impl/DelegationTokenHttpSolrClient.java | 24 +-
.../solr/client/solrj/impl/HttpSolrClient.java | 59 +-
.../client/solrj/impl/LBHttpSolrClient.java | 76 +-
.../solrj/impl/SolrClientDataProvider.java | 39 +-
.../impl/SolrHttpClientContextBuilder.java | 8 -
.../org/apache/solr/client/solrj/io/Tuple.java | 8 +-
.../solrj/io/comp/SingleValueComparator.java | 65 +
.../solrj/io/eval/AbsoluteValueEvaluator.java | 3 -
.../solr/client/solrj/io/eval/AddEvaluator.java | 7 +-
.../solr/client/solrj/io/eval/AndEvaluator.java | 3 -
.../client/solrj/io/eval/AnovaEvaluator.java | 81 +
.../solrj/io/eval/ArcCosineEvaluator.java | 3 -
.../client/solrj/io/eval/ArcSineEvaluator.java | 3 -
.../solrj/io/eval/ArcTangentEvaluator.java | 3 -
.../client/solrj/io/eval/ArrayEvaluator.java | 63 +
.../solrj/io/eval/ArraySortEvaluator.java | 77 +
.../client/solrj/io/eval/BooleanEvaluator.java | 3 -
.../client/solrj/io/eval/CeilingEvaluator.java | 3 -
.../client/solrj/io/eval/CoalesceEvaluator.java | 3 -
.../client/solrj/io/eval/ColumnEvaluator.java | 76 +
.../client/solrj/io/eval/ComplexEvaluator.java | 7 +
.../solrj/io/eval/ConditionalEvaluator.java | 3 -
.../solrj/io/eval/ConvolutionEvaluator.java | 86 +
.../client/solrj/io/eval/CopyOfEvaluator.java | 82 +
.../solrj/io/eval/CopyOfRangeEvaluator.java | 83 +
.../solrj/io/eval/CorrelationEvaluator.java | 80 +
.../client/solrj/io/eval/CosineEvaluator.java | 3 -
.../solrj/io/eval/CovarianceEvaluator.java | 80 +
.../solrj/io/eval/CubedRootEvaluator.java | 3 -
.../io/eval/CumulativeProbabilityEvaluator.java | 66 +
.../client/solrj/io/eval/DescribeEvaluator.java | 90 +
.../client/solrj/io/eval/DistanceEvaluator.java | 80 +
.../client/solrj/io/eval/DivideEvaluator.java | 3 -
.../io/eval/EmpiricalDistributionEvaluator.java | 127 +
.../client/solrj/io/eval/EqualsEvaluator.java | 3 -
.../solrj/io/eval/ExclusiveOrEvaluator.java | 3 -
.../client/solrj/io/eval/FieldEvaluator.java | 20 +-
.../solrj/io/eval/FindDelayEvaluator.java | 95 +
.../client/solrj/io/eval/FloorEvaluator.java | 3 -
.../io/eval/GreaterThanEqualToEvaluator.java | 3 -
.../solrj/io/eval/GreaterThanEvaluator.java | 3 -
.../solrj/io/eval/HistogramEvaluator.java | 100 +
.../io/eval/HyperbolicCosineEvaluator.java | 3 -
.../solrj/io/eval/HyperbolicSineEvaluator.java | 3 -
.../io/eval/HyperbolicTangentEvaluator.java | 3 -
.../solrj/io/eval/IfThenElseEvaluator.java | 3 -
.../client/solrj/io/eval/LengthEvaluator.java | 58 +
.../solrj/io/eval/LessThanEqualToEvaluator.java | 3 -
.../client/solrj/io/eval/LessThanEvaluator.java | 3 -
.../client/solrj/io/eval/ModuloEvaluator.java | 3 -
.../solrj/io/eval/MovingAverageEvaluator.java | 83 +
.../client/solrj/io/eval/MultiplyEvaluator.java | 3 -
.../solrj/io/eval/NaturalLogEvaluator.java | 3 -
.../solrj/io/eval/NormalizeEvaluator.java | 74 +
.../solr/client/solrj/io/eval/NotEvaluator.java | 3 -
.../client/solrj/io/eval/NumberEvaluator.java | 16 +-
.../solr/client/solrj/io/eval/OrEvaluator.java | 3 -
.../solrj/io/eval/PercentileEvaluator.java | 74 +
.../client/solrj/io/eval/PowerEvaluator.java | 3 -
.../client/solrj/io/eval/PredictEvaluator.java | 66 +
.../client/solrj/io/eval/RankEvaluator.java | 78 +
.../client/solrj/io/eval/RawValueEvaluator.java | 3 -
.../solrj/io/eval/RegressionEvaluator.java | 110 +
.../client/solrj/io/eval/ReverseEvaluator.java | 70 +
.../client/solrj/io/eval/RoundEvaluator.java | 3 -
.../client/solrj/io/eval/ScaleEvaluator.java | 81 +
.../client/solrj/io/eval/SequenceEvaluator.java | 77 +
.../client/solrj/io/eval/SimpleEvaluator.java | 6 +-
.../client/solrj/io/eval/SineEvaluator.java | 3 -
.../solrj/io/eval/SquareRootEvaluator.java | 3 -
.../client/solrj/io/eval/StreamEvaluator.java | 29 +-
.../client/solrj/io/eval/SubtractEvaluator.java | 3 -
.../client/solrj/io/eval/TangentEvaluator.java | 3 -
.../solrj/io/graph/ShortestPathStream.java | 25 -
.../solr/client/solrj/io/stream/CellStream.java | 152 +
.../client/solrj/io/stream/CloudSolrStream.java | 21 -
.../client/solrj/io/stream/FacetStream.java | 16 -
.../solr/client/solrj/io/stream/GetStream.java | 125 +
.../solr/client/solrj/io/stream/JDBCStream.java | 342 +-
.../solr/client/solrj/io/stream/KnnStream.java | 256 +
.../solr/client/solrj/io/stream/LetStream.java | 167 +
.../solr/client/solrj/io/stream/ListStream.java | 145 +
.../client/solrj/io/stream/RandomStream.java | 4 +-
.../solr/client/solrj/io/stream/SolrStream.java | 27 +-
.../solr/client/solrj/io/stream/SqlStream.java | 224 +
.../client/solrj/io/stream/StatsStream.java | 75 +-
.../client/solrj/io/stream/StreamContext.java | 5 +
.../solrj/io/stream/TimeSeriesStream.java | 413 +
.../client/solrj/io/stream/TopicStream.java | 19 -
.../solr/client/solrj/io/stream/TupStream.java | 218 +
.../client/solrj/io/stream/TupleStream.java | 37 +-
.../io/stream/expr/StreamExpressionParser.java | 2 +-
.../solrj/io/stream/expr/StreamFactory.java | 27 +-
.../solrj/request/CollectionAdminRequest.java | 967 +-
.../solrj/request/CollectionApiMapping.java | 407 +
.../client/solrj/request/CoreApiMapping.java | 118 +
.../solr/client/solrj/request/V2Request.java | 127 +
.../solrj/request/schema/SchemaRequest.java | 19 -
.../client/solrj/response/TermsResponse.java | 3 +-
.../response/schema/SchemaRepresentation.java | 20 -
.../solrj/response/schema/SchemaResponse.java | 33 -
.../solr/client/solrj/util/ClientUtils.java | 29 +
.../org/apache/solr/cloud/autoscaling/Cell.java | 58 +-
.../apache/solr/cloud/autoscaling/Clause.java | 173 +-
.../cloud/autoscaling/ClusterDataProvider.java | 6 +-
.../apache/solr/cloud/autoscaling/Operand.java | 58 +-
.../apache/solr/cloud/autoscaling/Policy.java | 67 +-
.../solr/cloud/autoscaling/PolicyHelper.java | 18 +-
.../solr/cloud/autoscaling/Preference.java | 11 +-
.../org/apache/solr/cloud/autoscaling/Row.java | 13 +-
.../apache/solr/common/cloud/DocCollection.java | 65 +-
.../org/apache/solr/common/cloud/Replica.java | 32 +
.../org/apache/solr/common/cloud/Slice.java | 21 +-
.../apache/solr/common/cloud/SolrZkClient.java | 7 +-
.../apache/solr/common/cloud/ZkStateReader.java | 18 +-
.../solr/common/cloud/rule/ImplicitSnitch.java | 48 +-
.../apache/solr/common/cloud/rule/Snitch.java | 6 +-
.../solr/common/cloud/rule/SnitchContext.java | 3 +-
.../solr/common/params/AnalysisParams.java | 2 +-
.../common/params/CollectionAdminParams.java | 10 +
.../solr/common/params/CollectionParams.java | 1 +
.../apache/solr/common/params/CommonParams.java | 4 +-
.../solr/common/params/CoreAdminParams.java | 5 +
.../solr/common/params/HighlightParams.java | 33 +-
.../common/params/ModifiableSolrParams.java | 4 +
.../apache/solr/common/params/SolrParams.java | 23 +-
.../solr/common/util/CommandOperation.java | 346 +
.../apache/solr/common/util/ExecutorUtil.java | 41 -
.../solr/common/util/JsonRecordReader.java | 1 +
.../org/apache/solr/common/util/NamedList.java | 23 +-
.../solr/common/util/SimpleOrderedMap.java | 9 +-
.../java/org/apache/solr/common/util/Utils.java | 39 +-
.../solrj/solr/collection1/conf/schema-sql.xml | 1 -
.../solrj/solr/collection1/conf/schema.xml | 1 -
.../solr/configsets/shared/conf/schema.xml | 6 -
.../solr/configsets/shared/conf/solrconfig.xml | 6 +
.../solr/configsets/streaming/conf/schema.xml | 1 -
.../configsets/streaming/conf/solrconfig.xml | 8 +-
.../solrj/solr/crazy-path-to-schema.xml | 1 -
.../solrj/solr/multicore/core0/conf/schema.xml | 6 -
.../solr/multicore/core0/conf/solrconfig.xml | 6 +
.../solrj/solr/multicore/core1/conf/schema.xml | 6 -
.../solr/multicore/core1/conf/solrconfig.xml | 6 +
...ollectionAdminRequestRequiredParamsTest.java | 136 +-
.../embedded/SolrExampleStreamingTest.java | 2 +-
.../solrj/impl/BasicHttpSolrClientTest.java | 18 +-
.../CloudSolrClientMultiConstructorTest.java | 4 +-
.../impl/ConcurrentUpdateSolrClientTest.java | 23 +-
.../solrj/io/graph/GraphExpressionTest.java | 2 +-
.../client/solrj/io/stream/JDBCStreamTest.java | 34 +-
.../solrj/io/stream/StreamExpressionTest.java | 1692 ++-
.../stream/eval/AbsoluteValueEvaluatorTest.java | 33 +-
.../solrj/io/stream/eval/AddEvaluatorTest.java | 6 -
.../solr/client/solrj/request/SchemaTest.java | 10 -
.../request/TestCollectionAdminRequest.java | 84 +-
.../client/solrj/request/TestV2Request.java | 89 +
.../solr/cloud/autoscaling/TestPolicy.java | 298 +-
.../solr/BaseDistributedSearchTestCase.java | 3 +-
.../java/org/apache/solr/SolrTestCaseJ4.java | 172 +-
.../cloud/AbstractFullDistribZkTestBase.java | 287 +-
.../java/org/apache/solr/cloud/ChaosMonkey.java | 159 +-
.../apache/solr/cloud/SolrCloudTestCase.java | 6 +-
.../solr/cloud/StoppableCommitThread.java | 69 +
.../solr/cloud/StoppableIndexingThread.java | 2 +-
.../solr/cloud/StoppableSearchThread.java | 2 +-
.../org/apache/solr/util/SSLTestConfig.java | 58 +-
.../java/org/apache/solr/util/TestHarness.java | 10 +-
solr/webapp/web/WEB-INF/web.xml | 5 -
solr/webapp/web/WEB-INF/weblogic.xml | 28 -
solr/webapp/web/css/angular/java-properties.css | 52 +
solr/webapp/web/css/angular/plugins.css | 6 +
solr/webapp/web/css/chosen.css | 421 -
solr/webapp/web/css/styles/analysis.css | 311 -
solr/webapp/web/css/styles/cloud.css | 410 -
solr/webapp/web/css/styles/common.css | 731 --
solr/webapp/web/css/styles/cores.css | 244 -
solr/webapp/web/css/styles/dashboard.css | 155 -
solr/webapp/web/css/styles/dataimport.css | 403 -
solr/webapp/web/css/styles/documents.css | 197 -
solr/webapp/web/css/styles/files.css | 54 -
solr/webapp/web/css/styles/index.css | 207 -
solr/webapp/web/css/styles/java-properties.css | 52 -
solr/webapp/web/css/styles/logging.css | 391 -
solr/webapp/web/css/styles/menu.css | 329 -
solr/webapp/web/css/styles/plugins.css | 195 -
solr/webapp/web/css/styles/query.css | 173 -
solr/webapp/web/css/styles/replication.css | 515 -
solr/webapp/web/css/styles/schema-browser.css | 578 -
solr/webapp/web/css/styles/segments.css | 145 -
solr/webapp/web/css/styles/threads.css | 172 -
solr/webapp/web/index.html | 10 +-
solr/webapp/web/js/angular/app.js | 334 -
.../web/js/angular/controllers/analysis.js | 10 -
solr/webapp/web/js/angular/controllers/cloud.js | 98 -
.../web/js/angular/controllers/core-overview.js | 32 -
solr/webapp/web/js/angular/controllers/cores.js | 283 -
.../webapp/web/js/angular/controllers/schema.js | 21 -
solr/webapp/web/js/lib/ZeroClipboard.js | 342 -
solr/webapp/web/js/lib/chosen.js | 982 --
solr/webapp/web/js/lib/console.js | 29 -
solr/webapp/web/js/lib/d3.js | 9373 --------------
solr/webapp/web/js/lib/highlight.js | 31 -
solr/webapp/web/js/lib/jquery-1.7.2.min.js | 30 -
solr/webapp/web/js/lib/jquery.ajaxfileupload.js | 184 -
solr/webapp/web/js/lib/jquery.blockUI.js | 523 -
solr/webapp/web/js/lib/jquery.cookie.js | 71 -
solr/webapp/web/js/lib/jquery.form.js | 806 --
solr/webapp/web/js/lib/jquery.jstree.js | 3534 -----
solr/webapp/web/js/lib/jquery.sammy.js | 1863 ---
solr/webapp/web/js/lib/jquery.timeago.js | 189 -
solr/webapp/web/js/lib/linker.js | 48 -
solr/webapp/web/js/lib/naturalSort.js | 82 -
solr/webapp/web/js/lib/order.js | 216 -
solr/webapp/web/js/main.js | 60 -
solr/webapp/web/js/require.js | 11349 -----------------
solr/webapp/web/js/scripts/analysis.js | 545 -
solr/webapp/web/js/scripts/app.js | 669 -
solr/webapp/web/js/scripts/cloud.js | 877 --
solr/webapp/web/js/scripts/cores.js | 719 --
solr/webapp/web/js/scripts/dashboard.js | 562 -
solr/webapp/web/js/scripts/dataimport.js | 812 --
solr/webapp/web/js/scripts/documents.js | 362 -
solr/webapp/web/js/scripts/files.js | 270 -
solr/webapp/web/js/scripts/index.js | 340 -
solr/webapp/web/js/scripts/java-properties.js | 106 -
solr/webapp/web/js/scripts/logging.js | 578 -
solr/webapp/web/js/scripts/ping.js | 72 -
solr/webapp/web/js/scripts/plugins.js | 462 -
solr/webapp/web/js/scripts/query.js | 229 -
solr/webapp/web/js/scripts/replication.js | 527 -
solr/webapp/web/js/scripts/schema-browser.js | 1229 --
solr/webapp/web/js/scripts/segments.js | 206 -
solr/webapp/web/js/scripts/threads.js | 158 -
solr/webapp/web/libs/jquery-1.7.2.min.js | 30 +
solr/webapp/web/old.html | 169 -
solr/webapp/web/partials/plugins.html | 6 +-
solr/webapp/web/partials/schema.html | 3 -
solr/webapp/web/tpl/analysis.html | 83 -
solr/webapp/web/tpl/cloud.html | 87 -
solr/webapp/web/tpl/cores.html | 226 -
solr/webapp/web/tpl/dashboard.html | 201 -
solr/webapp/web/tpl/dataimport.html | 183 -
solr/webapp/web/tpl/documents.html | 100 -
solr/webapp/web/tpl/files.html | 44 -
solr/webapp/web/tpl/index.html | 250 -
solr/webapp/web/tpl/logging.html | 23 -
solr/webapp/web/tpl/plugins.html | 39 -
solr/webapp/web/tpl/query.html | 361 -
solr/webapp/web/tpl/replication.html | 216 -
solr/webapp/web/tpl/schema-browser.html | 192 -
solr/webapp/web/tpl/segments.html | 49 -
solr/webapp/web/tpl/threads.html | 56 -
1464 files changed, 90368 insertions(+), 68423 deletions(-)
----------------------------------------------------------------------
[09/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-8668: In
solrconfig.xml remove (and related and
) support in favor of the element
introduced by SOLR-8621 in Solr 5.5.0. (Christine Poers
Posted by sh...@apache.org.
SOLR-8668: In solrconfig.xml remove <mergePolicy> (and related <mergeFactor> and <maxMergeDocs>)
support in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
(Christine Poerschke, hossman)
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/c64f9d64
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/c64f9d64
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/c64f9d64
Branch: refs/heads/feature/autoscaling
Commit: c64f9d64b4edc8c3761368befc394e879b2284ff
Parents: 445ceda
Author: Christine Poerschke <cp...@apache.org>
Authored: Fri Jun 2 13:59:08 2017 +0100
Committer: Christine Poerschke <cp...@apache.org>
Committed: Fri Jun 2 13:59:08 2017 +0100
----------------------------------------------------------------------
solr/CHANGES.txt | 7 +
.../org/apache/solr/update/SolrIndexConfig.java | 146 ++-----------------
.../solr/collection1/conf/bad-mp-solrconfig.xml | 36 -----
.../collection1/conf/solrconfig-delpolicy1.xml | 3 +-
.../collection1/conf/solrconfig-delpolicy2.xml | 3 +-
.../collection1/conf/solrconfig-indexconfig.xml | 31 ----
.../conf/solrconfig-indexmetrics.xml | 8 +-
.../conf/solrconfig-logmergepolicy.xml | 36 -----
.../conf/solrconfig-mergepolicy-legacy.xml | 1 -
.../conf/solrconfig-mergepolicy-nocfs.xml | 34 -----
.../conf/solrconfig-spellcheckcomponent.xml | 3 +-
.../conf/solrconfig-tieredmergepolicy.xml | 48 ------
.../solr/collection1/conf/solrconfig-warmer.xml | 46 ------
.../solrconfig.snippet.randomindexconfig.xml | 3 +-
.../org/apache/solr/TestGroupingSearch.java | 3 -
.../solr/cloud/TestAuthenticationFramework.java | 11 +-
.../solr/cloud/TestMiniSolrCloudCluster.java | 11 +-
.../cloud/TestSolrCloudWithKerberosAlt.java | 11 +-
.../org/apache/solr/core/TestBadConfig.java | 2 -
.../test/org/apache/solr/core/TestConfig.java | 9 +-
.../apache/solr/core/TestMergePolicyConfig.java | 18 +--
.../test/org/apache/solr/core/TestNRTOpen.java | 3 -
.../apache/solr/core/TestSolrIndexConfig.java | 2 +-
.../admin/SegmentsInfoRequestHandlerTest.java | 2 -
.../solr/schema/TestHalfAndHalfDocValues.java | 4 -
.../apache/solr/search/TestIndexSearcher.java | 3 -
.../solr/update/DirectUpdateHandlerTest.java | 3 -
.../solr/update/SolrCmdDistributorTest.java | 3 -
.../apache/solr/update/SolrIndexConfigTest.java | 36 ++---
.../solr/update/TestInPlaceUpdatesDistrib.java | 4 -
.../update/TestInPlaceUpdatesStandalone.java | 4 -
.../java/org/apache/solr/SolrTestCaseJ4.java | 35 -----
32 files changed, 52 insertions(+), 517 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index d8c9d04..195443d 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -86,6 +86,9 @@ Upgrading from Solr 6.x
this QParser untill Solr 8, you must explicitly register it in your solrconfig.xml:
'<queryParser name="lucenePlusSort" class="solr.OldLuceneQParserPlugin"/>'
+* In solrconfig.xml the deprecated <mergePolicy> and <mergeFactor> and <maxMergeDocs> elements have
+ been removed in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
+
New Features
----------------------
* SOLR-9857, SOLR-9858: Collect aggregated metrics from nodes and shard leaders in overseer. (ab)
@@ -218,6 +221,10 @@ Other Changes
* LUCENE-7852: Correct copyright year(s) in solr/LICENSE.txt file.
(Christine Poerschke, Steve Rowe)
+* SOLR-8668: In solrconfig.xml remove <mergePolicy> (and related <mergeFactor> and <maxMergeDocs>)
+ support in favor of the <mergePolicyFactory> element introduced by SOLR-8621 in Solr 5.5.0.
+ (Christine Poerschke, hossman)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java b/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
index 26b9839..c663783 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
@@ -27,10 +27,8 @@ import org.apache.lucene.analysis.DelegatingAnalyzerWrapper;
import org.apache.lucene.index.ConcurrentMergeScheduler;
import org.apache.lucene.index.IndexWriter.IndexReaderWarmer;
import org.apache.lucene.index.IndexWriterConfig;
-import org.apache.lucene.index.LogMergePolicy;
import org.apache.lucene.index.MergePolicy;
import org.apache.lucene.index.MergeScheduler;
-import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.search.Sort;
import org.apache.lucene.util.InfoStream;
import org.apache.lucene.util.Version;
@@ -66,17 +64,14 @@ public class SolrIndexConfig implements MapSerializable {
public static final String DEFAULT_MERGE_SCHEDULER_CLASSNAME = ConcurrentMergeScheduler.class.getName();
public final Version luceneVersion;
- private boolean effectiveUseCompoundFileSetting;
+ public final boolean useCompoundFile;
public final int maxBufferedDocs;
- public final int maxMergeDocs;
- public final int mergeFactor;
public final double ramBufferSizeMB;
public final int writeLockTimeout;
public final String lockType;
- public final PluginInfo mergePolicyInfo;
public final PluginInfo mergePolicyFactoryInfo;
public final PluginInfo mergeSchedulerInfo;
public final PluginInfo metricsInfo;
@@ -90,14 +85,11 @@ public class SolrIndexConfig implements MapSerializable {
*/
private SolrIndexConfig(SolrConfig solrConfig) {
luceneVersion = solrConfig.luceneMatchVersion;
- effectiveUseCompoundFileSetting = false;
+ useCompoundFile = false;
maxBufferedDocs = -1;
- maxMergeDocs = -1;
- mergeFactor = -1;
ramBufferSizeMB = 100;
writeLockTimeout = -1;
lockType = DirectoryFactory.LOCK_TYPE_NATIVE;
- mergePolicyInfo = null;
mergePolicyFactoryInfo = null;
mergeSchedulerInfo = null;
mergedSegmentWarmerInfo = null;
@@ -132,17 +124,15 @@ public class SolrIndexConfig implements MapSerializable {
assertWarnOrFail("The <mergeScheduler>myclass</mergeScheduler> syntax is no longer supported in solrconfig.xml. Please use syntax <mergeScheduler class=\"myclass\"/> instead.",
!((solrConfig.getNode(prefix + "/mergeScheduler", false) != null) && (solrConfig.get(prefix + "/mergeScheduler/@class", null) == null)),
true);
- assertWarnOrFail("The <mergePolicy>myclass</mergePolicy> syntax is no longer supported in solrconfig.xml. Please use syntax <mergePolicy class=\"myclass\"/> instead.",
+ assertWarnOrFail("Beginning with Solr 7.0, <mergePolicy>myclass</mergePolicy> is no longer supported, use <mergePolicyFactory> instead.",
!((solrConfig.getNode(prefix + "/mergePolicy", false) != null) && (solrConfig.get(prefix + "/mergePolicy/@class", null) == null)),
true);
assertWarnOrFail("The <luceneAutoCommit>true|false</luceneAutoCommit> parameter is no longer valid in solrconfig.xml.",
solrConfig.get(prefix + "/luceneAutoCommit", null) == null,
true);
- effectiveUseCompoundFileSetting = solrConfig.getBool(prefix+"/useCompoundFile", def.getUseCompoundFile());
+ useCompoundFile = solrConfig.getBool(prefix+"/useCompoundFile", def.useCompoundFile);
maxBufferedDocs=solrConfig.getInt(prefix+"/maxBufferedDocs",def.maxBufferedDocs);
- maxMergeDocs=solrConfig.getInt(prefix+"/maxMergeDocs",def.maxMergeDocs);
- mergeFactor=solrConfig.getInt(prefix+"/mergeFactor",def.mergeFactor);
ramBufferSizeMB = solrConfig.getDouble(prefix+"/ramBufferSizeMB", def.ramBufferSizeMB);
writeLockTimeout=solrConfig.getInt(prefix+"/writeLockTimeout", def.writeLockTimeout);
@@ -155,24 +145,17 @@ public class SolrIndexConfig implements MapSerializable {
metricsInfo = infos.get(0);
}
mergeSchedulerInfo = getPluginInfo(prefix + "/mergeScheduler", solrConfig, def.mergeSchedulerInfo);
- mergePolicyInfo = getPluginInfo(prefix + "/mergePolicy", solrConfig, def.mergePolicyInfo);
mergePolicyFactoryInfo = getPluginInfo(prefix + "/mergePolicyFactory", solrConfig, def.mergePolicyFactoryInfo);
- if (mergePolicyInfo != null && mergePolicyFactoryInfo != null) {
- throw new IllegalArgumentException("<mergePolicy> and <mergePolicyFactory> are mutually exclusive.");
- }
- if (maxMergeDocs != def.maxMergeDocs && mergePolicyFactoryInfo != null) {
- throw new IllegalArgumentException("<maxMergeDocs> and <mergePolicyFactory> are mutually exclusive.");
- }
- if (mergeFactor != def.mergeFactor && mergePolicyFactoryInfo != null) {
- throw new IllegalArgumentException("<mergeFactor> and <mergePolicyFactory> are mutually exclusive.");
- }
- assertWarnOrFail("Beginning with Solr 5.5, <mergePolicy> is deprecated, use <mergePolicyFactory> instead.",
- (mergePolicyInfo == null), false);
- assertWarnOrFail("Beginning with Solr 5.5, <maxMergeDocs> is deprecated, configure it on the relevant <mergePolicyFactory> instead.",
- (maxMergeDocs == def.maxMergeDocs), false);
- assertWarnOrFail("Beginning with Solr 5.5, <mergeFactor> is deprecated, configure it on the relevant <mergePolicyFactory> instead.",
- (mergeFactor == def.mergeFactor), false);
+ assertWarnOrFail("Beginning with Solr 7.0, <mergePolicy> is no longer supported, use <mergePolicyFactory> instead.",
+ getPluginInfo(prefix + "/mergePolicy", solrConfig, null) == null,
+ true);
+ assertWarnOrFail("Beginning with Solr 7.0, <maxMergeDocs> is no longer supported, configure it on the relevant <mergePolicyFactory> instead.",
+ solrConfig.getInt(prefix+"/maxMergeDocs", 0) == 0,
+ true);
+ assertWarnOrFail("Beginning with Solr 7.0, <mergeFactor> is no longer supported, configure it on the relevant <mergePolicyFactory> instead.",
+ solrConfig.getInt(prefix+"/mergeFactor", 0) == 0,
+ true);
String val = solrConfig.get(prefix + "/termIndexInterval", null);
if (val != null) {
@@ -198,10 +181,8 @@ public class SolrIndexConfig implements MapSerializable {
@Override
public Map<String, Object> toMap(Map<String, Object> map) {
- Map<String, Object> m = Utils.makeMap("useCompoundFile", effectiveUseCompoundFileSetting,
+ Map<String, Object> m = Utils.makeMap("useCompoundFile", useCompoundFile,
"maxBufferedDocs", maxBufferedDocs,
- "maxMergeDocs", maxMergeDocs,
- "mergeFactor", mergeFactor,
"ramBufferSizeMB", ramBufferSizeMB,
"writeLockTimeout", writeLockTimeout,
"lockType", lockType,
@@ -210,9 +191,7 @@ public class SolrIndexConfig implements MapSerializable {
if (metricsInfo != null) {
m.put("metrics", metricsInfo);
}
- if (mergePolicyInfo != null) {
- m.put("mergePolicy", mergePolicyInfo);
- } else if (mergePolicyFactoryInfo != null) {
+ if (mergePolicyFactoryInfo != null) {
m.put("mergePolicyFactory", mergePolicyFactoryInfo);
}
if(mergedSegmentWarmerInfo != null) m.put("mergedSegmentWarmer",mergedSegmentWarmerInfo);
@@ -259,9 +238,7 @@ public class SolrIndexConfig implements MapSerializable {
iwc.setIndexSort(indexSort);
}
- // do this after buildMergePolicy since the backcompat logic
- // there may modify the effective useCompoundFile
- iwc.setUseCompoundFile(getUseCompoundFile());
+ iwc.setUseCompoundFile(useCompoundFile);
if (mergedSegmentWarmerInfo != null) {
// TODO: add infostream -> normal logging system (there is an issue somewhere)
@@ -276,19 +253,12 @@ public class SolrIndexConfig implements MapSerializable {
return iwc;
}
- private boolean useMergePolicyInfo() {
- return mergePolicyInfo != null || maxMergeDocs != -1 || mergeFactor != -1;
- }
-
/**
* Builds a MergePolicy using the configured MergePolicyFactory
* or if no factory is configured uses the configured mergePolicy PluginInfo.
*/
@SuppressWarnings("unchecked")
private MergePolicy buildMergePolicy(final IndexSchema schema) {
- if (useMergePolicyInfo()) {
- return buildMergePolicyFromInfo(schema);
- }
final String mpfClassName;
final MergePolicyFactoryArgs mpfArgs;
@@ -311,59 +281,6 @@ public class SolrIndexConfig implements MapSerializable {
return mpf.getMergePolicy();
}
- /**
- * Builds a MergePolicy, may also modify the value returned by
- * getUseCompoundFile() for use by the IndexWriterConfig if
- * "useCompoundFile" is specified as an init arg for
- * an out of the box MergePolicy that no longer supports it
- *
- * @see #fixUseCFMergePolicyInitArg
- * @see #getUseCompoundFile
- */
- private MergePolicy buildMergePolicyFromInfo(IndexSchema schema) {
- final MergePolicy policy;
- if (mergePolicyInfo == null) {
- final SolrResourceLoader resourceLoader = schema.getResourceLoader();
- final MergePolicyFactoryArgs mpfArgs = new MergePolicyFactoryArgs();
- final MergePolicyFactory defaultMergePolicyFactory = resourceLoader.newInstance(
- DEFAULT_MERGE_POLICY_FACTORY_CLASSNAME,
- MergePolicyFactory.class,
- NO_SUB_PACKAGES,
- new Class[] { SolrResourceLoader.class, MergePolicyFactoryArgs.class, IndexSchema.class },
- new Object[] { resourceLoader, mpfArgs, schema });
- policy = defaultMergePolicyFactory.getMergePolicy();
- } else {
- policy = schema.getResourceLoader().newInstance(mergePolicyInfo.className, MergePolicy.class);
- }
-
- if (policy instanceof LogMergePolicy) {
- LogMergePolicy logMergePolicy = (LogMergePolicy) policy;
- fixUseCFMergePolicyInitArg(LogMergePolicy.class);
-
- if (maxMergeDocs != -1)
- logMergePolicy.setMaxMergeDocs(maxMergeDocs);
-
- if (mergeFactor != -1)
- logMergePolicy.setMergeFactor(mergeFactor);
- } else if (policy instanceof TieredMergePolicy) {
- TieredMergePolicy tieredMergePolicy = (TieredMergePolicy) policy;
- fixUseCFMergePolicyInitArg(TieredMergePolicy.class);
-
- if (mergeFactor != -1) {
- tieredMergePolicy.setMaxMergeAtOnce(mergeFactor);
- tieredMergePolicy.setSegmentsPerTier(mergeFactor);
- }
- } else if (mergeFactor != -1) {
- log.warn("Use of <mergeFactor> cannot be configured if merge policy is not an instance of LogMergePolicy or TieredMergePolicy. The configured policy's defaults will be used.");
- }
-
- if (mergePolicyInfo != null) {
- SolrPluginUtils.invokeSetters(policy, mergePolicyInfo.initArgs);
- }
-
- return policy;
- }
-
private MergeScheduler buildMergeScheduler(IndexSchema schema) {
String msClassName = mergeSchedulerInfo == null ? SolrIndexConfig.DEFAULT_MERGE_SCHEDULER_CLASSNAME : mergeSchedulerInfo.className;
MergeScheduler scheduler = schema.getResourceLoader().newInstance(msClassName, MergeScheduler.class);
@@ -391,35 +308,4 @@ public class SolrIndexConfig implements MapSerializable {
return scheduler;
}
- public boolean getUseCompoundFile() {
- return effectiveUseCompoundFileSetting;
- }
-
- /**
- * Lucene 4.4 removed the setUseCompoundFile(boolean) method from the two
- * conrete MergePolicies provided with Lucene/Solr and added it to the
- * IndexWriterConfig.
- * In the event that users have a value explicitly configured for this
- * setter in their MergePolicy init args, we remove it from the MergePolicy
- * init args, update the 'effective' useCompoundFile setting used by the
- * IndexWriterConfig, and warn about discontinuing to use this init arg.
- *
- * @see #getUseCompoundFile
- */
- private void fixUseCFMergePolicyInitArg(Class c) {
-
- if (null == mergePolicyInfo || null == mergePolicyInfo.initArgs) return;
-
- Object useCFSArg = mergePolicyInfo.initArgs.remove("useCompoundFile");
- if (null != useCFSArg) {
- log.warn("Ignoring 'useCompoundFile' specified as an init arg for the <mergePolicy> since it is no directly longer supported by " + c.getSimpleName());
- if (useCFSArg instanceof Boolean) {
- boolean cfs = ((Boolean)useCFSArg).booleanValue();
- log.warn("Please update your config to specify <useCompoundFile>"+cfs+"</useCompoundFile> directly in your <indexConfig> settings.");
- effectiveUseCompoundFileSetting = cfs;
- } else {
- log.error("MergePolicy's 'useCompoundFile' init arg is not a boolean, can not apply back compat logic to apply to the IndexWriterConfig: " + useCFSArg.toString());
- }
- }
- }
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/bad-mp-solrconfig.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/bad-mp-solrconfig.xml b/solr/core/src/test-files/solr/collection1/conf/bad-mp-solrconfig.xml
deleted file mode 100644
index 4e3504e..0000000
--- a/solr/core/src/test-files/solr/collection1/conf/bad-mp-solrconfig.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" ?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<config>
-
- <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
-
- <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
-
- <indexConfig>
- <mergePolicy class="org.apache.solr.update.DummyMergePolicy"/>
- <mergeFactor>8</mergeFactor>
- </indexConfig>
-
- <updateHandler class="solr.DirectUpdateHandler2"/>
- <requestHandler name="standard" class="solr.StandardRequestHandler"></requestHandler>
-
- <schemaFactory class="ClassicIndexSchemaFactory"/>
-
-</config>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy1.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy1.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy1.xml
index 33faf8b..36b4b98 100644
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy1.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy1.xml
@@ -30,8 +30,7 @@
to configure an explicit deletion policy, but we still wnat to randomize as much
as possible.
-->
- <mergePolicy enable="${solr.tests.useMergePolicy:true}" class="${solr.tests.mergePolicy:org.apache.solr.util.RandomMergePolicy}" />
- <mergePolicyFactory enable="${solr.tests.useMergePolicyFactory:true}" class="${solr.tests.mergePolicyFactory:org.apache.solr.util.RandomMergePolicyFactory}" />
+ <mergePolicyFactory class="${solr.tests.mergePolicyFactory:org.apache.solr.util.RandomMergePolicyFactory}" />
<useCompoundFile>${useCompoundFile:false}</useCompoundFile>
<maxBufferedDocs>${solr.tests.maxBufferedDocs}</maxBufferedDocs>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy2.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy2.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy2.xml
index 61adf1f..06352f3 100644
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy2.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig-delpolicy2.xml
@@ -27,8 +27,7 @@
to configure an explicit deletion policy, but we still wnat to randomize as much
as possible.
-->
- <mergePolicy enable="${solr.tests.useMergePolicy:true}" class="${solr.tests.mergePolicy:org.apache.solr.util.RandomMergePolicy}" />
- <mergePolicyFactory enable="${solr.tests.useMergePolicyFactory:true}" class="${solr.tests.mergePolicyFactory:org.apache.solr.util.RandomMergePolicyFactory}" />
+ <mergePolicyFactory class="${solr.tests.mergePolicyFactory:org.apache.solr.util.RandomMergePolicyFactory}" />
<useCompoundFile>${useCompoundFile:false}</useCompoundFile>
<maxBufferedDocs>${solr.tests.maxBufferedDocs}</maxBufferedDocs>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-indexconfig.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-indexconfig.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-indexconfig.xml
deleted file mode 100644
index 52fb28e..0000000
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-indexconfig.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" ?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<config>
- <dataDir>${solr.data.dir:}</dataDir>
-
- <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
-
- <indexConfig>
- <useCompoundFile>${useCompoundFile:false}</useCompoundFile>
- <infoStream>true</infoStream>
- <mergePolicy class="org.apache.solr.util.RandomMergePolicy" />
- </indexConfig>
-
- <schemaFactory class="ClassicIndexSchemaFactory"/>
-</config>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-indexmetrics.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-indexmetrics.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-indexmetrics.xml
index 6cf54d5..6238e7d 100644
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-indexmetrics.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig-indexmetrics.xml
@@ -34,10 +34,14 @@
</metrics>
<!-- intentionally set very low values here to trigger multiple flushes and merges.
DO NOT USE THESE ABSURD VALUES IN PRODUCTION. -->
- <mergeFactor>3</mergeFactor>
<maxBufferedDocs>100</maxBufferedDocs>
- <mergePolicy class="org.apache.lucene.index.TieredMergePolicy"/>
+ <mergePolicyFactory class="org.apache.solr.index.TieredMergePolicyFactory">
+ <!-- intentionally set very low values here to trigger multiple flushes and merges.
+ DO NOT USE THESE ABSURD VALUES IN PRODUCTION. -->
+ <int name="maxMergeAtOnce">3</int>
+ <int name="segmentsPerTier">3</int>
+ </mergePolicyFactory>
</indexConfig>
<updateHandler class="solr.DirectUpdateHandler2">
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-logmergepolicy.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-logmergepolicy.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-logmergepolicy.xml
deleted file mode 100644
index 49eec42..0000000
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-logmergepolicy.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" ?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<config>
- <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
- <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
- <schemaFactory class="ClassicIndexSchemaFactory"/>
- <indexConfig>
- <!-- set some values to -1 to force the use of internal lucene defaults -->
- <maxBufferedDocs>-1</maxBufferedDocs>
- <ramBufferSizeMB>-1</ramBufferSizeMB>
-
- <mergeFactor>11</mergeFactor>
- <maxMergeDocs>456</maxMergeDocs>
- <mergePolicy class="${solr.test.log.merge.policy}" />
- </indexConfig>
-
- <requestHandler name="standard" class="solr.StandardRequestHandler"></requestHandler>
-
-</config>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml
index 6e6c6fe..a7361cc 100644
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml
@@ -23,7 +23,6 @@
<schemaFactory class="ClassicIndexSchemaFactory"/>
<indexConfig>
- <mergeFactor>7</mergeFactor>
<useCompoundFile>${useCompoundFile:false}</useCompoundFile>
</indexConfig>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-nocfs.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-nocfs.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-nocfs.xml
deleted file mode 100644
index b59cdc8..0000000
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-nocfs.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" ?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<config>
- <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
- <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
- <schemaFactory class="ClassicIndexSchemaFactory"/>
-
- <indexConfig>
- <useCompoundFile>${testSetNoCFSMergePolicyConfig.useCompoundFile:false}</useCompoundFile>
- <mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
- <double name="noCFSRatio">0.5</double>
- </mergePolicy>
- </indexConfig>
-
- <requestHandler name="standard" class="solr.StandardRequestHandler"></requestHandler>
-
-</config>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-spellcheckcomponent.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-spellcheckcomponent.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-spellcheckcomponent.xml
index 5324a35..cf923c4 100644
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-spellcheckcomponent.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig-spellcheckcomponent.xml
@@ -20,8 +20,7 @@
<config>
<luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
<indexConfig>
- <mergePolicy enable="${solr.tests.useMergePolicy:true}" class="${solr.tests.mergePolicy:org.apache.solr.util.RandomMergePolicy}" />
- <mergePolicyFactory enable="${solr.tests.useMergePolicyFactory:true}" class="${solr.tests.mergePolicyFactory:org.apache.solr.util.RandomMergePolicyFactory}" />
+ <mergePolicyFactory class="${solr.tests.mergePolicyFactory:org.apache.solr.util.RandomMergePolicyFactory}" />
<useCompoundFile>${useCompoundFile:false}</useCompoundFile>
<maxBufferedDocs>${solr.tests.maxBufferedDocs}</maxBufferedDocs>
<ramBufferSizeMB>${solr.tests.ramBufferSizeMB}</ramBufferSizeMB>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-tieredmergepolicy.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-tieredmergepolicy.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-tieredmergepolicy.xml
deleted file mode 100644
index 026b3c7..0000000
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-tieredmergepolicy.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" ?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<config>
- <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
- <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
- <schemaFactory class="ClassicIndexSchemaFactory"/>
-
- <indexConfig>
- <mergeFactor>7</mergeFactor>
- <mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
- <int name="maxMergeAtOnceExplicit">19</int>
- <int name="segmentsPerTier">9</int>
- <double name="noCFSRatio">0.1</double>
-
- <!-- Setter for this was moved from the MergePolicies to IndexWriterConfig
- in Lucene 4.4, so we should treat it the same as a <useCompoundFile>
- setting and log a warning (instead of failing because the setter is
- gone).
- -->
- <bool name="useCompoundFile">${useCompoundFile:false}</bool>
-
- </mergePolicy>
- <mergeScheduler class="org.apache.lucene.index.ConcurrentMergeScheduler">
- <int name="maxMergeCount">987</int>
- <int name="maxThreadCount">42</int>
- </mergeScheduler>
- </indexConfig>
-
- <requestHandler name="standard" class="solr.StandardRequestHandler"></requestHandler>
-
-</config>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig-warmer.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig-warmer.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig-warmer.xml
deleted file mode 100644
index 691c94b..0000000
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig-warmer.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" ?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- a basic solrconfig that tests can use when they want simple minimal solrconfig/schema
- DO NOT ADD THINGS TO THIS CONFIG! -->
-<config>
- <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
- <dataDir>${solr.data.dir:}</dataDir>
- <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
- <schemaFactory class="ClassicIndexSchemaFactory"/>
- <requestHandler name="standard" class="solr.StandardRequestHandler"></requestHandler>
-
- <indexConfig>
- <!-- we don't use solrconfig.snippet.randomindexconfig.xml here
- because we explicitly test that a mergedSegmentWarmer works,
- but we can still test some of the other randomized indexConfig
- settings
- -->
- <mergedSegmentWarmer class="org.apache.lucene.index.SimpleMergedSegmentWarmer"/>
- <mergePolicy class="org.apache.solr.util.RandomMergePolicy" />
-
- <useCompoundFile>${useCompoundFile}</useCompoundFile>
- <maxBufferedDocs>${solr.tests.maxBufferedDocs}</maxBufferedDocs>
- <ramBufferSizeMB>${solr.tests.ramBufferSizeMB}</ramBufferSizeMB>
- <mergeScheduler class="${solr.tests.mergeScheduler}" />
- <writeLockTimeout>1000</writeLockTimeout>
- <commitLockTimeout>10000</commitLockTimeout>
- <lockType>single</lockType>
- </indexConfig>
-</config>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml b/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml
index ec5f54e..ecf1f14 100644
--- a/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/solrconfig.snippet.randomindexconfig.xml
@@ -26,8 +26,7 @@ A solrconfig.xml snippet containing indexConfig settings for randomized testing.
the RandomMergePolicy in all tests - but some tests expect very specific
Merge behavior, so those tests can set it as needed.
-->
- <mergePolicy enable="${solr.tests.useMergePolicy:true}" class="${solr.tests.mergePolicy:org.apache.solr.util.RandomMergePolicy}" />
- <mergePolicyFactory enable="${solr.tests.useMergePolicyFactory:true}" class="${solr.tests.mergePolicyFactory:org.apache.solr.util.RandomMergePolicyFactory}" />
+ <mergePolicyFactory class="${solr.tests.mergePolicyFactory:org.apache.solr.util.RandomMergePolicyFactory}" />
<useCompoundFile>${useCompoundFile:false}</useCompoundFile>
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
index 2d46551..99dc63c 100644
--- a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
+++ b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
@@ -30,7 +30,6 @@ import java.util.List;
import java.util.Map;
import java.util.TreeMap;
-import org.apache.lucene.index.LogDocMergePolicy;
import org.apache.solr.client.solrj.impl.BinaryResponseParser;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.GroupParams;
@@ -63,7 +62,6 @@ public class TestGroupingSearch extends SolrTestCaseJ4 {
public static void beforeTests() throws Exception {
// force LogDocMergePolicy so that we get a predictable doc order
// when doing unsorted group collection
- systemSetPropertySolrTestsMergePolicy(LogDocMergePolicy.class.getName());
systemSetPropertySolrTestsMergePolicyFactory(LogDocMergePolicyFactory.class.getName());
System.setProperty("enable.update.log", "false"); // schema12 doesn't support _version_
@@ -72,7 +70,6 @@ public class TestGroupingSearch extends SolrTestCaseJ4 {
@AfterClass
public static void afterTests() {
- systemClearPropertySolrTestsMergePolicy();
systemClearPropertySolrTestsMergePolicyFactory();
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java b/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
index 5fd8e42..df3790d 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
@@ -32,7 +32,6 @@ import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.protocol.HttpContext;
-import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.LuceneTestCase.SuppressSysoutChecks;
import org.apache.solr.SolrTestCaseJ4;
@@ -149,15 +148,7 @@ public class TestAuthenticationFramework extends LuceneTestCase {
collectionProperties.putIfAbsent("solr.tests.maxBufferedDocs", "100000");
collectionProperties.putIfAbsent("solr.tests.ramBufferSizeMB", "100");
// use non-test classes so RandomizedRunner isn't necessary
- if (random().nextBoolean()) {
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICY, TieredMergePolicy.class.getName());
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "true");
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "false");
- } else {
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICYFACTORY, TieredMergePolicyFactory.class.getName());
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "true");
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "false");
- }
+ collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICYFACTORY, TieredMergePolicyFactory.class.getName());
collectionProperties.putIfAbsent("solr.tests.mergeScheduler", "org.apache.lucene.index.ConcurrentMergeScheduler");
collectionProperties.putIfAbsent("solr.directoryFactory", (persistIndex ? "solr.StandardDirectoryFactory" : "solr.RAMDirectoryFactory"));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java b/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java
index de18875..a8250f8 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java
@@ -27,7 +27,6 @@ import java.util.List;
import java.util.Map;
import com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
-import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.LuceneTestCase.SuppressSysoutChecks;
import org.apache.solr.SolrTestCaseJ4;
@@ -102,15 +101,7 @@ public class TestMiniSolrCloudCluster extends LuceneTestCase {
collectionProperties.putIfAbsent("solr.tests.maxBufferedDocs", "100000");
collectionProperties.putIfAbsent("solr.tests.ramBufferSizeMB", "100");
// use non-test classes so RandomizedRunner isn't necessary
- if (random().nextBoolean()) {
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICY, TieredMergePolicy.class.getName());
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "true");
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "false");
- } else {
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICYFACTORY, TieredMergePolicyFactory.class.getName());
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "true");
- collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "false");
- }
+ collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICYFACTORY, TieredMergePolicyFactory.class.getName());
collectionProperties.putIfAbsent("solr.tests.mergeScheduler", "org.apache.lucene.index.ConcurrentMergeScheduler");
collectionProperties.putIfAbsent("solr.directoryFactory", (persistIndex ? "solr.StandardDirectoryFactory" : "solr.RAMDirectoryFactory"));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
index 042c111..1758ae0 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
@@ -23,7 +23,6 @@ import java.util.List;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
-import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.util.Constants;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
@@ -180,15 +179,7 @@ public class TestSolrCloudWithKerberosAlt extends LuceneTestCase {
properties.put("solr.tests.maxBufferedDocs", "100000");
properties.put("solr.tests.ramBufferSizeMB", "100");
// use non-test classes so RandomizedRunner isn't necessary
- if (random().nextBoolean()) {
- properties.put(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICY, TieredMergePolicy.class.getName());
- properties.put(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "true");
- properties.put(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "false");
- } else {
- properties.put(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICYFACTORY, TieredMergePolicyFactory.class.getName());
- properties.put(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "true");
- properties.put(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "false");
- }
+ properties.put(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICYFACTORY, TieredMergePolicyFactory.class.getName());
properties.put("solr.tests.mergeScheduler", "org.apache.lucene.index.ConcurrentMergeScheduler");
properties.put("solr.directoryFactory", "solr.RAMDirectoryFactory");
createRequest.setProperties(properties);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/core/TestBadConfig.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestBadConfig.java b/solr/core/src/test/org/apache/solr/core/TestBadConfig.java
index 31361be..db04152 100644
--- a/solr/core/src/test/org/apache/solr/core/TestBadConfig.java
+++ b/solr/core/src/test/org/apache/solr/core/TestBadConfig.java
@@ -76,8 +76,6 @@ public class TestBadConfig extends AbstractBadConfigTestBase {
}
public void testBogusMergePolicy() throws Exception {
- assertConfigs("bad-mp-solrconfig.xml", "schema-minimal.xml",
- "DummyMergePolicy");
assertConfigs("bad-mpf-solrconfig.xml", "schema-minimal.xml",
"DummyMergePolicyFactory");
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/core/TestConfig.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestConfig.java b/solr/core/src/test/org/apache/solr/core/TestConfig.java
index 094f013..87a453f 100644
--- a/solr/core/src/test/org/apache/solr/core/TestConfig.java
+++ b/solr/core/src/test/org/apache/solr/core/TestConfig.java
@@ -148,11 +148,9 @@ public class TestConfig extends SolrTestCaseJ4 {
SolrConfig sc = new SolrConfig(new SolrResourceLoader(TEST_PATH().resolve("collection1")), "solrconfig-defaults.xml", null);
SolrIndexConfig sic = sc.indexConfig;
- ++numDefaultsTested; assertEquals("default useCompoundFile", false, sic.getUseCompoundFile());
+ ++numDefaultsTested; assertEquals("default useCompoundFile", false, sic.useCompoundFile);
++numDefaultsTested; assertEquals("default maxBufferedDocs", -1, sic.maxBufferedDocs);
- ++numDefaultsTested; assertEquals("default maxMergeDocs", -1, sic.maxMergeDocs);
- ++numDefaultsTested; assertEquals("default mergeFactor", -1, sic.mergeFactor);
++numDefaultsTested; assertEquals("default ramBufferSizeMB", 100.0D, sic.ramBufferSizeMB, 0.0D);
++numDefaultsTested; assertEquals("default writeLockTimeout", -1, sic.writeLockTimeout);
@@ -162,10 +160,7 @@ public class TestConfig extends SolrTestCaseJ4 {
++numDefaultsTested; assertNotNull("default metrics", sic.metricsInfo);
- // mergePolicyInfo and mergePolicyFactoryInfo are mutually exclusive
- // so ++ count them only once for both instead of individually
++numDefaultsTested; ++numNullDefaults;
- assertNull("default mergePolicyInfo", sic.mergePolicyInfo);
assertNull("default mergePolicyFactoryInfo", sic.mergePolicyFactoryInfo);
++numDefaultsTested; ++numNullDefaults; assertNull("default mergeSchedulerInfo", sic.mergeSchedulerInfo);
@@ -197,7 +192,7 @@ public class TestConfig extends SolrTestCaseJ4 {
Double.parseDouble(System.getProperty("solr.tests.ramBufferSizeMB")),
sic.ramBufferSizeMB, 0.0D);
assertEquals("useCompoundFile sysprop",
- Boolean.parseBoolean(System.getProperty("useCompoundFile")), sic.getUseCompoundFile());
+ Boolean.parseBoolean(System.getProperty("useCompoundFile")), sic.useCompoundFile);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java b/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java
index f8e232a..3de61be 100644
--- a/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java
+++ b/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java
@@ -50,7 +50,7 @@ public class TestMergePolicyConfig extends SolrTestCaseJ4 {
final boolean useCompoundFile = random().nextBoolean();
System.setProperty("testSetNoCFSMergePolicyConfig.useCompoundFile", String.valueOf(useCompoundFile));
try {
- initCore(random().nextBoolean() ? "solrconfig-mergepolicy-nocfs.xml" : "solrconfig-mergepolicyfactory-nocfs.xml","schema-minimal.xml");
+ initCore("solrconfig-mergepolicyfactory-nocfs.xml","schema-minimal.xml");
IndexWriterConfig iwc = solrConfig.indexConfig.toIndexWriterConfig(h.getCore());
assertEquals(useCompoundFile, iwc.getUseCompoundFile());
@@ -84,8 +84,8 @@ public class TestMergePolicyConfig extends SolrTestCaseJ4 {
TieredMergePolicy tieredMP = assertAndCast(TieredMergePolicy.class, iwc.getMergePolicy());
- assertEquals(7, tieredMP.getMaxMergeAtOnce());
- assertEquals(7.0D, tieredMP.getSegmentsPerTier(), 0.0D);
+ assertEquals(10, tieredMP.getMaxMergeAtOnce());
+ assertEquals(10.0D, tieredMP.getSegmentsPerTier(), 0.0D);
assertCommitSomeNewDocs();
assertCompoundSegments(h.getCore(), expectCFS);
@@ -95,7 +95,7 @@ public class TestMergePolicyConfig extends SolrTestCaseJ4 {
final boolean expectCFS
= Boolean.parseBoolean(System.getProperty("useCompoundFile"));
- initCore(random().nextBoolean() ? "solrconfig-tieredmergepolicy.xml" : "solrconfig-tieredmergepolicyfactory.xml","schema-minimal.xml");
+ initCore("solrconfig-tieredmergepolicyfactory.xml","schema-minimal.xml");
IndexWriterConfig iwc = solrConfig.indexConfig.toIndexWriterConfig(h.getCore());
assertEquals(expectCFS, iwc.getUseCompoundFile());
@@ -148,16 +148,6 @@ public class TestMergePolicyConfig extends SolrTestCaseJ4 {
assertEquals(mergePolicy, iwc.getMergePolicy());
}
- public void testLogMergePolicyConfig() throws Exception {
-
- final Class<? extends LogMergePolicy> mpClass = random().nextBoolean()
- ? LogByteSizeMergePolicy.class : LogDocMergePolicy.class;
-
- System.setProperty("solr.test.log.merge.policy", mpClass.getName());
-
- implTestLogMergePolicyConfig("solrconfig-logmergepolicy.xml", mpClass);
- }
-
public void testLogMergePolicyFactoryConfig() throws Exception {
final boolean byteSizeMP = random().nextBoolean();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/core/TestNRTOpen.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestNRTOpen.java b/solr/core/src/test/org/apache/solr/core/TestNRTOpen.java
index 0970953..910c618 100644
--- a/solr/core/src/test/org/apache/solr/core/TestNRTOpen.java
+++ b/solr/core/src/test/org/apache/solr/core/TestNRTOpen.java
@@ -23,7 +23,6 @@ import java.util.Set;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.DirectoryReader;
-import org.apache.lucene.index.LogDocMergePolicy;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.index.LogDocMergePolicyFactory;
import org.apache.solr.search.SolrIndexSearcher;
@@ -41,7 +40,6 @@ public class TestNRTOpen extends SolrTestCaseJ4 {
System.setProperty("solr.test.leavedatadir", "true");
// set these so that merges won't break the test
System.setProperty("solr.tests.maxBufferedDocs", "100000");
- systemSetPropertySolrTestsMergePolicy(LogDocMergePolicy.class.getName());
systemSetPropertySolrTestsMergePolicyFactory(LogDocMergePolicyFactory.class.getName());
initCore("solrconfig-basic.xml", "schema-minimal.xml");
// add a doc
@@ -62,7 +60,6 @@ public class TestNRTOpen extends SolrTestCaseJ4 {
System.clearProperty("solr.test.leavedatadir");
System.clearProperty("solr.directoryFactory");
System.clearProperty("solr.tests.maxBufferedDocs");
- systemClearPropertySolrTestsMergePolicy();
systemClearPropertySolrTestsMergePolicyFactory();
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/core/TestSolrIndexConfig.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestSolrIndexConfig.java b/solr/core/src/test/org/apache/solr/core/TestSolrIndexConfig.java
index 978ad0f..2a2d8e6 100644
--- a/solr/core/src/test/org/apache/solr/core/TestSolrIndexConfig.java
+++ b/solr/core/src/test/org/apache/solr/core/TestSolrIndexConfig.java
@@ -31,7 +31,7 @@ public class TestSolrIndexConfig extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
- initCore(random().nextBoolean() ? "solrconfig-indexconfig.xml" : "solrconfig-indexconfig-mergepolicyfactory.xml","schema.xml");
+ initCore("solrconfig-indexconfig-mergepolicyfactory.xml","schema.xml");
}
public void testLiveWriter() throws Exception {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/handler/admin/SegmentsInfoRequestHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/SegmentsInfoRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/SegmentsInfoRequestHandlerTest.java
index 1355e56..6de7835 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/SegmentsInfoRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/SegmentsInfoRequestHandlerTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.solr.handler.admin;
-import org.apache.lucene.index.LogDocMergePolicy;
import org.apache.lucene.util.Version;
import org.apache.solr.index.LogDocMergePolicyFactory;
import org.apache.solr.util.AbstractSolrTestCase;
@@ -38,7 +37,6 @@ public class SegmentsInfoRequestHandlerTest extends AbstractSolrTestCase {
// we need a consistent segmentation to ensure we don't get a random
// merge that reduces the total num docs in all segments, or the number of deletes
//
- systemSetPropertySolrTestsMergePolicy(LogDocMergePolicy.class.getName());
systemSetPropertySolrTestsMergePolicyFactory(LogDocMergePolicyFactory.class.getName());
System.setProperty("enable.update.log", "false"); // no _version_ in our schema
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/schema/TestHalfAndHalfDocValues.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/schema/TestHalfAndHalfDocValues.java b/solr/core/src/test/org/apache/solr/schema/TestHalfAndHalfDocValues.java
index b0c3956..feb9236 100644
--- a/solr/core/src/test/org/apache/solr/schema/TestHalfAndHalfDocValues.java
+++ b/solr/core/src/test/org/apache/solr/schema/TestHalfAndHalfDocValues.java
@@ -42,10 +42,6 @@ public class TestHalfAndHalfDocValues extends SolrTestCaseJ4 {
// segments with and without docvalues
systemSetPropertySolrTestsMergePolicyFactory(NoMergePolicyFactory.class.getName());
- // HACK: Don't use a RandomMergePolicy, but only use the mergePolicyFactory that we've just set
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "true");
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "false");
-
initCore("solrconfig-basic.xml", "schema-docValues.xml");
// sanity check our schema meets our expectations
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java b/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
index c36066a..457129f 100644
--- a/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
+++ b/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
@@ -32,7 +32,6 @@ import com.google.common.collect.ImmutableMap;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexReaderContext;
import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.LogDocMergePolicy;
import org.apache.lucene.index.ReaderUtil;
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
@@ -61,7 +60,6 @@ public class TestIndexSearcher extends SolrTestCaseJ4 {
// we need a consistent segmentation because reopen test validation
// dependso n merges not happening when it doesn't expect
- systemSetPropertySolrTestsMergePolicy(LogDocMergePolicy.class.getName());
systemSetPropertySolrTestsMergePolicyFactory(LogDocMergePolicyFactory.class.getName());
initCore("solrconfig.xml","schema.xml");
@@ -69,7 +67,6 @@ public class TestIndexSearcher extends SolrTestCaseJ4 {
@AfterClass
public static void afterClass() {
- systemClearPropertySolrTestsMergePolicy();
systemClearPropertySolrTestsMergePolicyFactory();
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java b/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
index 7d97ee4..90bb6a0 100644
--- a/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
@@ -27,7 +27,6 @@ import com.codahale.metrics.Gauge;
import com.codahale.metrics.Meter;
import com.codahale.metrics.Metric;
import org.apache.lucene.index.DirectoryReader;
-import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.store.Directory;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.params.CommonParams;
@@ -62,14 +61,12 @@ public class DirectUpdateHandlerTest extends SolrTestCaseJ4 {
savedFactory = System.getProperty("solr.DirectoryFactory");
System.setProperty("solr.directoryFactory", "org.apache.solr.core.MockFSDirectoryFactory");
System.setProperty("enable.update.log", "false"); // schema12 doesn't support _version_
- systemSetPropertySolrTestsMergePolicy(TieredMergePolicy.class.getName());
systemSetPropertySolrTestsMergePolicyFactory(TieredMergePolicyFactory.class.getName());
initCore("solrconfig.xml", "schema12.xml");
}
@AfterClass
public static void afterClass() {
- systemClearPropertySolrTestsMergePolicy();
systemClearPropertySolrTestsMergePolicyFactory();
if (savedFactory == null) {
System.clearProperty("solr.directoryFactory");
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/update/SolrCmdDistributorTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/update/SolrCmdDistributorTest.java b/solr/core/src/test/org/apache/solr/update/SolrCmdDistributorTest.java
index cb35e88..20c2f1a 100644
--- a/solr/core/src/test/org/apache/solr/update/SolrCmdDistributorTest.java
+++ b/solr/core/src/test/org/apache/solr/update/SolrCmdDistributorTest.java
@@ -25,7 +25,6 @@ import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.lucene.index.LogDocMergePolicy;
import org.apache.solr.BaseDistributedSearchTestCase;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
@@ -65,13 +64,11 @@ public class SolrCmdDistributorTest extends BaseDistributedSearchTestCase {
public static void beforeClass() throws Exception {
// we can't use the Randomized merge policy because the test depends on
// being able to call optimize to have all deletes expunged.
- systemSetPropertySolrTestsMergePolicy(LogDocMergePolicy.class.getName());
systemSetPropertySolrTestsMergePolicyFactory(LogDocMergePolicyFactory.class.getName());
}
@AfterClass
public static void afterClass() {
- systemClearPropertySolrTestsMergePolicy();
systemClearPropertySolrTestsMergePolicyFactory();
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
index 0f53f33..ec5719c 100644
--- a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
+++ b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
@@ -46,9 +46,7 @@ import org.junit.Test;
public class SolrIndexConfigTest extends SolrTestCaseJ4 {
private static final String solrConfigFileName = "solrconfig.xml";
- private static final String solrConfigFileNameWarmerRandomMergePolicy = "solrconfig-warmer.xml";
private static final String solrConfigFileNameWarmerRandomMergePolicyFactory = "solrconfig-warmer-randommergepolicyfactory.xml";
- private static final String solrConfigFileNameTieredMergePolicy = "solrconfig-tieredmergepolicy.xml";
private static final String solrConfigFileNameTieredMergePolicyFactory = "solrconfig-tieredmergepolicyfactory.xml";
private static final String solrConfigFileNameSortingMergePolicyFactory = "solrconfig-sortingmergepolicyfactory.xml";
private static final String schemaFileName = "schema.xml";
@@ -63,7 +61,7 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
@Test
public void testFailingSolrIndexConfigCreation() {
try {
- SolrConfig solrConfig = new SolrConfig(random().nextBoolean() ? "bad-mp-solrconfig.xml" : "bad-mpf-solrconfig.xml");
+ SolrConfig solrConfig = new SolrConfig("bad-mpf-solrconfig.xml");
SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
h.getCore().setLatestSchema(indexSchema);
@@ -76,7 +74,7 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
@Test
public void testTieredMPSolrIndexConfigCreation() throws Exception {
- String solrConfigFileName = random().nextBoolean() ? solrConfigFileNameTieredMergePolicy : solrConfigFileNameTieredMergePolicyFactory;
+ String solrConfigFileName = solrConfigFileNameTieredMergePolicyFactory;
SolrConfig solrConfig = new SolrConfig(instanceDir, solrConfigFileName, null);
SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
@@ -121,7 +119,7 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
}
public void testMergedSegmentWarmerIndexConfigCreation() throws Exception {
- SolrConfig solrConfig = new SolrConfig(instanceDir, random().nextBoolean() ? solrConfigFileNameWarmerRandomMergePolicy : solrConfigFileNameWarmerRandomMergePolicyFactory, null);
+ SolrConfig solrConfig = new SolrConfig(instanceDir, solrConfigFileNameWarmerRandomMergePolicyFactory, null);
SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
assertNotNull(solrIndexConfig);
assertNotNull(solrIndexConfig.mergedSegmentWarmerInfo);
@@ -134,20 +132,14 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
}
public void testToMap() throws Exception {
- final String solrConfigFileNameWarmer = random().nextBoolean() ? solrConfigFileNameWarmerRandomMergePolicy : solrConfigFileNameWarmerRandomMergePolicyFactory;
- final String solrConfigFileNameTMP = random().nextBoolean() ? solrConfigFileNameTieredMergePolicy : solrConfigFileNameTieredMergePolicyFactory;
+ final String solrConfigFileNameWarmer = solrConfigFileNameWarmerRandomMergePolicyFactory;
+ final String solrConfigFileNameTMP = solrConfigFileNameTieredMergePolicyFactory;
final String solrConfigFileName = (random().nextBoolean() ? solrConfigFileNameWarmer : solrConfigFileNameTMP);
SolrConfig solrConfig = new SolrConfig(instanceDir, solrConfigFileName, null);
SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
assertNotNull(solrIndexConfig);
- if (solrConfigFileName.equals(solrConfigFileNameTieredMergePolicyFactory) ||
- solrConfigFileName.equals(solrConfigFileNameWarmerRandomMergePolicyFactory)) {
- assertNotNull(solrIndexConfig.mergePolicyFactoryInfo);
- } else {
- assertNotNull(solrIndexConfig.mergePolicyInfo);
- }
- if (solrConfigFileName.equals(solrConfigFileNameWarmerRandomMergePolicy) ||
- solrConfigFileName.equals(solrConfigFileNameWarmerRandomMergePolicyFactory)) {
+ assertNotNull(solrIndexConfig.mergePolicyFactoryInfo);
+ if (solrConfigFileName.equals(solrConfigFileNameWarmerRandomMergePolicyFactory)) {
assertNotNull(solrIndexConfig.mergedSegmentWarmerInfo);
} else {
assertNull(solrIndexConfig.mergedSegmentWarmerInfo);
@@ -160,8 +152,6 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
++mSizeExpected; assertTrue(m.get("useCompoundFile") instanceof Boolean);
++mSizeExpected; assertTrue(m.get("maxBufferedDocs") instanceof Integer);
- ++mSizeExpected; assertTrue(m.get("maxMergeDocs") instanceof Integer);
- ++mSizeExpected; assertTrue(m.get("mergeFactor") instanceof Integer);
++mSizeExpected; assertTrue(m.get("ramBufferSizeMB") instanceof Double);
@@ -183,16 +173,8 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
}
++mSizeExpected; assertTrue(m.get("mergeScheduler") instanceof MapSerializable);
- if (solrConfigFileName.equals(solrConfigFileNameTieredMergePolicyFactory) ||
- solrConfigFileName.equals(solrConfigFileNameWarmerRandomMergePolicyFactory)) {
- assertNull(m.get("mergePolicy"));
- ++mSizeExpected; assertTrue(m.get("mergePolicyFactory") instanceof MapSerializable);
- } else {
- ++mSizeExpected; assertTrue(m.get("mergePolicy") instanceof MapSerializable);
- assertNull(m.get("mergePolicyFactory"));
- }
- if (solrConfigFileName.equals(solrConfigFileNameWarmerRandomMergePolicy) ||
- solrConfigFileName.equals(solrConfigFileNameWarmerRandomMergePolicyFactory)) {
+ ++mSizeExpected; assertTrue(m.get("mergePolicyFactory") instanceof MapSerializable);
+ if (solrConfigFileName.equals(solrConfigFileNameWarmerRandomMergePolicyFactory)) {
++mSizeExpected; assertTrue(m.get("mergedSegmentWarmer") instanceof MapSerializable);
} else {
assertNull(m.get("mergedSegmentWarmer"));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesDistrib.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesDistrib.java b/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesDistrib.java
index 44b4a4e..588ecce 100644
--- a/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesDistrib.java
+++ b/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesDistrib.java
@@ -87,10 +87,6 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
// asserting inplace updates happen by checking the internal [docid]
systemSetPropertySolrTestsMergePolicyFactory(NoMergePolicyFactory.class.getName());
- // HACK: Don't use a RandomMergePolicy, but only use the mergePolicyFactory that we've just set
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "true");
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "false");
-
initCore(configString, schemaString);
// sanity check that autocommits are disabled
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesStandalone.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesStandalone.java b/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesStandalone.java
index aa075a4..88b1b6d 100644
--- a/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesStandalone.java
+++ b/solr/core/src/test/org/apache/solr/update/TestInPlaceUpdatesStandalone.java
@@ -75,10 +75,6 @@ public class TestInPlaceUpdatesStandalone extends SolrTestCaseJ4 {
// asserting inplace updates happen by checking the internal [docid]
systemSetPropertySolrTestsMergePolicyFactory(NoMergePolicyFactory.class.getName());
- // HACK: Don't use a RandomMergePolicy, but only use the mergePolicyFactory that we've just set
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "true");
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "false");
-
initCore("solrconfig-tlog.xml", "schema-inplace-updates.xml");
// sanity check that autocommits are disabled
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c64f9d64/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
----------------------------------------------------------------------
diff --git a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
index 419f94f..e9eefb0 100644
--- a/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
+++ b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
@@ -171,16 +171,8 @@ public abstract class SolrTestCaseJ4 extends LuceneTestCase {
public static final String DEFAULT_TEST_CORENAME = DEFAULT_TEST_COLLECTION_NAME;
protected static final String CORE_PROPERTIES_FILENAME = "core.properties";
- // keep solr.tests.mergePolicyFactory use i.e. do not remove with SOLR-8668
public static final String SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICYFACTORY = "solr.tests.mergePolicyFactory";
- @Deprecated // remove solr.tests.mergePolicy use with SOLR-8668
- public static final String SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICY = "solr.tests.mergePolicy";
- @Deprecated // remove solr.tests.useMergePolicyFactory with SOLR-8668
- public static final String SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY = "solr.tests.useMergePolicyFactory";
- @Deprecated // remove solr.tests.useMergePolicy use with SOLR-8668
- public static final String SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY = "solr.tests.useMergePolicy";
-
/**
* The system property {@code "solr.tests.preferPointFields"} can be used to make tests use PointFields when possible.
* PointFields will only be used if the schema used by the tests uses "${solr.tests.TYPEClass}" when defining fields.
@@ -2482,33 +2474,6 @@ public abstract class SolrTestCaseJ4 extends LuceneTestCase {
waitForWarming(h.getCore());
}
- @BeforeClass
- public static void chooseMPForMP() throws Exception {
- if (random().nextBoolean()) {
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "true");
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "false");
- } else {
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "false");
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "true");
- }
- }
-
- @AfterClass
- public static void unchooseMPForMP() {
- System.clearProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY);
- System.clearProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY);
- }
-
- @Deprecated // remove with SOLR-8668
- protected static void systemSetPropertySolrTestsMergePolicy(String value) {
- System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICY, value);
- }
-
- @Deprecated // remove with SOLR-8668
- protected static void systemClearPropertySolrTestsMergePolicy() {
- System.clearProperty(SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICY);
- }
-
protected static void systemSetPropertySolrTestsMergePolicyFactory(String value) {
System.setProperty(SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICYFACTORY, value);
}
[50/50] [abbrv] lucene-solr:feature/autoscaling: Completing merge
from master
Posted by sh...@apache.org.
Completing merge from master
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/d158f694
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d158f694
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d158f694
Branch: refs/heads/feature/autoscaling
Commit: d158f694b7961f974842a8be84f1cb839b4b6c8b
Parents: d3b5adf
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Wed Jun 7 19:11:53 2017 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Wed Jun 7 19:11:53 2017 +0530
----------------------------------------------------------------------
solr/core/src/java/org/apache/solr/cloud/ZkController.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d158f694/solr/core/src/java/org/apache/solr/cloud/ZkController.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index de41871..8fa3d1b 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -56,6 +56,7 @@ import org.apache.solr.cloud.overseer.SliceMutator;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.cloud.*;
+import org.apache.solr.common.cloud.Replica.Type;
import org.apache.solr.common.params.CollectionParams;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.SolrParams;
[05/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-9735:
validation for specific tags
Posted by sh...@apache.org.
SOLR-9735: validation for specific tags
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/e2ae9992
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/e2ae9992
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/e2ae9992
Branch: refs/heads/feature/autoscaling
Commit: e2ae9992c5fdb3e729c987467ab6e121021f3319
Parents: b530c13
Author: Noble Paul <no...@apache.org>
Authored: Fri Jun 2 18:02:21 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Fri Jun 2 18:02:21 2017 +0930
----------------------------------------------------------------------
.../apache/solr/cloud/autoscaling/Clause.java | 79 ++++++++++++++++++++
.../solr/cloud/autoscaling/TestPolicy.java | 51 +++++++++++++
2 files changed, 130 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e2ae9992/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
index 86839f8..bf0ebfb 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Clause.java
@@ -20,6 +20,7 @@ package org.apache.solr.cloud.autoscaling;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -31,10 +32,12 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.solr.cloud.autoscaling.Policy.ReplicaInfo;
import org.apache.solr.common.MapWriter;
+import org.apache.solr.common.cloud.rule.ImplicitSnitch;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.Utils;
import static java.util.Collections.singletonMap;
+import static java.util.Collections.unmodifiableSet;
import static org.apache.solr.cloud.autoscaling.Clause.TestStatus.PASS;
import static org.apache.solr.cloud.autoscaling.Operand.EQUAL;
import static org.apache.solr.cloud.autoscaling.Operand.GREATER_THAN;
@@ -337,4 +340,80 @@ public class Clause implements MapWriter, Comparable<Clause> {
}
private static final Set<String> IGNORE_TAGS = new HashSet<>(Arrays.asList(REPLICA, COLLECTION, SHARD, "strict"));
+
+ static class ValidateInfo {
+ final Class type;
+ final Set<String> vals;
+ final Long min;
+ final Long max;
+
+
+ ValidateInfo(Class type, Set<String> vals, Long min, Long max) {
+ this.type = type;
+ this.vals = vals;
+ this.min = min;
+ this.max = max;
+ }
+ }
+
+
+ public static Object validate(String name, Object val) {
+ if (val == null) return null;
+ ValidateInfo info = validatetypes.get(name);
+ if (info == null && name.startsWith(ImplicitSnitch.SYSPROP)) info = validatetypes.get(null);
+ if (info == null) throw new RuntimeException("Unknown type :" + name);
+ if (info.type == Long.class) {
+ Long num = parseNumber(name, val);
+ if (info.min != null)
+ if (num < info.min) throw new RuntimeException(name + ": " + val + " must be greater than " + info.min);
+ if (info.max != null)
+ if (num > info.max) throw new RuntimeException(name + ": " + val + " must be less than " + info.max);
+ return num;
+ } else if (info.type == String.class) {
+ if (info.vals != null && !info.vals.contains(val))
+ throw new RuntimeException(name + ": " + val + " must be one of " + StrUtils.join(info.vals, ','));
+ return val;
+ } else {
+ throw new RuntimeException("Invalid type ");
+ }
+
+ }
+
+ public static Long parseNumber(String name, Object val) {
+ if (val == null) return null;
+ Number num = 0;
+ if (val instanceof String) {
+ try {
+ num = Long.parseLong((String) val);
+ } catch (NumberFormatException e) {
+ try {
+ num = Double.parseDouble((String) val);
+ } catch (NumberFormatException e1) {
+ throw new RuntimeException(name + ": " + val + "not a valid number", e);
+ }
+ }
+
+ } else if (val instanceof Number) {
+ num = (Number) val;
+ }
+ return num.longValue();
+ }
+
+ private static final Map<String, ValidateInfo> validatetypes = new HashMap();
+
+ static {
+ validatetypes.put("collection", new ValidateInfo(String.class, null, null, null));
+ validatetypes.put("shard", new ValidateInfo(String.class, null, null, null));
+ validatetypes.put("replica", new ValidateInfo(Long.class, null, 0l, null));
+ validatetypes.put(ImplicitSnitch.PORT, new ValidateInfo(Long.class, null, 1024l, 65535l));
+ validatetypes.put(ImplicitSnitch.DISK, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
+ validatetypes.put(ImplicitSnitch.NODEROLE, new ValidateInfo(String.class, unmodifiableSet(new HashSet(Arrays.asList("overseer"))), null, null));
+ validatetypes.put(ImplicitSnitch.CORES, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
+ validatetypes.put(ImplicitSnitch.SYSLOADAVG, new ValidateInfo(Long.class, null, 0l, 100l));
+ validatetypes.put(ImplicitSnitch.HEAPUSAGE, new ValidateInfo(Long.class, null, 0l, Long.MAX_VALUE));
+ validatetypes.put(null, new ValidateInfo(String.class, null, null, null));
+ for (String ip : ImplicitSnitch.IP_SNITCHES) validatetypes.put(ip, new ValidateInfo(Long.class, null, 0l, 255l));
+
+
+ }
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e2ae9992/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
index 7ec9262..08e1e1b 100644
--- a/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
+++ b/solr/solrj/src/test/org/apache/solr/cloud/autoscaling/TestPolicy.java
@@ -110,6 +110,57 @@ public class TestPolicy extends SolrTestCaseJ4 {
return result;
}
+ public void testValidate() {
+ expectError("replica", -1, "must be greater than" );
+ expectError("replica","hello", "not a valid number" );
+ assertEquals( 1l, Clause.validate("replica", "1"));
+ assertEquals("c", Clause.validate("collection", "c"));
+ assertEquals( "s", Clause.validate("shard", "s"));
+ assertEquals( "overseer", Clause.validate("nodeRole", "overseer"));
+
+ expectError("nodeRole", "wrong","must be one of");
+
+ expectError("sysLoadAvg", "101","must be less than ");
+ expectError("sysLoadAvg", 101,"must be less than ");
+ expectError("sysLoadAvg", "-1","must be greater than");
+ expectError("sysLoadAvg", -1,"must be greater than");
+
+ assertEquals(12l,Clause.validate("sysLoadAvg", "12.46"));
+ assertEquals(12l,Clause.validate("sysLoadAvg", 12.46d));
+
+
+ expectError("ip_1", "300","must be less than ");
+ expectError("ip_1", 300,"must be less than ");
+ expectError("ip_1", "-1","must be greater than");
+ expectError("ip_1", -1,"must be greater than");
+
+ assertEquals(1l,Clause.validate("ip_1", "1"));
+
+ expectError("heapUsage", "-1","must be greater than");
+ expectError("heapUsage", -1,"must be greater than");
+ assertEquals(69l,Clause.validate("heapUsage", "69.9"));
+ assertEquals(69l,Clause.validate("heapUsage", 69.9d));
+
+ expectError("port", "70000","must be less than ");
+ expectError("port", 70000,"must be less than ");
+ expectError("port", "1000","must be greater than");
+ expectError("port", 1000,"must be greater than");
+
+ expectError("cores", "-1","must be greater than");
+
+
+ }
+
+ private static void expectError(String name, Object val, String msg){
+ try {
+ Clause.validate(name, val);
+ fail("expected exception containing "+msg);
+ } catch (Exception e) {
+ assertTrue("expected exception containing "+msg,e.getMessage().contains(msg));
+ }
+
+ }
+
public void testOperands() {
Clause c = new Clause((Map<String, Object>) Utils.fromJSONString("{replica:'<2', node:'#ANY'}"));
assertFalse(c.replica.isPass(3));
[44/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10278: only
long and double are used
Posted by sh...@apache.org.
SOLR-10278: only long and double are used
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/bd2203df
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/bd2203df
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/bd2203df
Branch: refs/heads/feature/autoscaling
Commit: bd2203df93b528b1eb4a5b0829ee9c052ffeda06
Parents: 790fb19
Author: Noble Paul <no...@apache.org>
Authored: Tue Jun 6 16:06:44 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Tue Jun 6 16:06:44 2017 +0930
----------------------------------------------------------------------
.../java/org/apache/solr/cloud/autoscaling/Preference.java | 4 +---
.../src/java/org/apache/solr/cloud/autoscaling/Row.java | 9 +++++----
2 files changed, 6 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/bd2203df/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java
index 60a6756..0566d25 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Preference.java
@@ -56,9 +56,7 @@ class Preference implements MapWriter {
Object o1 = useApprox ? r1.cells[idx].approxVal : r1.cells[idx].val;
Object o2 = useApprox ? r2.cells[idx].approxVal : r2.cells[idx].val;
int result = 0;
- if (o1 instanceof Integer && o2 instanceof Integer) result = ((Integer) o1).compareTo((Integer) o2);
- else if (o1 instanceof Long && o2 instanceof Long) result = ((Long) o1).compareTo((Long) o2);
- else if (o1 instanceof Float && o2 instanceof Float) result = ((Float) o1).compareTo((Float) o2);
+ if (o1 instanceof Long && o2 instanceof Long) result = ((Long) o1).compareTo((Long) o2);
else if (o1 instanceof Double && o2 instanceof Double) result = ((Double) o1).compareTo((Double) o2);
else if (!o1.getClass().getName().equals(o2.getClass().getName())) {
throw new RuntimeException("Unable to compare " + o1 + " of type: " + o1.getClass().getName() + " from " + r1.cells[idx].toString() + " and " + o2 + " of type: " + o2.getClass().getName() + " from " + r2.cells[idx].toString());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/bd2203df/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
index 463d434..f7ab5ca 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Row.java
@@ -91,10 +91,8 @@ class Row implements MapWriter {
// this adds a replica to the replica info
Row addReplica(String coll, String shard) {
Row row = copy();
- Map<String, List<ReplicaInfo>> c = row.collectionVsShardVsReplicas.get(coll);
- if (c == null) row.collectionVsShardVsReplicas.put(coll, c = new HashMap<>());
- List<ReplicaInfo> replicas = c.get(shard);
- if (replicas == null) c.put(shard, replicas = new ArrayList<>());
+ Map<String, List<ReplicaInfo>> c = row.collectionVsShardVsReplicas.computeIfAbsent(coll, k -> new HashMap<>());
+ List<ReplicaInfo> replicas = c.computeIfAbsent(shard, k -> new ArrayList<>());
replicas.add(new ReplicaInfo("" + new Random().nextInt(1000) + 1000, coll, shard, new HashMap<>()));
for (Cell cell : row.cells) {
if (cell.name.equals("cores")) cell.val = ((Number) cell.val).longValue() + 1;
@@ -109,6 +107,9 @@ class Row implements MapWriter {
if (c == null) return null;
List<ReplicaInfo> s = c.get(shard);
if (s == null || s.isEmpty()) return null;
+ for (Cell cell : row.cells) {
+ if (cell.name.equals("cores")) cell.val = ((Number) cell.val).longValue() -1;
+ }
return new Pair(row, s.remove(0));
}
[13/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10446,
SOLR-6736: Ref guide documentation
Posted by sh...@apache.org.
SOLR-10446, SOLR-6736: Ref guide documentation
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2eb324f9
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2eb324f9
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2eb324f9
Branch: refs/heads/feature/autoscaling
Commit: 2eb324f9bae1553c9c68c4a740a4f865b0ec6da5
Parents: c64f9d6
Author: Ishan Chattopadhyaya <is...@apache.org>
Authored: Fri Jun 2 20:55:05 2017 +0530
Committer: Ishan Chattopadhyaya <is...@apache.org>
Committed: Fri Jun 2 20:56:15 2017 +0530
----------------------------------------------------------------------
solr/solr-ref-guide/src/configsets-api.adoc | 46 ++++++++++++++++++++++++
solr/solr-ref-guide/src/using-solrj.adoc | 4 +++
2 files changed, 50 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2eb324f9/solr/solr-ref-guide/src/configsets-api.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/configsets-api.adoc b/solr/solr-ref-guide/src/configsets-api.adoc
index 1bf76f7..2270eb6 100644
--- a/solr/solr-ref-guide/src/configsets-api.adoc
+++ b/solr/solr-ref-guide/src/configsets-api.adoc
@@ -32,6 +32,7 @@ The base URL for all API calls is `\http://<hostname>:<port>/solr`.
* `/admin/configs?action=CREATE`: <<ConfigSetsAPI-create,create>> a ConfigSet, based on an existing ConfigSet
* `/admin/configs?action=DELETE`: <<ConfigSetsAPI-delete,delete>> a ConfigSet
* `/admin/configs?action=LIST`: <<ConfigSetsAPI-list,list>> all ConfigSets
+* `/admin/configs?action=UPLOAD`: <<ConfigSetsAPI-upload,upload>> a ConfigSet
[[ConfigSetsAPI-createCreateaConfigSet]]
@@ -169,3 +170,48 @@ http://localhost:8983/solr/admin/configs?action=LIST&wt=json
"configSets":["myConfigSet1",
"myConfig2"]}
----
+
+[[ConfigSetsAPI-uploadCreateaConfigSet]]
+
+[[ConfigSetsAPI-upload]]
+== Upload a ConfigSet
+
+`/admin/configs?action=UPLOAD&name=_name_`
+
+Upload a ConfigSet, sent in as a zipped file. Please note that a ConfigSet is uploaded in a "trusted" mode if authentication is enabled and this upload operation is performed as an authenticated request. Without authentication, a ConfigSet is uploaded in an "untrusted" mode. Upon creation of a collection using an "untrusted" ConfigSet, the following functionality would not work:
+
+ * RunExecutableListener does not initialize, if specified in the ConfigSet.
+ * DataImportHandler's ScriptTransformer does not initialize, if specified in the ConfigSet.
+ * XSLT transformer (tr parameter) cannot be used at request processing time.
+ * StatelessScriptUpdateProcessor does not initialize, if specified in the ConfigSet.
+
+[[ConfigSetsAPI-Input]]
+=== Input
+
+// TODO: Change column width to %autowidth.spread when https://github.com/asciidoctor/asciidoctor-pdf/issues/599 is fixed
+
+[cols="20,15,10,15,40",options="header"]
+|===
+|Key |Type |Required |Default |Description
+|name |String |Yes | |ConfigSet to be created
+|===
+
+The body of the request should contain a zipped config set.
+
+[[ConfigSetsAPI-Output]]
+=== Output
+
+*Output Content*
+
+The output will include the status of the request. If the status is anything other than "success", an error message will explain why the request failed.
+
+[[ConfigSetsAPI-Examples]]
+=== Examples
+
+Create a ConfigSet named 'myConfigSet' based on a 'predefinedTemplate' ConfigSet, overriding the immutable property to false.
+
+[source,text]
+----
+curl -X POST -d @myconfigset.zip http://localhost:8983/solr/admin/configs?action=CREATE&name=myConfigSet --header "Content-Type:text/xml"
+----
+
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2eb324f9/solr/solr-ref-guide/src/using-solrj.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/using-solrj.adoc b/solr/solr-ref-guide/src/using-solrj.adoc
index 7850776..fb92bd9 100644
--- a/solr/solr-ref-guide/src/using-solrj.adoc
+++ b/solr/solr-ref-guide/src/using-solrj.adoc
@@ -35,8 +35,12 @@ SolrClient solr = new HttpSolrClient.Builder(urlString).build();
.SolrCloud client
[source,java]
----
+// Using a ZK Host String
String zkHostString = "zkServerA:2181,zkServerB:2181,zkServerC:2181/solr";
SolrClient solr = new CloudSolrClient.Builder().withZkHost(zkHostString).build();
+
+// Using already running Solr nodes
+SolrClient solr = new CloudSolrClient.Builder().withSolrUrl("http://localhost:8983/solr").build();
----
Once you have a `SolrClient`, you can use it by calling methods like `query()`, `add()`, and `commit()`.
[45/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10782: Skip
asserting that sysLoadAvg is positive on windows as this metrics is not
available on that platform
Posted by sh...@apache.org.
SOLR-10782: Skip asserting that sysLoadAvg is positive on windows as this metrics is not available on that platform
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/ea79c668
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/ea79c668
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/ea79c668
Branch: refs/heads/feature/autoscaling
Commit: ea79c668c7e0b4d6d64d5cc32db99f17ac4f1936
Parents: bd2203d
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Tue Jun 6 16:31:43 2017 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Tue Jun 6 16:31:43 2017 +0530
----------------------------------------------------------------------
.../org/apache/solr/cloud/autoscaling/TestPolicyCloud.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ea79c668/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
index ddb9d11..b584e49 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/TestPolicyCloud.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import org.apache.lucene.util.Constants;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
@@ -169,7 +170,10 @@ public class TestPolicyCloud extends SolrCloudTestCase {
assertTrue(((Number) val.get("cores")).intValue() > 0);
assertTrue("freedisk value is " + ((Number) val.get("freedisk")).doubleValue(), Double.compare(((Number) val.get("freedisk")).doubleValue(), 0.0d) > 0);
assertTrue("heapUsage value is " + ((Number) val.get("heapUsage")).doubleValue(), Double.compare(((Number) val.get("heapUsage")).doubleValue(), 0.0d) > 0);
- assertTrue("sysLoadAvg value is " + ((Number) val.get("sysLoadAvg")).doubleValue(), Double.compare(((Number) val.get("sysLoadAvg")).doubleValue(), 0.0d) > 0);
+ if (!Constants.WINDOWS) {
+ // the system load average metrics is not available on windows platform
+ assertTrue("sysLoadAvg value is " + ((Number) val.get("sysLoadAvg")).doubleValue(), Double.compare(((Number) val.get("sysLoadAvg")).doubleValue(), 0.0d) > 0);
+ }
String overseerNode = OverseerTaskProcessor.getLeaderNode(cluster.getZkClient());
cluster.getSolrClient().request(CollectionAdminRequest.addRole(overseerNode, "overseer"));
for (int i = 0; i < 10; i++) {
[19/50] [abbrv] lucene-solr:feature/autoscaling: Ref Guide: fix
duplicate anchors for internal links
Posted by sh...@apache.org.
Ref Guide: fix duplicate anchors for internal links
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/07bcd4df
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/07bcd4df
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/07bcd4df
Branch: refs/heads/feature/autoscaling
Commit: 07bcd4df1f70fd0ce41e1aed7a94aa72a1bbf656
Parents: 038baae
Author: Cassandra Targett <ct...@apache.org>
Authored: Fri Jun 2 14:37:00 2017 -0500
Committer: Cassandra Targett <ct...@apache.org>
Committed: Fri Jun 2 14:52:02 2017 -0500
----------------------------------------------------------------------
solr/solr-ref-guide/src/collections-api.adoc | 4 ++--
solr/solr-ref-guide/src/configsets-api.adoc | 11 +++--------
2 files changed, 5 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/07bcd4df/solr/solr-ref-guide/src/collections-api.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/collections-api.adoc b/solr/solr-ref-guide/src/collections-api.adoc
index 35300a3..25df02f 100644
--- a/solr/solr-ref-guide/src/collections-api.adoc
+++ b/solr/solr-ref-guide/src/collections-api.adoc
@@ -541,12 +541,12 @@ http://localhost:8983/solr/admin/collections?action=DELETEALIAS&name=testalias
`/admin/collections?action=LISTALIASES`
-[[CollectionsAPI-Output.6]]
+[[CollectionsAPI-Output.27]]
=== Output
The output will contain a list of aliases with the corresponding collection names.
-[[CollectionsAPI-Examples.6]]
+[[CollectionsAPI-Examples.27]]
=== Examples
*Output*
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/07bcd4df/solr/solr-ref-guide/src/configsets-api.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/configsets-api.adoc b/solr/solr-ref-guide/src/configsets-api.adoc
index 2270eb6..dcc3c33 100644
--- a/solr/solr-ref-guide/src/configsets-api.adoc
+++ b/solr/solr-ref-guide/src/configsets-api.adoc
@@ -140,8 +140,6 @@ http://localhost:8983/solr/admin/configs?action=DELETE&name=myConfigSet
</response>
----
-[[ConfigSetsAPI-listListConfigSets]]
-
[[ConfigSetsAPI-list]]
== List ConfigSets
@@ -171,8 +169,6 @@ http://localhost:8983/solr/admin/configs?action=LIST&wt=json
"myConfig2"]}
----
-[[ConfigSetsAPI-uploadCreateaConfigSet]]
-
[[ConfigSetsAPI-upload]]
== Upload a ConfigSet
@@ -185,7 +181,7 @@ Upload a ConfigSet, sent in as a zipped file. Please note that a ConfigSet is up
* XSLT transformer (tr parameter) cannot be used at request processing time.
* StatelessScriptUpdateProcessor does not initialize, if specified in the ConfigSet.
-[[ConfigSetsAPI-Input]]
+[[ConfigSetsAPI-Input.3]]
=== Input
// TODO: Change column width to %autowidth.spread when https://github.com/asciidoctor/asciidoctor-pdf/issues/599 is fixed
@@ -198,14 +194,14 @@ Upload a ConfigSet, sent in as a zipped file. Please note that a ConfigSet is up
The body of the request should contain a zipped config set.
-[[ConfigSetsAPI-Output]]
+[[ConfigSetsAPI-Output.3]]
=== Output
*Output Content*
The output will include the status of the request. If the status is anything other than "success", an error message will explain why the request failed.
-[[ConfigSetsAPI-Examples]]
+[[ConfigSetsAPI-Examples.3]]
=== Examples
Create a ConfigSet named 'myConfigSet' based on a 'predefinedTemplate' ConfigSet, overriding the immutable property to false.
@@ -214,4 +210,3 @@ Create a ConfigSet named 'myConfigSet' based on a 'predefinedTemplate' ConfigSet
----
curl -X POST -d @myconfigset.zip http://localhost:8983/solr/admin/configs?action=CREATE&name=myConfigSet --header "Content-Type:text/xml"
----
-
[22/50] [abbrv] lucene-solr:feature/autoscaling: LUCENE-7705: Allow
CharTokenizer-derived tokenizers and KeywordTokenizer to configure the max
token len (test fix)
Posted by sh...@apache.org.
LUCENE-7705: Allow CharTokenizer-derived tokenizers and KeywordTokenizer to configure the max token len (test fix)
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/15a8a241
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/15a8a241
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/15a8a241
Branch: refs/heads/feature/autoscaling
Commit: 15a8a2415280d50c982fcd4fca893a3c3224da14
Parents: 393a2ed
Author: Erick <er...@apache.org>
Authored: Fri Jun 2 14:11:11 2017 -0700
Committer: Erick <er...@apache.org>
Committed: Fri Jun 2 14:11:11 2017 -0700
----------------------------------------------------------------------
.../collection1/conf/schema-tokenizer-test.xml | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/15a8a241/solr/core/src/test-files/solr/collection1/conf/schema-tokenizer-test.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema-tokenizer-test.xml b/solr/core/src/test-files/solr/collection1/conf/schema-tokenizer-test.xml
index f3d3196..af28016 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema-tokenizer-test.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema-tokenizer-test.xml
@@ -50,7 +50,7 @@ more concise example.
<!-- Seperate analyzers for index and query time -->
- <fieldType name="letterfieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="letterfieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer type="index">
<tokenizer class="solr.LetterTokenizerFactory" maxTokenLen="3" />
</analyzer>
@@ -59,7 +59,7 @@ more concise example.
</analyzer>
</fieldType>
- <fieldType name="lowerCasefieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="lowerCasefieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory" maxTokenLen="3" />
</analyzer>
@@ -68,7 +68,7 @@ more concise example.
</analyzer>
</fieldType>
- <fieldType name="whiteSpfieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="whiteSpfieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" maxTokenLen="3" />
</analyzer>
@@ -77,7 +77,7 @@ more concise example.
</analyzer>
</fieldType>
- <fieldType name="uniWhiteSpfieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="uniWhiteSpfieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" maxTokenLen="3" />
</analyzer>
@@ -86,7 +86,7 @@ more concise example.
</analyzer>
</fieldType>
- <fieldType name="keywordfieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="keywordfieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer index="index">
<tokenizer class="solr.KeywordTokenizerFactory" maxTokenLen="3" />
</analyzer>
@@ -97,31 +97,31 @@ more concise example.
<!-- Same analyzers for both index and query time -->
- <fieldType name="letter0fieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="letter0fieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer>
<tokenizer class="solr.LetterTokenizerFactory" maxTokenLen="3" />
</analyzer>
</fieldType>
- <fieldType name="lowerCase0fieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="lowerCase0fieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer>
<tokenizer class="solr.LowerCaseTokenizerFactory" maxTokenLen="3" />
</analyzer>
</fieldType>
- <fieldType name="whiteSp0fieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="whiteSp0fieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory" maxTokenLen="3" />
</analyzer>
</fieldType>
- <fieldType name="uniWhiteSp0fieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="uniWhiteSp0fieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory" maxTokenLen="3" />
</analyzer>
</fieldType>
- <fieldType name="keyword0fieldType" class="solr.TextField" positionIncrementGap="100">
+ <fieldType name="keyword0fieldType" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory" maxTokenLen="3" />
</analyzer>
[08/50] [abbrv] lucene-solr:feature/autoscaling: LUCENE-7858:
checkJavadocLinks.py to mention common root causes of broken links
Posted by sh...@apache.org.
LUCENE-7858: checkJavadocLinks.py to mention common root causes of broken links
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/445ceda0
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/445ceda0
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/445ceda0
Branch: refs/heads/feature/autoscaling
Commit: 445ceda01cb5355d4a21a095a19fe1af2b28959e
Parents: cccf97c
Author: Christine Poerschke <cp...@apache.org>
Authored: Fri Jun 2 10:40:53 2017 +0100
Committer: Christine Poerschke <cp...@apache.org>
Committed: Fri Jun 2 10:40:53 2017 +0100
----------------------------------------------------------------------
dev-tools/scripts/checkJavadocLinks.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/445ceda0/dev-tools/scripts/checkJavadocLinks.py
----------------------------------------------------------------------
diff --git a/dev-tools/scripts/checkJavadocLinks.py b/dev-tools/scripts/checkJavadocLinks.py
index e5ff2f3..2e3cdea 100644
--- a/dev-tools/scripts/checkJavadocLinks.py
+++ b/dev-tools/scripts/checkJavadocLinks.py
@@ -266,7 +266,10 @@ def checkAll(dirName):
if __name__ == '__main__':
if checkAll(sys.argv[1]):
print()
- print('Broken javadocs links were found!')
+ print('Broken javadocs links were found! Common root causes:')
+ # please feel free to add to this list
+ print('* A typo of some sort for manually created links.')
+ print('* Public methods referencing non-public classes in their signature.')
sys.exit(1)
sys.exit(0)
[48/50] [abbrv] lucene-solr:feature/autoscaling: Completing merge
from master
Posted by sh...@apache.org.
Completing merge from master
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2d540259
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2d540259
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2d540259
Branch: refs/heads/feature/autoscaling
Commit: 2d540259dc4455850ee4814f8bc2784949272298
Parents: 6a8768e
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Tue Jun 6 19:32:03 2017 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Tue Jun 6 19:32:03 2017 +0530
----------------------------------------------------------------------
.../org/apache/solr/cloud/ZkController.java | 4 +-
.../cloud/autoscaling/AutoScalingHandler.java | 2 +
.../apache/solr/metrics/SolrMetricReporter.java | 11 ----
.../org/apache/solr/cloud/ShardSplitTest.java | 7 ---
.../autoscaling/AutoScalingHandlerTest.java | 34 +++++------
.../org/apache/solr/cloud/autoscaling/Cell.java | 60 ++++++++++++++++++--
.../apache/solr/common/cloud/ZkStateReader.java | 2 +
.../solr/common/params/CollectionParams.java | 1 -
.../apache/solr/util/ReadOnlyCoresLocator.java | 6 --
9 files changed, 79 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d540259/solr/core/src/java/org/apache/solr/cloud/ZkController.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index b859599..086c150 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -665,6 +665,8 @@ public class ZkController {
cmdExecutor.ensureExists(ZkStateReader.LIVE_NODES_ZKNODE, zkClient);
cmdExecutor.ensureExists(ZkStateReader.COLLECTIONS_ZKNODE, zkClient);
cmdExecutor.ensureExists(ZkStateReader.ALIASES, zkClient);
+ cmdExecutor.ensureExists(ZkStateReader.SOLR_AUTOSCALING_EVENTS_PATH, zkClient);
+ cmdExecutor.ensureExists(ZkStateReader.SOLR_AUTOSCALING_TRIGGER_STATE_PATH, zkClient);
byte[] emptyJson = "{}".getBytes(StandardCharsets.UTF_8);
cmdExecutor.ensureExists(ZkStateReader.CLUSTER_STATE, emptyJson, CreateMode.PERSISTENT, zkClient);
cmdExecutor.ensureExists(ZkStateReader.SOLR_SECURITY_CONF_PATH, emptyJson, CreateMode.PERSISTENT, zkClient);
@@ -1842,7 +1844,7 @@ public class ZkController {
}
}
- CoreContainer getCoreContainer() {
+ public CoreContainer getCoreContainer() {
return cc;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d540259/solr/core/src/java/org/apache/solr/cloud/autoscaling/AutoScalingHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/AutoScalingHandler.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/AutoScalingHandler.java
index ff101f3..f1effd3 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/AutoScalingHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/AutoScalingHandler.java
@@ -24,7 +24,9 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d540259/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java b/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java
index 78931a2..222377b 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricReporter.java
@@ -86,17 +86,6 @@ public abstract class SolrMetricReporter implements Closeable, PluginInfoInitial
}
/**
- * Enable reporting, defaults to true. Implementations should check this flag in
- * {@link #validate()} and accordingly enable or disable reporting.
- * @param enabled enable, defaults to true when null or not set.
- */
- public void setEnabled(Boolean enabled) {
- if (enabled != null) {
- this.enabled = enabled;
- }
- }
-
- /**
* Get the effective {@link PluginInfo} instance that was used for
* initialization of this plugin.
* @return plugin info, or null if not yet initialized.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d540259/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 4de011b..e23a8bf 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ShardSplitTest.java
@@ -86,12 +86,6 @@ public class ShardSplitTest extends BasicDistributedZkTest {
useFactory(null);
}
- //TODO for now, onlyLeaderIndexes do not work with ShardSplitTest
- @Override
- protected int getRealtimeReplicas() {
- return -1;
- }
-
@Test
public void test() throws Exception {
@@ -1031,4 +1025,3 @@ public class ShardSplitTest extends BasicDistributedZkTest {
return client;
}
}
-
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d540259/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
index 2f02df9..25e42eb 100644
--- a/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/autoscaling/AutoScalingHandlerTest.java
@@ -76,11 +76,11 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"\t}\n" +
"}";
// these should be no-ops because there are no triggers, and it should succeed
- SolrRequest req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, suspendEachCommand);
+ SolrRequest req = createAutoScalingRequest(SolrRequest.METHOD.POST, suspendEachCommand);
NamedList<Object> response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
assertEquals(response.get("changed").toString(), "[]");
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, resumeEachCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, resumeEachCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
assertEquals(response.get("changed").toString(), "[]");
@@ -91,7 +91,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'event' : 'nodeLost'," +
"'waitFor' : '10m'," +
"'enabled' : true}}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, setTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, setTriggerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
@@ -103,7 +103,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'enabled' : true" +
"}" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, setTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, setTriggerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
@@ -112,7 +112,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"\t\t\"name\" : \"node_lost_trigger\"\n" +
"\t}\n" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, suspendTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, suspendTriggerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
assertEquals(response.get("changed").toString(), "[node_lost_trigger]");
@@ -136,7 +136,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'name' : '" + Policy.EACH + "'" +
"}" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, suspendTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, suspendTriggerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
List<String> changed = (List<String>)response.get("changed");
@@ -159,7 +159,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'name' : 'node_added_trigger'" +
"}" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, resumeTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, resumeTriggerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
changed = (List<String>)response.get("changed");
@@ -182,7 +182,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'name' : '" + Policy.EACH + "'" +
"}" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, resumeTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, resumeTriggerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
changed = (List<String>)response.get("changed");
@@ -206,7 +206,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'timeout' : '1h'" +
"}" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, suspendTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, suspendTriggerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
changed = (List<String>)response.get("changed");
@@ -242,7 +242,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'class' : 'solr.LogPlanAction'," +
"'collection' : '.system'" +
"}]}}";
- SolrRequest req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, setTriggerCommand);
+ SolrRequest req = createAutoScalingRequest(SolrRequest.METHOD.POST, setTriggerCommand);
NamedList<Object> response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
@@ -267,7 +267,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'waitFor' : '20m'," +
"'enabled' : false" +
"}}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, setTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, setTriggerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
data = zkClient().getData(SOLR_AUTOSCALING_CONF_PATH, null, null, true);
@@ -295,7 +295,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'url' : 'http://xyz.com/on_node_lost?node={$LOST_NODE_NAME}'" +
"}" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, setListenerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, setListenerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
data = zkClient().getData(SOLR_AUTOSCALING_CONF_PATH, null, null, true);
@@ -313,7 +313,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'name' : 'node_lost_trigger'" +
"}" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, removeTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, removeTriggerCommand);
try {
response = solrClient.request(req);
fail("Trying to remove trigger which has listeners registered should have failed");
@@ -326,7 +326,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"\t\t\"name\" : \"xyz\"\n" +
"\t}\n" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, removeListenerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, removeListenerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
data = zkClient().getData(SOLR_AUTOSCALING_CONF_PATH, null, null, true);
@@ -340,7 +340,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'name' : 'node_lost_trigger'" +
"}" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, removeTriggerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, removeTriggerCommand);
response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
data = zkClient().getData(SOLR_AUTOSCALING_CONF_PATH, null, null, true);
@@ -359,7 +359,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'url' : 'http://xyz.com/on_node_lost?node={$LOST_NODE_NAME}'" +
"}" +
"}";
- req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, setListenerCommand);
+ req = createAutoScalingRequest(SolrRequest.METHOD.POST, setListenerCommand);
try {
response = solrClient.request(req);
fail("Adding a listener on a non-existent trigger should have failed");
@@ -504,7 +504,7 @@ public class AutoScalingHandlerTest extends SolrCloudTestCase {
"'waitFor' : '0s'," +
"'enabled' : true" +
"}}";
- SolrRequest req = new AutoScalingRequest(SolrRequest.METHOD.POST, path, setTriggerCommand);
+ SolrRequest req = createAutoScalingRequest(SolrRequest.METHOD.POST, setTriggerCommand);
NamedList<Object> response = solrClient.request(req);
assertEquals(response.get("result").toString(), "success");
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d540259/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Cell.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Cell.java b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Cell.java
index d1a3626..3590f52 100644
--- a/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Cell.java
+++ b/solr/solrj/src/java/org/apache/solr/cloud/autoscaling/Cell.java
@@ -1,7 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package org.apache.solr.cloud.autoscaling;
-/**
- * Created by shalin on 6/6/17.
- */
-public class Cell {
-}
+import java.io.IOException;
+import java.util.HashMap;
+
+import org.apache.solr.common.MapWriter;
+import org.apache.solr.common.util.Utils;
+
+class Cell implements MapWriter {
+ final int index;
+ final String name;
+ Object val, approxVal;
+
+ Cell(int index, String name, Object val) {
+ this.index = index;
+ this.name = name;
+ this.val = val;
+ }
+
+ Cell(int index, String name, Object val, Object approxVal) {
+ this.index = index;
+ this.name = name;
+ this.val = val;
+ this.approxVal = approxVal;
+ }
+
+ @Override
+ public void writeMap(EntryWriter ew) throws IOException {
+ ew.put(name, val);
+ }
+
+ @Override
+ public String toString() {
+ return Utils.toJSONString(this.toMap(new HashMap<>()));
+ }
+
+ public Cell copy() {
+ return new Cell(index, name, val, approxVal);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d540259/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
index 1b03534..c1bfd87 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
@@ -94,6 +94,8 @@ public class ZkStateReader implements Closeable {
public static final String REJOIN_AT_HEAD_PROP = "rejoinAtHead";
public static final String SOLR_SECURITY_CONF_PATH = "/security.json";
public static final String SOLR_AUTOSCALING_CONF_PATH = "/autoscaling.json";
+ public static final String SOLR_AUTOSCALING_EVENTS_PATH = "/autoscaling/events";
+ public static final String SOLR_AUTOSCALING_TRIGGER_STATE_PATH = "/autoscaling/triggerState";
public static final String REPLICATION_FACTOR = "replicationFactor";
public static final String MAX_SHARDS_PER_NODE = "maxShardsPerNode";
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d540259/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java b/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java
index 285edf5..d79fafa 100644
--- a/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java
+++ b/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java
@@ -96,7 +96,6 @@ public interface CollectionParams {
CREATESNAPSHOT(true, LockLevel.COLLECTION),
DELETESNAPSHOT(true, LockLevel.COLLECTION),
LISTSNAPSHOTS(false, LockLevel.NONE),
- MOVEREPLICA(false, LockLevel.SHARD),
//only for testing. it just waits for specified time
// these are not exposed via collection API commands
// but the overseer is aware of these tasks
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2d540259/solr/test-framework/src/java/org/apache/solr/util/ReadOnlyCoresLocator.java
----------------------------------------------------------------------
diff --git a/solr/test-framework/src/java/org/apache/solr/util/ReadOnlyCoresLocator.java b/solr/test-framework/src/java/org/apache/solr/util/ReadOnlyCoresLocator.java
index 3ad3ce2..3d11ff7 100644
--- a/solr/test-framework/src/java/org/apache/solr/util/ReadOnlyCoresLocator.java
+++ b/solr/test-framework/src/java/org/apache/solr/util/ReadOnlyCoresLocator.java
@@ -47,10 +47,4 @@ public abstract class ReadOnlyCoresLocator implements CoresLocator {
// no-op
}
- @Override
- public CoreDescriptor reload(CoreContainer cc, CoreDescriptor cd) {
- return null; // no-op
- }
-
-
}
[40/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10651: Update
CHANGES.txt for completed subtasks
Posted by sh...@apache.org.
SOLR-10651: Update CHANGES.txt for completed subtasks
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4f55b43d
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4f55b43d
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4f55b43d
Branch: refs/heads/feature/autoscaling
Commit: 4f55b43daa8e21fcd44d50d3e7e0932767db82e3
Parents: 7646f91
Author: Joel Bernstein <jb...@apache.org>
Authored: Mon Jun 5 20:02:46 2017 -0400
Committer: Joel Bernstein <jb...@apache.org>
Committed: Mon Jun 5 20:02:46 2017 -0400
----------------------------------------------------------------------
solr/CHANGES.txt | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4f55b43d/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index df071eb..b0da3b8 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -278,6 +278,44 @@ New Features
* SOLR-3702: concat(...) function query (Andrey Kudryavtsev via Mikhail Khludnev)
+* SOLR-10767: Add movingAvg Stream Evaluator (Joel Bernstein)
+
+* SOLR-10813: Add arraySort Stream Evaluator (Joel Bernstein)
+
+* SOLR-10696: Add cumulative probability function (Joel Bernstein)
+
+* SOLR-10765: Add anova Stream Evaluator (Joel Bernstein)
+
+* SOLR-10754: Add hist Stream Evaluator (Joel Bernstein)
+
+* SOLR-10753: Add array Stream Evaluator (Joel Bernstein)
+
+* SOLR-10747: Allow /stream handler to execute Stream Evaluators directly (Joel Bernstein)
+
+* SOLR-10743: Add sequence StreamEvaluator (Joel Bernstein)
+
+* SOLR-10684: Add finddelay Stream Evaluator (Joel Bernstein)
+
+* SOLR-10731: Add knn Streaming Expression (Joel Bernstein)
+
+* SOLR-10724: Add describe Stream Evaluator (Joel Bernstein)
+
+* SOLR-10693: Add copyOfRange Stream Evaluator (Joel Bernstein)
+
+* SOLR-10623: Add sql Streaming Expression (Joel Bernstein)
+
+* SOLR-10661: Add copyOf Stream Evaluator (Joel Bernstein)
+
+* SOLR-10663: Add distance Stream Evaluator (Joel Bernstein)
+
+* SOLR-10664: Add scale Stream Evaluator (Joel Bernstein)
+
+* SOLR-10666: Add rank transformation Stream Evaluator (Joel Bernstein)
+
+* SOLR-10662: Add length Stream Evaluator (Joel Bernstein)
+
+* SOLR-10660: Add reverse Stream Evaluator (Joel Bernstein)
+
Bug Fixes
----------------------
* SOLR-10723 JSON Facet API: resize() implemented incorrectly for CountSlotAcc, HllAgg.NumericAcc
[39/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10521:
documenting sort=childfield(field) asc
Posted by sh...@apache.org.
SOLR-10521: documenting sort=childfield(field) asc
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/7646f910
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/7646f910
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/7646f910
Branch: refs/heads/feature/autoscaling
Commit: 7646f91097c54890348b2f9dda9cf4e554c3f77d
Parents: 357f4df
Author: Mikhail Khludnev <mk...@apache.org>
Authored: Tue Jun 6 00:27:15 2017 +0300
Committer: Mikhail Khludnev <mk...@apache.org>
Committed: Tue Jun 6 00:31:10 2017 +0300
----------------------------------------------------------------------
solr/solr-ref-guide/src/function-queries.adoc | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/7646f910/solr/solr-ref-guide/src/function-queries.adoc
----------------------------------------------------------------------
diff --git a/solr/solr-ref-guide/src/function-queries.adoc b/solr/solr-ref-guide/src/function-queries.adoc
index 624406f..7e03ae3 100644
--- a/solr/solr-ref-guide/src/function-queries.adoc
+++ b/solr/solr-ref-guide/src/function-queries.adoc
@@ -86,6 +86,10 @@ The table below summarizes the functions available for function queries.
|===
|Function |Description |Syntax Examples
|abs |Returns the absolute value of the specified value or function. |`abs(x)` `abs(-5)`
+|childfield(field)|Returns the value of the given field for one of the matched child docs when searching by <<other-parsers.adoc#OtherParsers-BlockJoinParentQueryParser,{!parent}>>. It can be used only in `sort` parameter|
+* `sort=childfield(name) asc` implies `$q` as a second argument and therefor it assumes `q={!parent ..}..`;
+* `sort=childfield(field,$bjq) asc` refers to a separate parameter `bjq={!parent ..}..`;
+* `sort=childfield(field,{!parent of=...}...) desc` allows to inline block join parent query
|concat(v,f..)|concatenates the given string fields, literals and other functions |`concat(name," ",$param,def(opt,"-"))`
|"constant" |Specifies a floating point constant. |`1.5`
|def |`def` is short for default. Returns the value of field "field", or if the field does not exist, returns the default value specified. and yields the first value where `exists()==true`.) |`def(rating,5):` This `def()` function returns the rating, or if no rating specified in the doc, returns 5 `def(myfield, 1.0):` equivalent to `if(exists(myfield),myfield,1.0)`
[28/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10744: use the
new flags in json parsing and add tests
Posted by sh...@apache.org.
SOLR-10744: use the new flags in json parsing and add tests
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/1f437fe5
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/1f437fe5
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/1f437fe5
Branch: refs/heads/feature/autoscaling
Commit: 1f437fe5ab8892e102792a30c3621d005a36a024
Parents: 67876b3
Author: Noble Paul <no...@apache.org>
Authored: Mon Jun 5 13:34:07 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Mon Jun 5 13:34:07 2017 +0930
----------------------------------------------------------------------
.../test/org/apache/solr/util/TestUtils.java | 27 +++++++++++++++++++-
.../java/org/apache/solr/common/util/Utils.java | 16 +++++++++---
2 files changed, 39 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1f437fe5/solr/core/src/test/org/apache/solr/util/TestUtils.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/util/TestUtils.java b/solr/core/src/test/org/apache/solr/util/TestUtils.java
index 7b209ea..5c55cd7 100644
--- a/solr/core/src/test/org/apache/solr/util/TestUtils.java
+++ b/solr/core/src/test/org/apache/solr/util/TestUtils.java
@@ -16,6 +16,9 @@
*/
package org.apache.solr.util;
+import java.io.IOException;
+import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
@@ -23,11 +26,14 @@ import java.util.List;
import java.util.Map;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.util.CommandOperation;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.Utils;
import org.junit.Assert;
+import static java.nio.charset.StandardCharsets.UTF_8;
+
/**
*
*/
@@ -154,7 +160,26 @@ public class TestUtils extends SolrTestCaseJ4 {
assertEquals( num, NumberUtils.SortableStr2long(sortable, 0, sortable.length() ) );
assertEquals( Long.toString(num), NumberUtils.SortableStr2long(sortable) );
}
-
+
+ public void testNoggitFlags() throws IOException {
+ String s = "a{b:c, d [{k1:v1}{k2:v2}]}";
+ assertNoggitJsonValues((Map) Utils.fromJSON(s.getBytes(UTF_8)));
+ assertNoggitJsonValues((Map) Utils.fromJSONString(s));
+ List<CommandOperation> commands = CommandOperation.parse(new StringReader(s + s));
+ assertEquals(2, commands.size());
+ for (CommandOperation command : commands) {
+ assertEquals("a", command.name);
+ assertEquals( "v1" ,Utils.getObjectByPath(command.getDataMap(), true, "d[0]/k1"));command.getDataMap();
+ assertEquals( "v2" ,Utils.getObjectByPath(command.getDataMap(), true, "d[1]/k2"));command.getDataMap();
+ }
+ }
+
+ private void assertNoggitJsonValues(Map m) {
+ assertEquals( "c" ,Utils.getObjectByPath(m, true, "/a/b"));
+ assertEquals( "v1" ,Utils.getObjectByPath(m, true, "/a/d[0]/k1"));
+ assertEquals( "v2" ,Utils.getObjectByPath(m, true, "/a/d[1]/k2"));
+ }
+
public void testUtilsJSPath(){
String json = "{\n" +
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1f437fe5/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
index 4cb6b8e..01b7870 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
@@ -19,6 +19,7 @@ package org.apache.solr.common.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.Reader;
import java.io.StringReader;
import java.lang.invoke.MethodHandles;
import java.nio.charset.StandardCharsets;
@@ -104,6 +105,9 @@ public class Utils {
CharArr chars = new CharArr();
ByteUtils.UTF8toUTF16(utf8, 0, utf8.length, chars);
JSONParser parser = new JSONParser(chars.getArray(), chars.getStart(), chars.length());
+ parser.setFlags(parser.getFlags() |
+ JSONParser.ALLOW_MISSING_COLON_COMMA_BEFORE_OBJECT |
+ JSONParser.OPTIONAL_OUTER_BRACES);
try {
return ObjectBuilder.getVal(parser);
} catch (IOException e) {
@@ -124,7 +128,7 @@ public class Utils {
public static Object fromJSON(InputStream is){
try {
- return new ObjectBuilder(new JSONParser(new InputStreamReader(is, StandardCharsets.UTF_8))).getObject();
+ return new ObjectBuilder(getJSONParser((new InputStreamReader(is, StandardCharsets.UTF_8)))).getObject();
} catch (IOException e) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Parse error", e);
}
@@ -135,11 +139,17 @@ public class Utils {
.getContextClassLoader().getResourceAsStream(resourceName));
}
+ public static JSONParser getJSONParser(Reader reader){
+ JSONParser parser = new JSONParser(reader);
+ parser.setFlags(parser.getFlags() |
+ JSONParser.ALLOW_MISSING_COLON_COMMA_BEFORE_OBJECT |
+ JSONParser.OPTIONAL_OUTER_BRACES);
+ return parser;
+ }
public static Object fromJSONString(String json) {
try {
- return new ObjectBuilder(new JSONParser(new StringReader(
- json))).getObject();
+ return new ObjectBuilder(getJSONParser(new StringReader(json))).getObject();
} catch (IOException e) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Parse error", e);
}