How do you “register” something like a CloudSolrStream btw? Using Blob Store 
API?

Sent from Mail for Windows 10

From: Susmit
Sent: 06 March 2021 23:03
To: users@solr.apache.org
Subject: Re: Idle timeout expired and Early Client Disconnect errors

better to use solr 8.9 and configure http timeouts from solr.in.sh
workaround is bigger - need to extend cloudsolrstream , register it and install 
custom solrclientcache with overridden setcontext method 

Sent from my iPhone

> On Mar 6, 2021, at 9:25 AM, ufuk yılmaz <uyil...@vivaldi.net.invalid> wrote:
> 
> How? O_O
> 
> Sent from Mail for Windows 10
> 
> From: Susmit
> Sent: 06 March 2021 18:35
> To: solr-u...@lucene.apache.org
> Subject: Re: Idle timeout expired and Early Client Disconnect errors
> 
> i have used a workaround to increase the default (hard coded) timeout of 2 
> min in solrclientcache. 
> i can run 9+ hour long streaming queries with no issues.
> 
> Sent from my iPhone
> 
>> On Mar 2, 2021, at 5:32 PM, ufuk yılmaz <uyil...@vivaldi.net.invalid> wrote:
>> 
>> I divided the query to 1000 pieces and removed the parallel stream clause, 
>> it seems to be working without timeout so far, if it does I just can divide 
>> it to even smaller pieces I guess.
>> 
>> I tried to send all 1000 pieces in a “list” expression to be executed 
>> linearly, it didn’t work but I was just curious if it could handle such a 
>> large query 😃
>> 
>> Now I’m just generating expression strings from java code and sending them 
>> one by one. I tried to use SolrJ for this, but encountered a weird problem 
>> where even the simplest expression (echo) stops working after a few 
>> iterations in a loop. I’m guessing the underlying HttpClient is not closing 
>> connections timely, hitting the OS per-host connection limit. I asked a 
>> separate question about this. I was following the example on lucidworks: 
>> https://lucidworks.com/post/streaming-expressions-in-solrj/
>> 
>> I just modified my code to use regular REST calls using okhttp3, it’s a 
>> shame that I couldn’t use SolrJ since it truly streams every result 1 by 1 
>> continuously. REST just returns a single large response at the very end of 
>> the stream.
>> 
>> Thanks again for your help.
>> 
>> Sent from Mail for Windows 10
>> 
>> From: Joel Bernstein
>> Sent: 02 March 2021 00:19
>> To: solr-u...@lucene.apache.org
>> Subject: Re: Idle timeout expired and Early Client Disconnect errors
>> 
>> Also the parallel function builds hash partitioning filters that could lead
>> to timeouts if they take too long to build. Try the query without the
>> parallel function if you're still getting timeouts when making the query
>> smaller.
>> 
>> 
>> 
>> Joel Bernstein
>> http://joelsolr.blogspot.com/
>> 
>> 
>>>> On Mon, Mar 1, 2021 at 4:03 PM Joel Bernstein <joels...@gmail.com> wrote:
>>> 
>>> The settings in your version are 30 seconds and 15 seconds for socket and
>>> connection timeouts.
>>> 
>>> Typically timeouts occur because one or more shards in the query are idle
>>> beyond the timeout threshold. This happens because lot's of data is being
>>> read from other shards.
>>> 
>>> Breaking the query into small parts would be a good strategy.
>>> 
>>> 
>>> 
>>> 
>>> Joel Bernstein
>>> http://joelsolr.blogspot.com/
>>> 
>>> 
>>> On Mon, Mar 1, 2021 at 3:30 PM ufuk yılmaz <uyil...@vivaldi.net.invalid>
>>> wrote:
>>> 
>>>> Hello Mr. Bernstein,
>>>> 
>>>> I’m using version 8.4. So, if I understand correctly, I can’t increase
>>>> timeouts and they are bound to happen in such a large stream. Should I just
>>>> reduce the output of my search expressions?
>>>> 
>>>> Maybe I can split my search results into ~100 parts and run the same
>>>> query 100 times in series. Each part would emit ~3M documents so they
>>>> should finish before timeout?
>>>> 
>>>> Is this a reasonable solution?
>>>> 
>>>> Btw how long is the default hard-coded timeout value? Because yesterday I
>>>> ran another query which took more than 1 hour without any timeouts and
>>>> finished successfully.
>>>> 
>>>> Sent from Mail for Windows 10
>>>> 
>>>> From: Joel Bernstein
>>>> Sent: 01 March 2021 23:03
>>>> To: solr-u...@lucene.apache.org
>>>> Subject: Re: Idle timeout expired and Early Client Disconnect errors
>>>> 
>>>> Oh wait, I misread your email. The idle timeout issue is configurable in:
>>>> 
>>>> https://issues.apache.org/jira/browse/SOLR-14672
>>>> 
>>>> This unfortunately missed the 8.8 release and will be 8.9.
>>>> 
>>>> 
>>>> 
>>>> This i
>>>> 
>>>> 
>>>> 
>>>> Joel Bernstein
>>>> http://joelsolr.blogspot.com/
>>>> 
>>>> 
>>>>> On Mon, Mar 1, 2021 at 2:56 PM Joel Bernstein <joels...@gmail.com> wrote:
>>>> 
>>>>> What version are you using?
>>>>> 
>>>>> Solr 8.7 has changes that caused these errors to hit the logs. These
>>>> used
>>>>> to be suppressed. This has been fixed in Solr 9.0 but it has not been
>>>> back
>>>>> ported to Solr 8.x.
>>>>> 
>>>>> The errors are actually normal operational occurrences when doing joins
>>>> so
>>>>> should be suppressed in the logs and were before the specific release.
>>>>> 
>>>>> It might make sense to do a release that specifically suppresses these
>>>>> errors without backporting the full Solr 9.0 changes which impact the
>>>>> memory footprint of export.
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> Joel Bernstein
>>>>> http://joelsolr.blogspot.com/
>>>>> 
>>>>> 
>>>>> On Mon, Mar 1, 2021 at 10:29 AM ufuk yılmaz <uyil...@vivaldi.net.invalid
>>>>> 
>>>>> wrote:
>>>>> 
>>>>>> Hello all,
>>>>>> 
>>>>>> I’m running a large streaming expression and feeding the result to
>>>> update
>>>>>> expression.
>>>>>> 
>>>>>> update(targetCollection, ...long running stream here...,
>>>>>> 
>>>>>> I tried sending the exact same query multiple times, it sometimes works
>>>>>> and indexes some results, then gives exception, other times fails with
>>>> an
>>>>>> exception after 2 minutes.
>>>>>> 
>>>>>> Response is like:
>>>>>> "EXCEPTION":"java.util.concurrent.ExecutionException:
>>>>>> java.io.IOException: params distrib=false&numWorkers=4.... and my long
>>>>>> stream expression
>>>>>> 
>>>>>> Server log (short):
>>>>>> [c:DNM s:shard1 r:core_node2 x:DNM_shard1_replica_n1]
>>>>>> o.a.s.s.HttpSolrCall null:java.io.IOException:
>>>>>> java.util.concurrent.TimeoutException: Idle timeout expired:
>>>> 120000/120000
>>>>>> ms
>>>>>> o.a.s.s.HttpSolrCall null:java.io.IOException:
>>>>>> java.util.concurrent.TimeoutException: Idle timeout expired:
>>>> 120000/120000
>>>>>> ms
>>>>>> 
>>>>>> I tried to increase the jetty idle timeout value on the node which
>>>> hosts
>>>>>> my target collection to something like an hour. It didn’t affect.
>>>>>> 
>>>>>> 
>>>>>> Server logs (long)
>>>>>> ERROR (qtp832292933-589) [c:DNM s:shard1 r:core_node2
>>>>>> x:DNM_shard1_replica_n1] o.a.s.s.HttpSolrCall null:java.io.IOException:
>>>>>> java.util.concurrent.TimeoutException: Idle timeout expired: 1
>>>>>>                               20000/120000 ms
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.eclipse.jetty.util.SharedBlockingCallback$Blocker.block(SharedBlockingCallback.java:235)
>>>>>> solr-01    |    at
>>>>>> org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:226)
>>>>>> solr-01    |    at
>>>>>> org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:524)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.apache.solr.servlet.ServletOutputStreamWrapper.write(ServletOutputStreamWrapper.java:134)
>>>>>> solr-01    |    at
>>>>>> java.base/sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:233)
>>>>>> solr-01    |    at
>>>>>> java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:303)
>>>>>> solr-01    |    at
>>>>>> java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:281)
>>>>>> solr-01    |    at
>>>>>> java.base/sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
>>>>>> solr-01    |    at java.base/java.io
>>>>>> .OutputStreamWriter.write(OutputStreamWriter.java:211)
>>>>>> solr-01    |    at
>>>>>> org.apache.solr.common.util.FastWriter.flush(FastWriter.java:140)
>>>>>> solr-01    |    at
>>>>>> org.apache.solr.common.util.FastWriter.write(FastWriter.java:54)
>>>>>> solr-01    |    at
>>>>>> org.apache.solr.response.JSONWriter._writeChar(JSONWriter.java:173)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.apache.solr.common.util.JsonTextWriter.writeStr(JsonTextWriter.java:86)
>>>>>> solr-01    |    at
>>>>>> org.apache.solr.common.util.TextWriter.writeVal(TextWriter.java:52)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.apache.solr.response.TextResponseWriter.writeVal(TextResponseWriter.java:152)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.apache.solr.common.util.JsonTextWriter$2.put(JsonTextWriter.java:176)
>>>>>> solr-01    |    at
>>>>>> org.apache.solr.common.MapWriter$EntryWriter.put(MapWriter.java:154)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.apache.solr.handler.export.StringFieldWriter.write(StringFieldWriter.java:77)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.apache.solr.handler.export.ExportWriter.writeDoc(ExportWriter.java:313)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.apache.solr.handler.export.ExportWriter.lambda$addDocsToItemWriter$4(ExportWriter.java:263)
>>>>>> --
>>>>>> solr-01    |    at org.eclipse.jetty.io
>>>>>> .FillInterest.fillable(FillInterest.java:103)
>>>>>> solr-01    |    at org.eclipse.jetty.io
>>>>>> .ChannelEndPoint$2.run(ChannelEndPoint.java:117)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:781)
>>>>>> solr-01    |    at
>>>>>> 
>>>> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:917)
>>>>>> solr-01    |    at java.base/java.lang.Thread.run(Thread.java:834)
>>>>>> solr-01    | Caused by: java.util.concurrent.TimeoutException: Idle
>>>>>> timeout expired: 120000/120000 ms
>>>>>> solr-01    |    at org.eclipse.jetty.io
>>>>>> .IdleTimeout.checkIdleTimeout(IdleTimeout.java:171)
>>>>>> solr-01    |    at org.eclipse.jetty.io
>>>>>> .IdleTimeout.idleCheck(IdleTimeout.java:113)
>>>>>> solr-01    |    at
>>>>>> 
>>>> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
>>>>>> solr-01    |    at
>>>>>> java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
>>>>>> solr-01    |    at
>>>>>> 
>>>> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
>>>>>> solr-01    |    at
>>>>>> 
>>>> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>>>>>> solr-01    |    at
>>>>>> 
>>>> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>>>>>> solr-01    |    ... 1 more
>>>>>> 
>>>>>> 
>>>>>> My expression, in case it helps. To summarize, it finds the document
>>>> ids
>>>>>> which exists on sourceCollection but not on target collection (DNM).
>>>> Joins
>>>>>> on itself to duplicate some fields (I couldn’t find another way to
>>>>>> duplicate the value of field into 2 fields). Then sends the result to
>>>>>> update. Source collection has about 300M documents, 24GB heap, 2
>>>> shards, 2
>>>>>> replicas of each shard.
>>>>>> 
>>>>>> update(
>>>>>>   DNM,
>>>>>>   batchSize=1000,
>>>>>>   parallel(
>>>>>>       WorkerCollection,
>>>>>>       leftOuterJoin(
>>>>>>           fetch(
>>>>>>               sourceCollection,
>>>>>>               complement(
>>>>>>                   search(
>>>>>>                       sourceCollection,
>>>>>>                       q="*:*",
>>>>>>                       qt="/export",
>>>>>>                       fq="...some filters...",
>>>>>>                       sort="id_str asc",
>>>>>>                       fl="id_str",
>>>>>>                       partitionKeys="id_str"
>>>>>>                   ),
>>>>>>                   search(
>>>>>>                       DNM,
>>>>>>                       q="*:*",
>>>>>>                       qt="/export",
>>>>>>                       sort="id_str asc",
>>>>>>                       fl="id_str",
>>>>>>                       partitionKeys="id_str"
>>>>>>                   ),
>>>>>>                   on="id_str"
>>>>>>               ),
>>>>>>               fl="...my many fields...",
>>>>>>               on="id_str",
>>>>>>               batchSize="1000"
>>>>>>           ),
>>>>>>           select(
>>>>>>               fetch(
>>>>>>                   sourceCollection,
>>>>>>                   complement(
>>>>>>                       search(
>>>>>>                           sourceCollection,
>>>>>>                           q="*:*",
>>>>>>                           qt="/export",
>>>>>>                           fq="...some other filters...",
>>>>>>                           sort="id_str asc",
>>>>>>                           fl="id_str",
>>>>>>                           partitionKeys="id_str"
>>>>>>                       ),
>>>>>>                       search(
>>>>>>                           DNM,
>>>>>>                           q="*:*",
>>>>>>                           qt="/export",
>>>>>>                           sort="id_str asc",
>>>>>>                           fl="id_str",
>>>>>>                           partitionKeys="id_str"
>>>>>>                       ),
>>>>>>                       on="id_str"
>>>>>>                   ),
>>>>>>                   fl="...some other fields...",
>>>>>>                   on="id_str",
>>>>>>                   batchSize="1000"
>>>>>>               ),
>>>>>>               id_str, ..some other fields as...
>>>>>>           ),
>>>>>>           on="id_str"
>>>>>>       ),
>>>>>>       workers="4", sort="id_str asc"
>>>>>>   )
>>>>>> )
>>>>>> 
>>>>>> Sent from Mail for Windows 10
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>> 
> 

Reply via email to