+1, thanks David.

On Sat, 28 Sept, 2024, 1:16 am David Smiley, <dsmi...@apache.org> wrote:

> I just want to follow-up here to let everyone know I have a PR and it
> includes a fundamental change in the nature of the Executor to be
> blocking.  Ideally someone would benchmark it.  But even if that doesn't
> happen, I'm inclined to merge to fix the RejectedExecutionException
> problem.  This is an experimental feature, after all.
>
> On Wed, Aug 21, 2024 at 10:12 AM David Smiley <dsmi...@apache.org> wrote:
>
> > Thanks; I filed https://issues.apache.org/jira/browse/SOLR-17414
> >
> > On Tue, Aug 20, 2024 at 2:56 PM Ishan Chattopadhyaya
> > <ichattopadhy...@gmail.com> wrote:
> > >
> > > Thanks, I'll take a look.
> > >
> > > On Tue, 20 Aug, 2024, 11:22 pm David Smiley, <dsmi...@apache.org>
> wrote:
> > >
> > > > Since the new multiThreaded search feature landed, I see a new test
> > > > failure involving "RejectedExecutionException" being thrown:
> > > >
> > > >
> >
> https://ge.apache.org/s/5ack462ji4mlu/tests/task/:solr:core:test/details/org.apache.solr.search.TestRealTimeGet/testStressGetRealtime?top-execution=1
> > > > It is thrown at a low level in Lucene building TermStates
> > > > concurrently.  I doubt the problem is specific to that test
> > > > (TestRealTimeGet) but that test might induce more activity than most
> > > > tests, thus crossing some thresholds like the queue size --
> apparently
> > > > 1000.
> > > >
> > > > ** I don't think we should be throwing a RejectedExecutionException
> > > > when running a Search query **.
> > > > Have others explored this topic further and have ideas to share, even
> > > > including ruled out ideas?  Ishan, Noble, ?
> > > >
> > > > I'd prefer to avoid catching this exception to take some other action
> > > > -- would feel too much like a hack.  I'm optimistic a more elegant
> > > > solution without doing this can be found.
> > > >
> > > > Perhaps SynchronousQueue?  Maybe I can rule this out based on a
> little
> > > > test I did, as it throws a RejectedExecutionException (instead of
> > > > blocking), which I'd rather not catch.
> > > >
> > > > Perhaps a LinkedBlockingQueue (thus infinite queue size) but have an
> > > > ExecutorService subclass that observes the queue size to see if a
> > > > threshold is reached and if so then runs the task directly?  This way
> > > > we never reject and the caller threads receive back pressure by doing
> > > > the work that they would have done anyway with multiThreaded=false !
> > > > There is plenty of precedent for an ExecutorService that runs the
> task
> > > > in the caller thread -- I'm thinking of Lucene's
> > > > SameThreadExecutorService and Solr's SimpleFacets.directExecutor.
> > > >
> > > > ~ David Smiley
> > > > Apache Lucene/Solr Search Developer
> > > > http://www.linkedin.com/in/davidwsmiley
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: dev-unsubscr...@solr.apache.org
> > > > For additional commands, e-mail: dev-h...@solr.apache.org
> > > >
> > > >
> >
>

Reply via email to