[ https://issues.apache.org/jira/browse/SOLR-11009?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yuki Yano updated SOLR-11009: ----------------------------- Description: 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 reproduce 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. was: 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. > 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 > Attachments: SOLR-11009.patch > > > 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 reproduce 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: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org