You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jb...@apache.org on 2016/05/19 02:50:03 UTC
[1/2] lucene-solr:branch_6x: SOLR-9128: Fix error handling issues in
Streaming classes
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x f4f1d8adc -> 73b71b16d
SOLR-9128: Fix error handling issues in Streaming 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/cb38b142
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/cb38b142
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/cb38b142
Branch: refs/heads/branch_6x
Commit: cb38b142051281ee740ae90c71aff4a7e933f452
Parents: f4f1d8a
Author: jbernste <jb...@apache.org>
Authored: Wed May 18 21:38:34 2016 -0400
Committer: jbernste <jb...@apache.org>
Committed: Wed May 18 22:53:02 2016 -0400
----------------------------------------------------------------------
.../org/apache/solr/handler/GraphHandler.java | 1 +
.../solrj/io/graph/GatherNodesStream.java | 24 +++++++++++-
.../client/solrj/io/stream/CloudSolrStream.java | 29 +++++++++------
.../client/solrj/io/stream/FacetStream.java | 3 ++
.../solrj/io/stream/StreamExpressionTest.java | 39 ++++++++++++++++++++
5 files changed, 82 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cb38b142/solr/core/src/java/org/apache/solr/handler/GraphHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/GraphHandler.java b/solr/core/src/java/org/apache/solr/handler/GraphHandler.java
index a6e2ce1..a203a4f 100644
--- a/solr/core/src/java/org/apache/solr/handler/GraphHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/GraphHandler.java
@@ -113,6 +113,7 @@ public class GraphHandler extends RequestHandlerBase implements SolrCoreAware, P
.withFunctionName("update", UpdateStream.class)
.withFunctionName("jdbc", JDBCStream.class)
.withFunctionName("intersect", IntersectStream.class)
+ .withFunctionName("select", SelectStream.class)
.withFunctionName("complement", ComplementStream.class)
.withFunctionName("daemon", DaemonStream.class)
.withFunctionName("topic", TopicStream.class)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cb38b142/solr/solrj/src/java/org/apache/solr/client/solrj/io/graph/GatherNodesStream.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/graph/GatherNodesStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/graph/GatherNodesStream.java
index 10bd634..52a6a1e 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/graph/GatherNodesStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/graph/GatherNodesStream.java
@@ -275,7 +275,7 @@ public class GatherNodesStream extends TupleStream implements Expressible {
// collection
expression.addParameter(collection);
- if(includeStreams){
+ if(includeStreams && !(tupleStream instanceof NodeStream)){
if(tupleStream instanceof Expressible){
expression.addParameter(((Expressible)tupleStream).toExpression(factory));
}
@@ -311,7 +311,14 @@ public class GatherNodesStream extends TupleStream implements Expressible {
if(maxDocFreq > -1) {
expression.addParameter(new StreamExpressionNamedParameter("maxDocFreq", Integer.toString(maxDocFreq)));
}
- expression.addParameter(new StreamExpressionNamedParameter("walk", traverseFrom+"->"+traverseTo));
+ if(tupleStream instanceof NodeStream) {
+ NodeStream nodeStream = (NodeStream)tupleStream;
+ expression.addParameter(new StreamExpressionNamedParameter("walk", nodeStream.toString() + "->" + traverseTo));
+
+ } else {
+ expression.addParameter(new StreamExpressionNamedParameter("walk", traverseFrom + "->" + traverseTo));
+ }
+
expression.addParameter(new StreamExpressionNamedParameter("trackTraversal", Boolean.toString(trackTraversal)));
StringBuilder buf = new StringBuilder();
@@ -641,6 +648,19 @@ public class GatherNodesStream extends TupleStream implements Expressible {
return new Tuple(map);
}
}
+
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ boolean comma = false;
+ for(String s : ids) {
+ if(comma) {
+ builder.append(",");
+ }
+ builder.append(s);
+ comma = true;
+ }
+ return builder.toString();
+ }
@Override
public Explanation toExplanation(StreamFactory factory) throws IOException {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cb38b142/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
index dd02175..8aba89c 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
@@ -125,17 +125,17 @@ public class CloudSolrStream extends TupleStream implements Expressible {
List<StreamExpressionNamedParameter> namedParams = factory.getNamedOperands(expression);
StreamExpressionNamedParameter aliasExpression = factory.getNamedOperand(expression, "aliases");
StreamExpressionNamedParameter zkHostExpression = factory.getNamedOperand(expression, "zkHost");
-
+
+ // Collection Name
+ if(null == collectionName){
+ throw new IOException(String.format(Locale.ROOT,"invalid expression %s - collectionName expected as first operand",expression));
+ }
+
// Validate there are no unknown parameters - zkHost and alias are namedParameter so we don't need to count it twice
if(expression.getParameters().size() != 1 + namedParams.size()){
throw new IOException(String.format(Locale.ROOT,"invalid expression %s - unknown operands found",expression));
}
- // Collection Name
- if(null == collectionName){
- throw new IOException(String.format(Locale.ROOT,"invalid expression %s - collectionName expected as first operand",expression));
- }
-
// Named parameters - passed directly to solr as solrparams
if(0 == namedParams.size()){
throw new IOException(String.format(Locale.ROOT,"invalid expression %s - at least one named parameter expected. eg. 'q=*:*'",expression));
@@ -257,15 +257,20 @@ public class CloudSolrStream extends TupleStream implements Expressible {
// If the comparator is null then it was not explicitly set so we will create one using the sort parameter
// of the query. While doing this we will also take into account any aliases such that if we are sorting on
// fieldA but fieldA is aliased to alias.fieldA then the comparater will be against alias.fieldA.
- String fls = String.join(",", params.getParams("fl"));
- if (fls == null) {
- throw new IOException("fl param expected for a stream");
+
+ if (params.get("q") == null) {
+ throw new IOException("q param expected for search function");
}
- String sorts = String.join(",", params.getParams("sort"));
- if (sorts == null) {
- throw new IOException("sort param expected for a stream");
+ if (params.getParams("fl") == null) {
+ throw new IOException("fl param expected for search function");
}
+ String fls = String.join(",", params.getParams("fl"));
+
+ if (params.getParams("sort") == null) {
+ throw new IOException("sort param expected for search function");
+ }
+ String sorts = String.join(",", params.getParams("sort"));
this.comp = parseComp(sorts, fls);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cb38b142/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
index ae04a85..86124de 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
@@ -477,6 +477,9 @@ public class FacetStream extends TupleStream implements Expressible {
String bucketName = _buckets[level].toString();
NamedList nl = (NamedList)facets.get(bucketName);
+ if(nl == null) {
+ return;
+ }
List allBuckets = (List)nl.get("buckets");
for(int b=0; b<allBuckets.size(); b++) {
NamedList bucket = (NamedList)allBuckets.get(b);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cb38b142/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 c853e39..b1da1c6 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
@@ -129,6 +129,24 @@ public class StreamExpressionTest extends SolrCloudTestCase {
assertOrder(tuples, 0, 3, 4);
assertLong(tuples.get(1), "a_i", 3);
+ try {
+ expression = StreamExpressionParser.parse("search(" + COLLECTION + ", fl=\"id,a_s,a_i,a_f\", sort=\"a_f asc, a_i asc\")");
+ stream = new CloudSolrStream(expression, factory);
+ tuples = getTuples(stream);
+ throw new Exception("Should be an exception here");
+ } catch(Exception e) {
+ assertTrue(e.getMessage().contains("q param expected for search function"));
+ }
+
+ try {
+ expression = StreamExpressionParser.parse("search(" + COLLECTION + ", q=\"blah\", sort=\"a_f asc, a_i asc\")");
+ stream = new CloudSolrStream(expression, factory);
+ tuples = getTuples(stream);
+ throw new Exception("Should be an exception here");
+ } catch(Exception e) {
+ assertTrue(e.getMessage().contains("fl param expected for search function"));
+ }
+
}
@Test
@@ -2131,6 +2149,27 @@ public class StreamExpressionTest extends SolrCloudTestCase {
assertTrue(avgf.doubleValue() == 5.5D);
assertTrue(count.doubleValue() == 2);
+ //Test zero result facets
+ clause = "facet("
+ + "collection1, "
+ + "q=\"blahhh\", "
+ + "fl=\"a_s,a_i,a_f\", "
+ + "sort=\"a_s asc\", "
+ + "buckets=\"a_s\", "
+ + "bucketSorts=\"a_s asc\", "
+ + "bucketSizeLimit=100, "
+ + "sum(a_i), sum(a_f), "
+ + "min(a_i), min(a_f), "
+ + "max(a_i), max(a_f), "
+ + "avg(a_i), avg(a_f), "
+ + "count(*)"
+ + ")";
+
+ stream = factory.constructStream(clause);
+ tuples = getTuples(stream);
+
+ assert(tuples.size() == 0);
+
}
@Test
[2/2] lucene-solr:branch_6x: SOLR-9128: Update CHANGES.txt
Posted by jb...@apache.org.
SOLR-9128: Update CHANGES.txt
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/73b71b16
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/73b71b16
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/73b71b16
Branch: refs/heads/branch_6x
Commit: 73b71b16d2911e413853561e2ee78e9a075e3451
Parents: cb38b14
Author: jbernste <jb...@apache.org>
Authored: Wed May 18 22:40:53 2016 -0400
Committer: jbernste <jb...@apache.org>
Committed: Wed May 18 22:54:21 2016 -0400
----------------------------------------------------------------------
solr/CHANGES.txt | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/73b71b16/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index bd573a1..818cf28 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -193,6 +193,8 @@ Bug Fixes
* SOLR-9116: Race condition causing occasional SolrIndexSearcher leak when SolrCore is reloaded.
(Jessica Cheng Mallet via shalin)
+* SOLR-9128: Fix error handling issues in Streaming classes (Joel Bernstein)
+
Optimizations
----------------------
* SOLR-8722: Don't force a full ZkStateReader refresh on every Overseer operation.