You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ry...@apache.org on 2012/06/26 18:44:15 UTC
svn commit: r1354105 - in /lucene/dev/trunk/solr/core/src:
java/org/apache/solr/handler/component/FacetComponent.java
test/org/apache/solr/TestDistributedSearch.java
Author: ryan
Date: Tue Jun 26 16:44:14 2012
New Revision: 1354105
URL: http://svn.apache.org/viewvc?rev=1354105&view=rev
Log:
SOLR-3557: Avoid NPE for distributed request when shards.tolerant=true
Modified:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/TestDistributedSearch.java
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java?rev=1354105&r1=1354104&r2=1354105&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java Tue Jun 26 16:44:14 2012
@@ -20,9 +20,11 @@ package org.apache.solr.handler.componen
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.util.OpenBitSet;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
@@ -291,7 +293,16 @@ public class FacetComponent extends Sear
for (ShardResponse srsp: sreq.responses) {
int shardNum = rb.getShardNum(srsp.getShard());
- NamedList facet_counts = (NamedList)srsp.getSolrResponse().getResponse().get("facet_counts");
+ NamedList facet_counts = null;
+ try {
+ facet_counts = (NamedList)srsp.getSolrResponse().getResponse().get("facet_counts");
+ }
+ catch(Exception ex) {
+ if(rb.req.getParams().getBool(ShardParams.SHARDS_TOLERANT, false)) {
+ continue; // looks like a shard did not return anything
+ }
+ throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to read facet info for shard: "+srsp.getShard(), ex);
+ }
// handle facet queries
NamedList facet_queries = (NamedList)facet_counts.get("facet_queries");
@@ -439,7 +450,7 @@ public class FacetComponent extends Sear
long maxCount = sfc.count;
for (int shardNum=0; shardNum<rb.shards.length; shardNum++) {
OpenBitSet obs = dff.counted[shardNum];
- if (!obs.get(sfc.termNum)) {
+ if (obs!=null && !obs.get(sfc.termNum)) { // obs can be null if a shard request failed
// if missing from this shard, add the max it could be
maxCount += dff.maxPossible(sfc,shardNum);
}
@@ -454,7 +465,7 @@ public class FacetComponent extends Sear
// add a query for each shard missing the term that needs refinement
for (int shardNum=0; shardNum<rb.shards.length; shardNum++) {
OpenBitSet obs = dff.counted[shardNum];
- if (!obs.get(sfc.termNum) && dff.maxPossible(sfc,shardNum)>0) {
+ if(obs!=null && !obs.get(sfc.termNum) && dff.maxPossible(sfc,shardNum)>0) {
dff.needRefinements = true;
List<String> lst = dff._toRefine[shardNum];
if (lst == null) {
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/TestDistributedSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/TestDistributedSearch.java?rev=1354105&r1=1354104&r2=1354105&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/TestDistributedSearch.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/TestDistributedSearch.java Tue Jun 26 16:44:14 2012
@@ -348,7 +348,13 @@ public class TestDistributedSearch exten
downJettys.add(downJetty);
}
- queryPartialResults(upShards, upClients, "q","*:*",ShardParams.SHARDS_INFO,"true",ShardParams.SHARDS_TOLERANT,"true");
+ queryPartialResults(upShards, upClients,
+ "q","*:*",
+ "facet","true",
+ "facet.field",t1,
+ "facet.limit",5,
+ ShardParams.SHARDS_INFO,"true",
+ ShardParams.SHARDS_TOLERANT,"true");
// restart the jettys
for (JettySolrRunner downJetty : downJettys) {