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

Reply via email to