You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mk...@apache.org on 2019/03/05 20:29:06 UTC
[lucene-solr] branch branch_8x updated: SOLR-9882: picking results
for mergeIds even after partial ones occurred
This is an automated email from the ASF dual-hosted git repository.
mkhl pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/branch_8x by this push:
new 76df3ac SOLR-9882: picking results for mergeIds even after partial ones occurred
76df3ac is described below
commit 76df3ac75d8f4638c6044c578a9970f1f89a87ab
Author: Mikhail Khludnev <mk...@apache.org>
AuthorDate: Tue Mar 5 23:21:12 2019 +0300
SOLR-9882: picking results for mergeIds even after partial ones occurred
---
.../apache/solr/handler/component/QueryComponent.java | 18 +++++++++++-------
.../src/test/org/apache/solr/TestTolerantSearch.java | 10 +++++-----
2 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
index 4dab304..fea238b 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
@@ -812,7 +812,7 @@ public class QueryComponent extends SearchComponent
long numFound = 0;
Float maxScore=null;
- boolean partialResults = false;
+ boolean thereArePartialResults = false;
Boolean segmentTerminatedEarly = null;
for (ShardResponse srsp : sreq.responses) {
SolrDocumentList docs = null;
@@ -853,7 +853,7 @@ public class QueryComponent extends SearchComponent
}
// now that we've added the shard info, let's only proceed if we have no error.
if (srsp.getException() != null) {
- partialResults = true;
+ thereArePartialResults = true;
continue;
}
@@ -865,10 +865,11 @@ public class QueryComponent extends SearchComponent
responseHeader = (NamedList<?>)srsp.getSolrResponse().getResponse().get("responseHeader");
}
+ final boolean thisResponseIsPartial;
if (responseHeader != null) {
- if (Boolean.TRUE.equals(responseHeader.getBooleanArg(SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY))) {
- partialResults = true;
- }
+ thisResponseIsPartial = Boolean.TRUE.equals(responseHeader.getBooleanArg(SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY));
+ thereArePartialResults |= thisResponseIsPartial;
+
if (!Boolean.TRUE.equals(segmentTerminatedEarly)) {
final Object ste = responseHeader.get(SolrQueryResponse.RESPONSE_HEADER_SEGMENT_TERMINATED_EARLY_KEY);
if (Boolean.TRUE.equals(ste)) {
@@ -877,6 +878,8 @@ public class QueryComponent extends SearchComponent
segmentTerminatedEarly = Boolean.FALSE;
}
}
+ } else {
+ thisResponseIsPartial = false;
}
// calculate global maxScore and numDocsFound
@@ -886,7 +889,8 @@ public class QueryComponent extends SearchComponent
numFound += docs.getNumFound();
NamedList sortFieldValues = (NamedList)(srsp.getSolrResponse().getResponse().get("sort_values"));
- if (sortFieldValues.size()==0 && partialResults) {
+ if (sortFieldValues.size()==0 && // we bypass merging this response only if it's partial itself
+ thisResponseIsPartial) { // but not the previous one!!
continue; //fsv timeout yields empty sort_vlaues
}
NamedList unmarshalledSortFieldValues = unmarshalSortValues(ss, sortFieldValues, schema);
@@ -966,7 +970,7 @@ public class QueryComponent extends SearchComponent
populateNextCursorMarkFromMergedShards(rb);
- if (partialResults) {
+ if (thereArePartialResults) {
rb.rsp.getResponseHeader().asShallowMap()
.put(SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY, Boolean.TRUE);
}
diff --git a/solr/core/src/test/org/apache/solr/TestTolerantSearch.java b/solr/core/src/test/org/apache/solr/TestTolerantSearch.java
index 44c8bf6..afde390 100644
--- a/solr/core/src/test/org/apache/solr/TestTolerantSearch.java
+++ b/solr/core/src/test/org/apache/solr/TestTolerantSearch.java
@@ -16,6 +16,10 @@
*/
package org.apache.solr;
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+
import org.apache.commons.io.FileUtils;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
@@ -33,10 +37,6 @@ import org.apache.solr.response.SolrQueryResponse;
import org.junit.AfterClass;
import org.junit.BeforeClass;
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-
public class TestTolerantSearch extends SolrJettyTestBase {
private static SolrClient collection1;
@@ -194,7 +194,7 @@ public class TestTolerantSearch extends SolrJettyTestBase {
}
}
assertTrue(foundError);
-
+ assertFalse(""+response, response.getResults().isEmpty());
assertEquals("1", response.getResults().get(0).getFieldValue("id"));
assertEquals("batman", response.getResults().get(0).getFirstValue("subject"));
unIgnoreException("Dummy exception in BadResponseWriter");