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 2014/07/04 19:56:39 UTC
svn commit: r1607899 - in /lucene/dev/branches/branch_4x: ./ solr/
solr/core/ solr/core/src/java/org/apache/solr/handler/component/
solr/core/src/java/org/apache/solr/util/
solr/core/src/test-files/solr/collection1/conf/
solr/core/src/test/org/apache/s...
Author: shalin
Date: Fri Jul 4 17:56:38 2014
New Revision: 1607899
URL: http://svn.apache.org/r1607899
Log:
SOLR-6223: SearchComponents may throw NPE when using shards.tolerant and there is a failure in the 'GET_FIELDS/GET_HIGHLIGHTS/GET_DEBUG' phase
Added:
lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/collection1/conf/solrconfig-tolerant-search.xml
- copied unchanged from r1607897, lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-tolerant-search.xml
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/TestTolerantSearch.java
- copied unchanged from r1607897, lucene/dev/trunk/solr/core/src/test/org/apache/solr/TestTolerantSearch.java
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1607899&r1=1607898&r2=1607899&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Fri Jul 4 17:56:38 2014
@@ -84,6 +84,9 @@ Bug Fixes
* SOLR-6159: A ZooKeeper session expiry during setup can keep LeaderElector from joining elections.
(Steven Bower, shalin)
+* SOLR-6223: SearchComponents may throw NPE when using shards.tolerant and there is a failure
+ in the 'GET_FIELDS/GET_HIGHLIGHTS/GET_DEBUG' phase. (Tomás Fernández Löbbe via shalin)
+
Other Changes
---------------------
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java?rev=1607899&r1=1607898&r2=1607899&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java Fri Jul 4 17:56:38 2014
@@ -230,7 +230,7 @@ public class DebugComponent extends Sear
}
if (rb.isDebugResults()) {
- explain = SolrPluginUtils.removeNulls(new SimpleOrderedMap<>(arr));
+ explain = SolrPluginUtils.removeNulls(arr, new SimpleOrderedMap<>());
}
if (!hasGetDebugResponses) {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java?rev=1607899&r1=1607898&r2=1607899&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java Fri Jul 4 17:56:38 2014
@@ -182,6 +182,11 @@ public class HighlightComponent extends
for (ShardRequest sreq : rb.finished) {
if ((sreq.purpose & ShardRequest.PURPOSE_GET_HIGHLIGHTS) == 0) continue;
for (ShardResponse srsp : sreq.responses) {
+ if (srsp.getException() != null) {
+ // can't expect the highlight content if there was an exception for this request
+ // this should only happen when using shards.tolerant=true
+ continue;
+ }
NamedList hl = (NamedList)srsp.getSolrResponse().getResponse().get("highlighting");
for (int i=0; i<hl.size(); i++) {
String id = hl.getName(i);
@@ -193,7 +198,7 @@ public class HighlightComponent extends
}
// remove nulls in case not all docs were able to be retrieved
- rb.rsp.add("highlighting", SolrPluginUtils.removeNulls(new SimpleOrderedMap(arr)));
+ rb.rsp.add("highlighting", SolrPluginUtils.removeNulls(arr, new SimpleOrderedMap<Object>()));
}
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java?rev=1607899&r1=1607898&r2=1607899&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java Fri Jul 4 17:56:38 2014
@@ -133,6 +133,10 @@ public class MoreLikeThisComponent exten
&& rb.req.getParams().getBool(COMPONENT_NAME, false)) {
log.debug("ShardRequest.response.size: " + sreq.responses.size());
for (ShardResponse r : sreq.responses) {
+ if (r.getException() != null) {
+ // This should only happen in case of using shards.tolerant=true. Omit this ShardResponse
+ continue;
+ }
NamedList<?> moreLikeThisReponse = (NamedList<?>) r.getSolrResponse()
.getResponse().get("moreLikeThis");
log.debug("ShardRequest.response.shard: " + r.getShard());
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=1607899&r1=1607898&r2=1607899&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java Fri Jul 4 17:56:38 2014
@@ -55,7 +55,6 @@ import org.apache.solr.common.SolrDocume
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.*;
-import org.apache.solr.common.params.CursorMarkParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
@@ -1064,7 +1063,9 @@ public class QueryComponent extends Sear
populateNextCursorMarkFromMergedShards(rb);
if (partialResults) {
- rb.rsp.getResponseHeader().add( "partialResults", Boolean.TRUE );
+ if(rb.rsp.getResponseHeader().get("partialResults") == null) {
+ rb.rsp.getResponseHeader().add("partialResults", Boolean.TRUE);
+ }
}
}
@@ -1227,6 +1228,28 @@ public class QueryComponent extends Sear
boolean removeKeyField = !rb.rsp.getReturnFields().wantsField(keyFieldName);
for (ShardResponse srsp : sreq.responses) {
+ if (srsp.getException() != null) {
+ // Don't try to get the documents if there was an exception in the shard
+ if(rb.req.getParams().getBool(ShardParams.SHARDS_INFO, false)) {
+ @SuppressWarnings("unchecked")
+ NamedList<Object> shardInfo = (NamedList<Object>) rb.rsp.getValues().get(ShardParams.SHARDS_INFO);
+ @SuppressWarnings("unchecked")
+ SimpleOrderedMap<Object> nl = (SimpleOrderedMap<Object>) shardInfo.get(srsp.getShard());
+ if (nl.get("error") == null) {
+ // Add the error to the shards info section if it wasn't added before
+ Throwable t = srsp.getException();
+ if(t instanceof SolrServerException) {
+ t = ((SolrServerException)t).getCause();
+ }
+ nl.add("error", t.toString() );
+ StringWriter trace = new StringWriter();
+ t.printStackTrace(new PrintWriter(trace));
+ nl.add("trace", trace.toString() );
+ }
+ }
+
+ continue;
+ }
SolrDocumentList docs = (SolrDocumentList) srsp.getSolrResponse().getResponse().get("response");
for (SolrDocument doc : docs) {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java?rev=1607899&r1=1607898&r2=1607899&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java Fri Jul 4 17:56:38 2014
@@ -425,7 +425,7 @@ public class TermVectorComponent extends
public void finishStage(ResponseBuilder rb) {
if (rb.stage == ResponseBuilder.STAGE_GET_FIELDS) {
- NamedList termVectors = new NamedList<>();
+ NamedList<Object> termVectors = new NamedList<>();
Map.Entry<String, Object>[] arr = new NamedList.NamedListEntry[rb.resultIds.size()];
for (ShardRequest sreq : rb.finished) {
@@ -450,7 +450,7 @@ public class TermVectorComponent extends
}
}
// remove nulls in case not all docs were able to be retrieved
- termVectors.addAll(SolrPluginUtils.removeNulls(new NamedList<>(arr)));
+ termVectors.addAll(SolrPluginUtils.removeNulls(arr, new NamedList<Object>()));
rb.rsp.add(TERM_VECTORS, termVectors);
}
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java?rev=1607899&r1=1607898&r2=1607899&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java Fri Jul 4 17:56:38 2014
@@ -702,21 +702,25 @@ public class SolrPluginUtils {
}
return s.toString().replace("\"","");
}
-
- public static NamedList removeNulls(NamedList nl) {
- for (int i=0; i<nl.size(); i++) {
- if (nl.getName(i)==null) {
- NamedList newList = nl instanceof SimpleOrderedMap ? new SimpleOrderedMap() : new NamedList();
- for (int j=0; j<nl.size(); j++) {
- String n = nl.getName(j);
- if (n != null) {
- newList.add(n, nl.getVal(j));
- }
+
+ /**
+ * Adds to {@code dest} all the not-null elements of {@code entries} that have non-null names
+ *
+ * @param entries The array of entries to be added to the {@link NamedList} {@code dest}
+ * @param dest The {@link NamedList} instance where the not-null elements of entries are added
+ * @return Returns The {@code dest} input object
+ */
+ public static <T> NamedList<T> removeNulls(Map.Entry<String, T>[] entries, NamedList<T> dest) {
+ for (int i=0; i<entries.length; i++) {
+ Map.Entry<String, T> entry = entries[i];
+ if (entry != null) {
+ String key = entry.getKey();
+ if (key != null) {
+ dest.add(key, entry.getValue());
}
- return newList;
}
}
- return nl;
+ return dest;
}
/**