[jira] [Updated] (SOLR-11009) FacetModule throws NullPointerException when all shard requests fail with shards.tolerant=true

2017-07-05 Thread Yuki Yano (JIRA)

 [ 
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: 

[jira] [Updated] (SOLR-11009) FacetModule throws NullPointerException when all shard requests fail with shards.tolerant=true

2017-07-05 Thread Yuki Yano (JIRA)

 [ 
https://issues.apache.org/jira/browse/SOLR-11009?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yuki Yano updated SOLR-11009:
-
Attachment: SOLR-11009.patch

> 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 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: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org