Current we're able to set a socket timeout on the underlying httpClient of an LBHttpSolrServer (used by CloudSolrServer). However, this timeout only applies to a single request that's issued from LBHttpSolrServer, but LBHttpSolrServer will go on to try all eligible candidate servers when a SocketTimeoutException is thrown, so that potentially the request can in fact take (socketTimeout * number of eligible servers) time to return from the caller's perspective. This is hard to predict.
We should allow setting an overall client request timeout apart from the single request socketTimeout, so that the request call is guaranteed terminate by this timeout (either via success or via a timeout exception). This allows the client application to properly size their timeout and request thread pools to avoid request thread exhaustion if solr is experiencing issues.