2014-02-16 8 views
7

Ich arbeite an der Indizierung von etwa 3 TB Daten in Apache Solr. Ich erhalte einen Fehler in meinen Tomcat-Logs, wenn die Datengröße 14 GB erreicht hat. Ist es möglich, Fehler zu beheben? Ich plane, meinen Index später zu solr Wolke zu bewegen.java.lang.IllegalStateException: Kann sendError() nicht aufrufen, nachdem die Antwort festgeschrieben wurde

> 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) 
+0

Ich habe ein gleiches Problem, obwohl auf kleineren Datenmengen –

Antwort

2

Dies passiert, wenn Solr beginnt, die Antwort zu schreiben, und löst dann eine Ausnahme aus. Wenn Sie dann versuchen, mit dieser Ausnahme umzugehen, wird eine weitere ausgelöst. Solrs Fallback in dieser Situation ist im Grunde seine Hände zu werfen und rufen Sie HttpServletResponse#sendError(), die IllegalStateException wirft, weil Solr bereits einen Teil der Antwort geschrieben hat. Als Nebeneffekt ist die ursprüngliche Ausnahme verloren. Hurra!

Wenn Sie Glück haben, hat eine andere Komponente die Ausnahme protokolliert, bevor sie den Stapel hochgeworfen hat. In diesem Fall wird die aktuelle Ursache dieses Fehlers kurz vor dem IllegalStateException im Protokoll angezeigt. Ansonsten ist es an der Zeit, innerhalb SolrDispatchFilter#sendError() einen Haltepunkt zu setzen und die Ausnahme zu betrachten, bevor Solr sie schluckt.

Verwandte Themen