Yuki Yano created SOLR-11009:
--------------------------------
Summary: FacetModule throws NullPointerException when all shard
requests fail with shards.tolerant=true
Key: SOLR-11009
URL: https://issues.apache.org/jira/browse/SOLR-11009
Project: Solr
Issue Type: Bug
Security Level: Public (Default Security Level. Issues are Public)
Components: Facet Module
Affects Versions: 6.6
Reporter: Yuki Yano
FacetModule uses FacetMerger.Context for preserving the information of shards
during the distributed search. This context is created as null first, and will
be initialized when the first response is returned from one of shards.
https://github.com/apache/lucene-solr/blob/releases/lucene-solr/6.6.0/solr/core/src/java/org/apache/solr/search/facet/FacetModule.java#L280
If shards.tolerant=true is set as the request, this initializing code may not
be called if shard returns some errors. Therefore, if all shards fail to get
results, the context will remain null.
https://github.com/apache/lucene-solr/blob/releases/lucene-solr/6.6.0/solr/core/src/java/org/apache/solr/search/facet/FacetModule.java#L275
After that, in the STAGE_GET_FIELDS phase, FacetModule checks if there are any
refinements possible by using the context. Unfortunately, because the context
can be null as noted above, this check may end with NullPointerException.
https://github.com/apache/lucene-solr/blob/releases/lucene-solr/6.6.0/solr/core/src/java/org/apache/solr/search/facet/FacetModule.java#L183
You can reproduced this error by following steps.
1. set socketTimeout of shardHandlerFactory to very short (for example, 10ms).
2. do facet search with shards.tolerant=true
The solution is very simple, just add null check before touching the context.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]