【问题标题】:java.lang.IllegalStateException: Cannot call sendError() after the response has been committedjava.lang.IllegalStateException:提交响应后无法调用 sendError()
【发布时间】:2014-02-16 05:56:02
【问题描述】:

我正在将大约 3 TB 的数据索引到 apache solr 中。当数据大小达到 14 GB 时,我的 tomcat 日志中出现以下错误。是否可以排除故障?我计划稍后将我的索引移动到 solr cloud。

> SEVERE: Servlet.service() for servlet [default] in context with path
> [/solr] threw exception java.lang.IllegalStateException: Cannot call
> sendError() after the response has been committed
>         at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:451)
>         at org.apache.solr.servlet.SolrDispatchFilter.sendError(SolrDispatchFilter.java:757)
>         at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:438)
>         at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:201)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
>         at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
>         at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
>         at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)

【问题讨论】:

  • 我有同样的问题,虽然在较小的数据集上

标签: solr solrcloud


【解决方案1】:

这发生在 Solr 开始写入响应然后抛出异常时。然后在尝试处理该异常时,它会抛出另一个异常。 Solr 在这种情况下的后备方案是基本上举手并调用HttpServletResponse#sendError(),它会抛出IllegalStateException,因为Solr 已经编写了部分响应。作为副作用,原始异常丢失了。万岁!

如果幸运的话,其他一些组件会在将异常抛出堆栈之前记录该异常。在这种情况下,此错误的实际原因将出现在IllegalStateException 之前不久的日志中。否则,是时候在 SolrDispatchFilter#sendError() 中设置断点并在 Solr 吞下它之前查看异常。

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2014-08-22
    相关资源
    最近更新 更多