This is an automated email from the ASF dual-hosted git repository.

cpoerschke pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new 9d33530  SOLR-6156: Fix NullPointerException if group.field grouping 
is used with rows=0 and timeAllowed (#248)
9d33530 is described below

commit 9d33530da1e52236326491cfb27e024be6dbd853
Author: Christine Poerschke <[email protected]>
AuthorDate: Thu Sep 2 16:48:26 2021 +0100

    SOLR-6156: Fix NullPointerException if group.field grouping is used with 
rows=0 and timeAllowed (#248)
---
 solr/CHANGES.txt                                              |  2 ++
 .../java/org/apache/solr/search/grouping/CommandHandler.java  | 11 ++++++++++-
 .../src/test/org/apache/solr/TestDistributedGrouping.java     |  8 ++++++++
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 262f4df..da26111 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -433,6 +433,8 @@ Bug Fixes
 
 * SOLR-13209: Fix NPE when no grouping query specified  (Collins Abanda via 
Mike Drob)
 
+* SOLR-6156: Fix NullPointerException if group.field grouping is used with 
rows=0 and timeAllowed. (Modassar Ather, Christine Poerschke)
+
 Other Changes
 ---------------------
 * SOLR-15566: Clarify ref guide documentation about SQL queries with `SELECT 
*` requiring a `LIMIT` clause (Timothy Potter)
diff --git 
a/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java 
b/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java
index 7517db1..6e25595 100644
--- a/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java
+++ b/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java
@@ -27,6 +27,8 @@ import org.apache.lucene.queries.function.ValueSource;
 import org.apache.lucene.search.Collector;
 import org.apache.lucene.search.MultiCollector;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreMode;
+import org.apache.lucene.search.SimpleCollector;
 import org.apache.lucene.search.TimeLimitingCollector;
 import org.apache.lucene.search.TotalHitCountCollector;
 import org.apache.lucene.search.grouping.AllGroupHeadsCollector;
@@ -158,7 +160,7 @@ public class CommandHandler {
     } else if (!collectors.isEmpty()) {
       searchWithTimeLimiter(query, filter, 
MultiCollector.wrap(collectors.toArray(new Collector[nrOfCommands])));
     } else {
-      searchWithTimeLimiter(query, filter, null);
+      searchWithTimeLimiter(query, filter, NO_OP_COLLECTOR);
     }
 
     for (Command<?> command : commands) {
@@ -166,6 +168,13 @@ public class CommandHandler {
     }
   }
 
+  private static Collector NO_OP_COLLECTOR = new SimpleCollector() {
+    @Override
+    public ScoreMode scoreMode() { return ScoreMode.COMPLETE_NO_SCORES; }
+    @Override
+    public void collect(int doc) throws IOException {}
+  };
+
   private DocSet computeGroupedDocSet(Query query, ProcessedFilter filter, 
List<Collector> collectors) throws IOException {
     Command<?> firstCommand = commands.get(0);
     String field = firstCommand.getKey();
diff --git a/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java 
b/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
index 8726e4f..868a67c 100644
--- a/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
+++ b/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
@@ -301,6 +301,14 @@ public class TestDistributedGrouping extends 
BaseDistributedSearchTestCase {
       }
     }
 
+    // SOLR-6156: timeAllowed with rows>0 and rows==0
+    for (String ngroups : new String[] { "false", "true" }) {
+      for (String rows : new String[] { "10", "0" }) {
+        simpleQuery("q", "*:*", "group", "true", "group.field", i1, 
"group.ngroups", ngroups, "rows", rows);
+        simpleQuery("q", "*:*", "group", "true", "group.field", i1, 
"group.ngroups", ngroups, "rows", rows, "timeAllowed", "123456");
+      }
+    }
+
     ModifiableSolrParams params = new ModifiableSolrParams();
     Object[] q =  {"q", "*:*", "fq", s1 + ":a", "rows", 1, "fl", "id," + i1, 
"group", "true", "group.field", i1, "group.limit", -1, "group.ngroups", "true"};
 

Reply via email to