Brendan Hannemann
Brendan Hannemann

Reputation: 2154

How do I extend the Timeout in SolrConnection? (SolrConnectionException: The operation has timed out)

How do I extend/modify the timeout value used for the SolrConnection object?

I have a long-running optimize operation that does not appear to complete within the default connection timeout provided. The operation I am using is ISolrOperations<?>.Optimize(). I do not see any options for increasing the timeout using the ISolrOperations object directly.

I am using the Castle Windsor IoC container for instantiation in order to have multiple cores.

Here is the full stacktrace:

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

Note that the optimization does happen successfully, but that SolrNet does not wait for it to complete before throwing this error.

Upvotes: 2

Views: 3370

Answers (1)

Mauricio Scheffer
Mauricio Scheffer

Reputation: 99730

You can safely ignore this timeout. As you already have found out, the command runs successfully on Solr anyway.

Or if you want to set the connection timeout you can configure it with a component model event in Windsor:

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

Timeout value is expressed in milliseconds.

Upvotes: 3

Related Questions