blob: 9e7ffa4d478450483b22e5972e5bcf95f9c8a398 [file] [log] [blame]
= 3. Distributed WorkQueue
Date: 2019-10-02
== Status
Accepted (lazy consensus)
Superceded by xref:0016-distributed-workqueue.adoc[16.
Distributed WorkQueue]
== Context
By switching the task manager to a distributed implementation, we need to be able to run a `Task` on any node of the cluster.
== Decision
For the time being we will keep the sequential execution property of the task manager.
This is an intermediate milestone toward the final implementation which will drop this property.
* Use a RabbitMQ queue as a workqueue where only the `Created` events are pushed into.
This queue will be exclusive and events will be consumed serially.
Technically this means the queue will be consumed with a `prefetch = 1`.
The queue will listen to the worker on the same node and will ack the message only once it is finished (`Completed`, `Failed`, `Cancelled`).
== Consequences
* It's a temporary and not safe to use in production solution: if the node promoted to exclusive listener of the queue dies, no more tasks will be run
* The serial execution of tasks does not leverage cluster scalability.