You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Shamik Bandopadhyay <sh...@gmail.com> on 2013/10/23 04:57:35 UTC

shards.tolerant throwing null pointer exception when spellcheck is on

Hi,
 .96
  I'm trying to simulate a fault tolerance test where a shard and its
replica(s) goes. down, leaving other shard(s) running. To test it, I added
<str name="shards.tolerant">true</str> in my request handler under defaults
section. This is to make sure that the condition is added to each query
running against this request handler.

In my test environment, I have to 2 shards with a replica each. I brought
down Shard 1 and Replica 1, then fired a query using SolrJ CloudSolrServer,
which internally talks to the zookeeper ensemble. In my request handler,
the spellcheck option is turned on. Due to this, the servers are throwing
null pointer exception. Here's the stack trace.

2013-10-22 20:24:43,875] INFO482886[qtp1783079124-15] -
org.apache.solr.core.SolrCore.execute(SolrCore.java:1909) - [collection1]
webapp=/solr path=/testhtmlhelp
params={spellcheck=on&q=xref&wt=xml&fq=TestProductLine:"ADT"&fq=TestProductRelease:"ADT+2014"&fq=language:"english"}
hits=157 status=500 QTime=70
[2013-10-22 20:24:43,876]ERROR482887[qtp1783079124-15] -
org.apache.solr.common.SolrException.log(SolrException.java:119) -
null:java.lang.NullPointerException
        at
org.apache.solr.handler.component.SpellCheckComponent.finishStage(SpellCheckComponent.java:323)
        at
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:317)
        at
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
        at org.apache.solr.core.SolrCore.execute(SolrCore.java:1904)
        at
org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:659)
        at
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:362)
        at
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158)
        at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
        at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
        at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
        at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
        at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
        at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
        at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
        at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
        at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
        at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
        at
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
        at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
        at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
        at org.eclipse.jetty.server.Server.handle(Server.java:368)
        at
org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
        at
org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
        at
org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942)
        at
org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)
        at
org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
        at
org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
        at
org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
        at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
        at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
        at java.lang.Thread.run(Thread.java:619)


Here's the query detail from the server log, as you can see the spellcheck
is on.

[collection1] webapp=/solr path=/testhtmlhelp
params={facet=on&f.TestCategory.facet.limit=160&tie=0.01&shards.qt=/testhtmlhelp&fl=id,score&facet.field=Source2&fq=TestProductLine:"ADT"&fq=TestProductRelease:"ADT+2014"&fq=language:"english"&rows=150&defType=edismax&start=0&spellcheck=on&shards.tolerant=true&&shard.url=localhost:8984/solr/collection1/|localhost:8983/solr/collection1/&q=xref&isShard=true}
hits=157 status=0 QTime=15

 Now, if I comment out the spellcheck option in request handler, the query
works as expected, even if the other shard and its replica is down.

Is this a known bug in Solr 4.4 ? What'll be the recommended work-around to
address this issue ? Any pointers will be appreciated.

Thanks,
Shamik

Re: shards.tolerant throwing null pointer exception when spellcheck is on

Posted by shamik <sh...@gmail.com>.
Thanks for the information. I think its good to have this issue fixed,
specially for cases where the spellcheck feature is on. I'll check out at
the source code and take a look, even a quick suppressing of the null
pointer exception might make a difference.



--
View this message in context: http://lucene.472066.n3.nabble.com/shards-tolerant-throwing-null-pointer-exception-when-spellcheck-is-on-tp4097133p4097234.html
Sent from the Solr - User mailing list archive at Nabble.com.

Re: shards.tolerant throwing null pointer exception when spellcheck is on

Posted by Shalin Shekhar Mangar <sh...@gmail.com>.
This is a known bug. See https://issues.apache.org/jira/browse/SOLR-5204

Patches welcome.


On Wed, Oct 23, 2013 at 8:27 AM, Shamik Bandopadhyay <sh...@gmail.com>wrote:

> Hi,
>  .96
>   I'm trying to simulate a fault tolerance test where a shard and its
> replica(s) goes. down, leaving other shard(s) running. To test it, I added
> <str name="shards.tolerant">true</str> in my request handler under defaults
> section. This is to make sure that the condition is added to each query
> running against this request handler.
>
> In my test environment, I have to 2 shards with a replica each. I brought
> down Shard 1 and Replica 1, then fired a query using SolrJ CloudSolrServer,
> which internally talks to the zookeeper ensemble. In my request handler,
> the spellcheck option is turned on. Due to this, the servers are throwing
> null pointer exception. Here's the stack trace.
>
> 2013-10-22 20:24:43,875] INFO482886[qtp1783079124-15] -
> org.apache.solr.core.SolrCore.execute(SolrCore.java:1909) - [collection1]
> webapp=/solr path=/testhtmlhelp
>
> params={spellcheck=on&q=xref&wt=xml&fq=TestProductLine:"ADT"&fq=TestProductRelease:"ADT+2014"&fq=language:"english"}
> hits=157 status=500 QTime=70
> [2013-10-22 20:24:43,876]ERROR482887[qtp1783079124-15] -
> org.apache.solr.common.SolrException.log(SolrException.java:119) -
> null:java.lang.NullPointerException
>         at
>
> org.apache.solr.handler.component.SpellCheckComponent.finishStage(SpellCheckComponent.java:323)
>         at
>
> org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:317)
>         at
>
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
>         at org.apache.solr.core.SolrCore.execute(SolrCore.java:1904)
>         at
>
> org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:659)
>         at
>
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:362)
>         at
>
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158)
>         at
>
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
>         at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
>         at
>
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
>         at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
>         at
>
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
>         at
>
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
>         at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
>         at
>
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
>         at
>
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
>         at
>
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
>         at
>
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
>         at
>
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
>         at
>
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
>         at org.eclipse.jetty.server.Server.handle(Server.java:368)
>         at
>
> org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
>         at
>
> org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
>         at
>
> org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942)
>         at
>
> org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004)
>         at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)
>         at
> org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
>         at
>
> org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
>         at
>
> org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
>         at
>
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
>         at
>
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
>         at java.lang.Thread.run(Thread.java:619)
>
>
> Here's the query detail from the server log, as you can see the spellcheck
> is on.
>
> [collection1] webapp=/solr path=/testhtmlhelp
>
> params={facet=on&f.TestCategory.facet.limit=160&tie=0.01&shards.qt=/testhtmlhelp&fl=id,score&facet.field=Source2&fq=TestProductLine:"ADT"&fq=TestProductRelease:"ADT+2014"&fq=language:"english"&rows=150&defType=edismax&start=0&spellcheck=on&shards.tolerant=true&&shard.url=localhost:8984/solr/collection1/|localhost:8983/solr/collection1/&q=xref&isShard=true}
> hits=157 status=0 QTime=15
>
>  Now, if I comment out the spellcheck option in request handler, the query
> works as expected, even if the other shard and its replica is down.
>
> Is this a known bug in Solr 4.4 ? What'll be the recommended work-around to
> address this issue ? Any pointers will be appreciated.
>
> Thanks,
> Shamik
>



-- 
Regards,
Shalin Shekhar Mangar.