Как продлить время ожидания в SolrConnection? (SolrConnectionException: истекло время ожидания операции) - PullRequest
2 голосов
/ 18 октября 2011

Как расширить / изменить значение времени ожидания, используемое для объекта SolrConnection?

У меня есть длительная операция оптимизации, которая, по-видимому, не завершается в течение установленного времени ожидания соединения.Я использую операцию ISolrOperations<?>.Optimize().Я не вижу никаких вариантов увеличения времени ожидания с использованием объекта ISolrOperations напрямую.

Я использую контейнер IoC Castle Windsor для создания экземпляров, чтобы иметь несколько ядер.

Вот полная трассировка стека:

SolrNet.Exceptions.SolrConnectionException: The operation has timed out ---> System.Net.WebException: The operation has timed out
   at System.Net.HttpWebRequest.GetResponse()
   at HttpWebAdapters.Adapters.HttpWebRequestAdapter.GetResponse() in c:\prg\SolrNet\svn\HttpWebAdapters\Impl\HttpWebRequestAdapter.cs:line 36
   at SolrNet.Impl.SolrConnection.GetResponse(IHttpWebRequest request) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 201
   at SolrNet.Impl.SolrConnection.PostStream(String relativeUrl, String contentType, Stream content, IEnumerable`1 parameters) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 113
   --- End of inner exception stack trace ---
   at SolrNet.Impl.SolrConnection.PostStream(String relativeUrl, String contentType, Stream content, IEnumerable`1 parameters) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 121
   at SolrNet.Impl.SolrConnection.Post(String relativeUrl, String s) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrConnection.cs:line 87
   at SolrNet.Commands.OptimizeCommand.Execute(ISolrConnection connection) in c:\prg\SolrNet\svn\SolrNet\Commands\OptimizeCommand.cs:line 76
   at SolrNet.Impl.SolrBasicServer`1.Send(ISolrCommand cmd) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 96
   at SolrNet.Impl.SolrBasicServer`1.SendAndParseHeader(ISolrCommand cmd) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 106
   at SolrNet.Impl.SolrBasicServer`1.Optimize(CommitOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:line 69
   at SolrNet.Impl.SolrServer`1.Optimize() in c:\prg\SolrNet\svn\SolrNet\Impl\SolrServer.cs:line 206
   at NationalLaborRelations.SearchAgent.SearchAgentBase.Optimize(ISolrOperations`1 s) in C:\PROJECTS\NLRB\Search\SearchAgent\SearchAgent\SearchAgentBase.cs:line 354

Обратите внимание, что оптимизация происходит успешно, но SolrNet не ждет, пока она завершится, прежде чем выдать эту ошибку.

1 Ответ

3 голосов
/ 18 октября 2011

Вы можете спокойно игнорировать этот тайм-аут. Как вы уже узнали, команда в любом случае успешно работает на Solr.

Или, если вы хотите установить тайм-аут соединения, вы можете настроить его для события модели компонента в Виндзоре:

var c = new WindsorContainer();
c.Kernel.ComponentModelCreated += model => {
    if (model.Implementation == typeof(SolrConnection))
        model.Parameters.Add("Timeout", "200000");
};
c.AddFacility("solr", new SolrNetFacility("http://localhost:8983/solr")); // or whatever

Значение времени ожидания выражается в миллисекундах.

...