[ 
https://issues.apache.org/jira/browse/JAMES-3773?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benoit Tellier updated JAMES-3773:
----------------------------------
    Attachment: jstack.stuck

> Reactor elastic -> boundedElastic switch
> ----------------------------------------
>
>                 Key: JAMES-3773
>                 URL: https://issues.apache.org/jira/browse/JAMES-3773
>             Project: James Server
>          Issue Type: Improvement
>          Components: James Core
>    Affects Versions: 3.7.0
>            Reporter: Benoit Tellier
>            Priority: Major
>             Fix For: 3.8.0
>
>         Attachments: jstack.stuck
>
>          Time Spent: 50m
>  Remaining Estimate: 0h
>
> A scheduler is the abstraction Reactor, our reactive library runs code on. 
> Ideally we would only run non-blocking code on a parallel scheduler. In 
> practice we also run blocking code on an elastic scheduler. Elastic 
> schedulers are unbounded so we can end up with a very large number of threads 
> thus defeating the benefits of reactive code.
> For this reason, project reactor deprecates elastic in favor of bounded 
> elastic.
> This switch was attempted before but resulted in dead locks.
> Such deadlocks can be avoided by:
>  - Avoiding wrapping .blocks calls in an elastic thread. This means 
> essentially improving the quality of our reactive pipelines and not blocking 
> them in the middle.  - Avoid calls to subscibeOn before blocking. Instead use 
> the blocked threads (that is anyway blocked) for the ongoing computation.
>  - In last result use a SEDA like approach:
>    - Introduce a new instance of boundedElastic dedicated to wrap our calls 
> to .block where we can't avoid it.    - Use core boundedElastic only when no 
> reactor .block call is involved to prevent starvation
> Alternatives would be to increase to an absurd amount the size of 
> boundedElastic essentially mimicking the behavior of elastic.
> We have 161 calls to .elastic().
> Acceptance criteria: no performance degradation. Recent performance 
> improvements were furthermore delivered in recent reactor releases.
> This would eventually be needed to upgrade to reactor 3.5.0.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to