You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jb...@apache.org on 2021/01/28 18:50:41 UTC
[lucene-solr] branch branch_8x updated: SOLR-14672: Make timeouts
configurable for the Streaming Expression SolrClientCache
This is an automated email from the ASF dual-hosted git repository.
jbernste pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/branch_8x by this push:
new 03c253f SOLR-14672: Make timeouts configurable for the Streaming Expression SolrClientCache
03c253f is described below
commit 03c253f4d8c8a36f82d2e7bfa61f3871837150d7
Author: Joel Bernstein <jb...@apache.org>
AuthorDate: Thu Jan 28 10:35:59 2021 -0500
SOLR-14672: Make timeouts configurable for the Streaming Expression SolrClientCache
---
solr/solr-ref-guide/src/streaming-expressions.adoc | 3 +++
.../solr/client/solrj/io/SolrClientCache.java | 21 +++++++++++++++++++--
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/solr/solr-ref-guide/src/streaming-expressions.adoc b/solr/solr-ref-guide/src/streaming-expressions.adoc
index 6d8c3f9..873d210 100644
--- a/solr/solr-ref-guide/src/streaming-expressions.adoc
+++ b/solr/solr-ref-guide/src/streaming-expressions.adoc
@@ -82,6 +82,9 @@ For the above example the `/stream` handler responded with the following JSON re
Note the last tuple in the above example stream is `{"EOF":true,"RESPONSE_TIME":33}`. The `EOF` indicates the end of the stream. To process the JSON response, you'll need to use a streaming JSON implementation because streaming expressions are designed to return the entire result set which may have millions of records. In your JSON client you'll need to iterate each doc (tuple) and check for the EOF tuple to determine the end of stream.
+=== Configuration
+
+Timeouts for Streaming Expressions can be configured with the `socketTimeout` and `connTimeout` startup parameters.
== Elements of the Lanaguage
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/SolrClientCache.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/SolrClientCache.java
index e2d9680..b8be124 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/SolrClientCache.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/SolrClientCache.java
@@ -29,6 +29,7 @@ import java.util.List;
import org.apache.http.client.HttpClient;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.HttpClientUtil;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,6 +45,11 @@ public class SolrClientCache implements Serializable {
private final Map<String, SolrClient> solrClients = new HashMap<>();
private final HttpClient httpClient;
+ //Set the floor for timeouts to 60 seconds.
+ //Timeouts cans be increased by setting the system properties defined below.
+ private static final int conTimeout = Math.max(Integer.parseInt(System.getProperty(HttpClientUtil.PROP_CONNECTION_TIMEOUT,"60000")), 60000);
+ private static final int socketTimeout = Math.max(Integer.parseInt(System.getProperty(HttpClientUtil.PROP_SO_TIMEOUT,"60000")), 60000);
+
public SolrClientCache() {
httpClient = null;
@@ -54,6 +60,16 @@ public class SolrClientCache implements Serializable {
}
public synchronized CloudSolrClient getCloudSolrClient(String zkHost) {
+
+ //Timeouts should never be lower then 60000 but they can be set higher
+ assert(conTimeout >= 60000);
+ assert(socketTimeout >= 60000);
+
+ if(log.isDebugEnabled()) {
+ log.debug("SolrClientCache.conTimeout: {}", conTimeout);
+ log.debug("SolrClientCache.socketTimeout: {}", socketTimeout);
+ }
+
Objects.requireNonNull(zkHost, "ZooKeeper host cannot be null!");
CloudSolrClient client;
if (solrClients.containsKey(zkHost)) {
@@ -61,10 +77,11 @@ public class SolrClientCache implements Serializable {
} else {
final List<String> hosts = new ArrayList<String>();
hosts.add(zkHost);
- CloudSolrClient.Builder builder = new CloudSolrClient.Builder(hosts, Optional.empty()).withSocketTimeout(30000).withConnectionTimeout(15000);
+ CloudSolrClient.Builder builder = new CloudSolrClient.Builder(hosts, Optional.empty()).withSocketTimeout(socketTimeout).withConnectionTimeout(conTimeout);
if (httpClient != null) {
builder = builder.withHttpClient(httpClient);
}
+
client = builder.build();
client.connect();
solrClients.put(zkHost, client);
@@ -78,7 +95,7 @@ public class SolrClientCache implements Serializable {
if (solrClients.containsKey(host)) {
client = (HttpSolrClient) solrClients.get(host);
} else {
- HttpSolrClient.Builder builder = new HttpSolrClient.Builder(host);
+ HttpSolrClient.Builder builder = new HttpSolrClient.Builder(host).withSocketTimeout(socketTimeout).withConnectionTimeout(conTimeout);
if (httpClient != null) {
builder = builder.withHttpClient(httpClient);
}