Daniel Lowe created SOLR-17433: ---------------------------------- Summary: SolrStream by default creates a Http2SolrClient that can only stream for 60 seconds Key: SOLR-17433 URL: https://issues.apache.org/jira/browse/SOLR-17433 Project: Solr Issue Type: Bug Security Level: Public (Default Security Level. Issues are Public) Components: SolrJ, streaming expressions Affects Versions: 9.6, 9.5, 9.4 Reporter: Daniel Lowe
This behaviour changed in SolrJ 9.4, in earlier versions a {{HttpSolrClient }}was directly instantiated in SolrStream's open() method, while from SolrJ 9.4 a client is instantiated via a {{{}SolrClientCache{}}}. I believe the expected behaviour is that the client that the SolrClientCache instantiates should have appropriate timeout settings for streaming usage. I think the 60 second timeout arises from {{{}SolrClientCache{}}}'s MIN_TIMEOUT of 60 seconds. I note that that this is inconsistent with HttpClientUtil.DEFAULT_SO_TIMEOUT (600 seconds) which is used by default if you manually instantiate a {{Http2SolrClient }}or {{HttpJdkSolrClient.}} Given what I think the typical use case is for SolrStream ideally I don't think there should even be a timeout assuming the stream is still returning content. I think you can restore the original behaviour by using: {code:java} context.setSolrClientCache(new SolrClientCache(new HttpSolrClient.Builder(url).build().getHttpClient())); {code} Example code: {code:java} ModifiableSolrParams params = new ModifiableSolrParams(); params.set("expr", "search(<your_collection_name>,qt=\"/export\",q=\"" + someLongRunningQuery + "\", fl=\"id\", sort=\"id asc\")"); params.set("qt", "/stream"); try (TupleStream solrStream = new SolrStream(url, params)) { StreamContext context = new StreamContext(); solrStream.setStreamContext(context); solrStream.open(); Tuple tuple; while (!(tuple = solrStream.read()).EOF) { } } {code} {code:java} Caused by: java.util.concurrent.TimeoutException: Total timeout 60000 ms elapsed at org.eclipse.jetty.client.HttpConnection$RequestTimeouts.onExpired(HttpConnection.java:342) at org.eclipse.jetty.client.HttpConnection$RequestTimeouts.onExpired(HttpConnection.java:322) at org.eclipse.jetty.io.CyclicTimeouts.onTimeoutExpired(CyclicTimeouts.java:110) at org.eclipse.jetty.io.CyclicTimeouts$Timeouts.onTimeoutExpired(CyclicTimeouts.java:197) at org.eclipse.jetty.io.CyclicTimeout$Wakeup.run(CyclicTimeout.java:294) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829){code} -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org