Karsten Otto created JAMES-3890:
-----------------------------------
Summary: Allow parallel execution of safe tasks
Key: JAMES-3890
URL: https://issues.apache.org/jira/browse/JAMES-3890
Project: James Server
Issue Type: Improvement
Components: task
Affects Versions: master
Reporter: Karsten Otto
Currently, task execution in James is strictly serialized, through a single
thread executor and the single active consumer feature of RabbitMQ. Such serial
execution prevents tasks from interfering with each others operations. The
majority of tasks execute in few seconds, so this is fine.
However, some tasks can take considerably longer, from minutes to even hours.
In that case, the *long running task will effectively delay execution of any
other task* until it is done! I noticed this while experimenting with the
{{{}ExpireMailboxTask{}}}, throttled down to 1 user/sec for 1000 users; this
would delay the periodic {{ReprocessingAllMailsTask}} I use for mail
re-delivery attempts. This is rather unfortunate, since the two tasks have
nothing in common to interfere with.
I propose a change to the task system, to allow parallel execution for certain
long running "safe" tasks, in a twofold sense:
# The task will not likely interfere with the operations of regular tasks.
# The task gracefully handles issues that can arise from parallel execution.
E.g. when listing mails and later accessing them, some may have been deleted
in the meantime.
The aforementioned {{ExpireMailboxTask}} would be a good candidate for this,
maybe there are others.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]