Is your feature request related to a problem?
The configuration of the channels is stored in a configuration file/environment variable and need a restart of the jobrunner to be applied. This proposition aims to bring the possibility to change the configuration on the fly from the UI, which also offers new options such as pausing/resuming a channel.
Describe the solution you'd like
Add fields on queue.job.channel: capacity, sequential, throttle, running (boolean).
In the jobrunner startup, read configuration from model queue.job.channel, fallback on the current implementation based on file/environment variable.
In the queue.job.channel model, when one of the configuration field that concerns the jobrunner is changed, send a pg_notify in the same postgres channel (queue_job), but instead of a job uuid, send reload.
In the Jobrunner, when the payload is reload, go through a cycle close databases/replace the channel manager by a fresh one/configure channels/initialize databases (maybe not necessary to close/initialize database but we have to go through the steps to load all pending jobs in the channels).
Add the "paused" support in the Channel:
- New
is_paused=False parameter in Channel - A method is_paused() returns True if the current channel or any parent is paused
has_capacity() returns False if is_paused() returns True
Describe alternatives you've considered
/
Additional context
The cycle to update the channels can probably be optimized to prevent reloading all at once, but changes on the configuration should be are enough not to be a problem. Maybe if the only changes are in pause/resume, we can change the channels in place instead of recreating all the channels.
Is your feature request related to a problem?
The configuration of the channels is stored in a configuration file/environment variable and need a restart of the jobrunner to be applied. This proposition aims to bring the possibility to change the configuration on the fly from the UI, which also offers new options such as pausing/resuming a channel.
Describe the solution you'd like
Add fields on
queue.job.channel: capacity, sequential, throttle, running (boolean).In the jobrunner startup, read configuration from model
queue.job.channel, fallback on the current implementation based on file/environment variable.In the
queue.job.channelmodel, when one of the configuration field that concerns the jobrunner is changed, send apg_notifyin the same postgres channel (queue_job), but instead of a job uuid, sendreload.In the Jobrunner, when the payload is
reload, go through a cycle close databases/replace the channel manager by a fresh one/configure channels/initialize databases (maybe not necessary to close/initialize database but we have to go through the steps to load all pending jobs in the channels).Add the "paused" support in the Channel:
is_paused=Falseparameter in Channelhas_capacity()returns False ifis_paused()returns TrueDescribe alternatives you've considered
/
Additional context
The cycle to update the channels can probably be optimized to prevent reloading all at once, but changes on the configuration should be are enough not to be a problem. Maybe if the only changes are in pause/resume, we can change the channels in place instead of recreating all the channels.