Hello Shawn, Thank you so much for the detailed response. It was so helpful!
Thanks! Mark. On Fri, Aug 16, 2019 at 9:40 AM Shawn Heisey <apa...@elyograg.org> wrote: > On 8/16/2019 3:51 AM, Mark Robinson wrote: > > I am trying to understand the socket time out and connection time out in > > the HttpShardHandlerFactory:- > > > > <shardHandler class="HttpShardHandlerFactory"> > > <int name="socketTimeOut">10</int> > > <int name="connTimeOut">20</int> > > </shardHandler> > > The shard handler is used when that Solr instance needs to make > connections to another Solr instance (which could be itself, as odd as > that might sound). It does not apply to the requests that you make from > outside Solr. > > > 1.Could some one please help me understand the effect of using such low > > values of 10 ms > > and 20ms as given above inside my /select handler? > > A connection timeout of 10 milliseconds *might* result in connections > not establishing at all. This is translated down to the TCP socket as > the TCP connection timeout -- the time limit imposed on making the TCP > connection itself. Which as I understand it, is the completion of the > "SYN", "SYN/ACK", and "ACK" sequence. If the two endpoints of the > connection are on a LAN, you might never see a problem from this -- LAN > connections are very low latency. But if they are across the Internet, > they might never work. > > The socket timeout of 20 milliseconds means that if the connection goes > idle for 20 milliseconds, it will be forcibly closed. So if it took 25 > milliseconds for the remote Solr instance to respond, this Solr instance > would have given up and closed the connection. It is extremely common > for requests to take 100, 500, 2000, or more milliseconds to respond. > > > 2. What is the guidelines for setting these parameters? Should they be > low > > or high > > I would probably use a value of about 5000 (five seconds) for the > connection timeout if everything's on a local LAN. I might go as high > as 15 seconds if there's a high latency network between them, but five > seconds is probably long enough too. > > For the socket timeout, you want a value that's considerably longer than > you expect requests to ever take. Probably somewhere between two and > five minutes. > > > 3. How can I test the effect of this chunk of code after adding it to my > > /select handler ie I want to > > make sure the above code snippet is working. That is why I gave > such > > low values and > > thought when I fire a query I would get both time out errors in the > > logs. But did not! > > Or is it that within the above time frame (10 ms, 20ms) if no > request > > comes the socket will > > time out and the connection will be lost. So to test this should I > > give a say 100 TPS load with > > these low values and then increase the values to maybe 1000 ms and > > 1500 ms respectively > > and see lesser time out error messages? > > If you were running a multi-server SolrCloud setup (or a single-server > setup with multiple shards and/or replicas), you probably would see > problems from values that low. But if Solr never has any need to make > connections to satisfy a request, then the values will never take effect. > > If you want to control these values for requests made from outside Solr, > you will need to do it in your client software that is making the request. > > Thanks, > Shawn >