solr - java.lang.IllegalStateException: no se puede llamar a sendError() después de que se haya confirmado la respuesta
solrcloud (1)
Estoy trabajando en la indexación de alrededor de 3 TB de datos en Apache Solr. Estoy obteniendo un error por debajo de mis registros de tomcat cuando el tamaño de los datos llegó a 14 GB. ¿Es posible solucionarlo? Estoy planeando mover mi índice más tarde a la nube solr.
> 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)
Esto sucede cuando Solr comienza a escribir la respuesta y luego lanza una excepción. Luego, al tratar de manejar esa excepción, arroja otra. La alternativa de Solr en esta situación es básicamente levantar las manos y llamar a HttpServletResponse#sendError()
, que arroja IllegalStateException
porque Solr ya ha escrito parte de la respuesta. Como efecto secundario, la excepción original se pierde. ¡Hurra!
Si tiene suerte, algún otro componente registró la excepción antes de lanzarla a la pila. En ese caso, la causa real de este error aparecerá en el registro poco antes de la IllegalStateException
. De lo contrario, es hora de establecer un punto de interrupción dentro de SolrDispatchFilter#sendError()
y echar un vistazo a la excepción antes de que Solr lo trague.