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.