Случайное IllegalStateException на подчиненном (Solr 3.6.1)
У нас есть мастер-раб Solr, настроенный и выполняющий прямые запросы только против раба. Полный импорт (с оптимизацией) происходит на главном сервере каждый день в 2 часа ночи. Дельта-импорт происходит каждые 5 минут для одного объекта и каждый час для другого объекта, т.е. наш главный файл crontab выглядит так:
# full-import Lists entity
00 02 * * * curl "http://localhost:8080/solr/List/dataimport?command=full-import&clean=true&optimize=true&entity=Lists" > /dev/null
# delta-import Lists entity
*/5 0-1,4-23 * * * curl "http://localhost:8080/solr/List/dataimport?command=delta-import&entity=Lists" > /dev/null
# delta-import ViewedLists entity
23 0-1,4-23 * * * curl "http://localhost:8080/solr/List/dataimport?command=delta-import&entity=ViewedLists" > /dev/null
Следующие исключения происходят несколько раз каждый день в журналах нашего приложения:
...
org.apache.solr.client.solrj.SolrServerException: Error executing query
at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:95)
at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:118)
...
и подобные для произвольных запросов:
08:26:39,430 ERROR SolrUtil:107 - SOLR QUERY (LIST): q=*:*&fq=-list_type:CONTRIBUTING AND is_source_list:false AND is_blocked_on_hpage:false&start=0&rows=8&sort=first_publish_date desc
org.apache.solr.client.solrj.SolrServerException: java.net.SocketException: Connection reset
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:478)
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:244)
at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:89)
at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:118)
...
Если я проверяю файл localhost.log в tomcat на подчиненном сервере solr, одновременно возникает следующее исключение:
Apr 06, 2013 7:16:33 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.solr.servlet.SolrDispatchFilter.sendError(SolrDispatchFilter.java:389)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:291)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:722)
Настройка репликации выглядит следующим образом:
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="master">
<str name="enable">${enable.master:false}</str>
<str name="replicateAfter">startup</str>
<str name="replicateAfter">commit</str>
<str name="replicateAfter">optimize</str>
<str name="confFiles">solrconfig.xml,data-config.xml,schema.xml,stopwords.txt,synonyms.txt,elevate.xml</str>
</lst>
<lst name="slave">
<str name="enable">${enable.slave:false}</str>
<str name="masterUrl">http://${master.ip}:${master.port}/solr/${solr.core.name}/replication</str>
<str name="pollInterval">00:00:10</str>
</lst>
</requestHandler>
Помимо полного и дельта-импорта, у нас также есть поля внешних файлов, которые загружаются каждые 15 минут. с reloadCache как на главном, так и на ведомом устройствах.
Что вызывает это исключение и как его исправить?
Обновление: увеличено pollInterval
от 10 секунд до 1 минуты. Все еще вижу ту же проблему. Кроме того, забыл упомянуть, что ошибка происходит по разным запросам за короткий промежуток времени, поэтому она не зависит от запроса.
Обновление 2. Уменьшена частота дельта-импорта до одного раза в 10 минут и уменьшена загрузка полей внешнего файла и reloadCache до одного раза в час. Все еще видят исключения, хотя частота исключений, кажется, уменьшилась.