Munendra S N created SOLR-11018:
-----------------------------------

             Summary: Wrong status code in case of invalid requests
                 Key: SOLR-11018
                 URL: https://issues.apache.org/jira/browse/SOLR-11018
             Project: Solr
          Issue Type: Bug
      Security Level: Public (Default Security Level. Issues are Public)
    Affects Versions: 6.5
            Reporter: Munendra S N
            Priority: Minor


I have small document set take from here - http://yonik.com/solr-nested-objects/
According to the schema, review_dt is of type date and pubyear_i is of type int

This request,
{{http://localhost:8983/solr/blockjoin70001-1492010056/select?q=*:*&fq=review_dt:[something%20TO%20anything]&wt=json}}
 returns
returns 400 as expected since, wrong range query is fired

{code:json}
{
  "responseHeader": {
    "status": 400,
    "QTime": 2,
    "params": {
      "q": "*:*",
      "fq": "review_dt:[something TO anything]",
      "wt": "json"
    }
  },
  "error": {
    "metadata": [
      "error-class",
      "org.apache.solr.common.SolrException",
      "root-error-class",
      "org.apache.solr.common.SolrException"
    ],
    "msg": "Invalid Date String:'something'",
    "code": 400
  }
}
{code}

but for this request,
{{http://localhost:8983/solr/blockjoin70001-1492010056/select?q=*:*&fq=pubyear_i:[something%20TO%20anything]&wt=json}}
 returns 500(Internal server error) instead of 400(Bad Request)

{code:json}
{
  "responseHeader": {
    "status": 500,
    "QTime": 11,
    "params": {
      "q": "*:*",
      "fq": "pubyear_i:[something TO anything]",
      "wt": "json"
    }
  },
  "error": {
    "msg": "For input string: \"something\"",
    "trace": "java.lang.NumberFormatException: For input string: 
\"something\"\n\tat 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)\n\tat
 java.lang.Integer.parseInt(Integer.java:580)\n\tat 
java.lang.Integer.parseInt(Integer.java:615)\n\tat 
org.apache.solr.schema.TrieField.getRangeQuery(TrieField.java:373)\n\tat 
org.apache.solr.parser.SolrQueryParserBase.getRangeQueryImpl(SolrQueryParserBase.java:1047)\n\tat
 
org.apache.solr.parser.SolrQueryParserBase.getRangeQuery(SolrQueryParserBase.java:1041)\n\tat
 org.apache.solr.parser.QueryParser.Term(QueryParser.java:503)\n\tat 
org.apache.solr.parser.QueryParser.Clause(QueryParser.java:277)\n\tat 
org.apache.solr.parser.QueryParser.Query(QueryParser.java:161)\n\tat 
org.apache.solr.parser.QueryParser.TopLevelQuery(QueryParser.java:130)\n\tat 
org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:211)\n\tat
 org.apache.solr.search.LuceneQParser.parse(LuceneQParser.java:53)\n\tat 
org.apache.solr.search.QParser.getQuery(QParser.java:168)\n\tat 
org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:212)\n\tat
 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:269)\n\tat
 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:173)\n\tat
 org.apache.solr.core.SolrCore.execute(SolrCore.java:2440)\n\tat 
org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:723)\n\tat 
org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:529)\n\tat 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:347)\n\tat
 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:298)\n\tat
 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1691)\n\tat
 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)\n\tat
 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)\n\tat
 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)\n\tat
 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)\n\tat
 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)\n\tat
 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)\n\tat 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)\n\tat
 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)\n\tat
 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\n\tat
 
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)\n\tat
 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:119)\n\tat
 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)\n\tat
 
org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)\n\tat
 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)\n\tat
 org.eclipse.jetty.server.Server.handle(Server.java:534)\n\tat 
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)\n\tat 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)\n\tat
 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)\n\tat
 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)\n\tat 
org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)\n\tat
 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)\n\tat
 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)\n\tat
 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)\n\tat
 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)\n\tat
 
org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)\n\tat
 java.lang.Thread.run(Thread.java:745)\n",
    "code": 500
  }
}
{code}

This is because in case of {{DateField}} any parse exception is wrapped in 
{{SolrException}} with code set to 400
https://github.com/apache/lucene-solr/blob/branch_6_5/solr/core/src/java/org/apache/solr/util/DateMathParser.java#L240

But in case of Integer, Long, Double and some other field types, Parse 
exception are not handled separately hence any exception in this case would be 
propagated.

h3. Possible approaches

* Handle any such parse exception in {{RequestHandlerBase}} (handleRequest 
method) just like {{SyntaxError}}
* Wrap such exceptions in {{SolrException}} (just like how it is handled in 
DateField and LatLonField)




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to