I have a question regarding the implementation of queues in disque. In particular, does the code allow for an implementation of GETJOB from * or GETJOB from ALL to be written or does this break some fundamental assumptions about the segmentation of nodes or the distribution of queues across nodes?
In particular, this question pertains to the implementation of a blocking means of obtaining one (or more) jobs across all queues without resorting to busy wait. I understand that QSCAN can be used to iterate over all queues and that can be combined with GETJOB NOHANG to in a tight loop to obtain a job across all queues, but that is obviously a waste of system resources.
This is useful if there is no set number of queues beforehand (e.g. a queue can be created by the code rather than being a part of the actual data structuring or partitioning) and queues are used for job management (e.g. flush all jobs of type x where x is simply a named queue) but no distinction is made as to which job should be executed.
Please correct me if I am wrong and this is already possible with the current API, in which case I humbly beg forgiveness for missing this detail.
I have a question regarding the implementation of queues in disque. In particular, does the code allow for an implementation of
GETJOB from *
orGETJOB from ALL
to be written or does this break some fundamental assumptions about the segmentation of nodes or the distribution of queues across nodes?In particular, this question pertains to the implementation of a blocking means of obtaining one (or more) jobs across all queues without resorting to busy wait. I understand that
QSCAN
can be used to iterate over all queues and that can be combined withGETJOB NOHANG
to in a tight loop to obtain a job across all queues, but that is obviously a waste of system resources.This is useful if there is no set number of queues beforehand (e.g. a queue can be created by the code rather than being a part of the actual data structuring or partitioning) and queues are used for job management (e.g. flush all jobs of type x where x is simply a named queue) but no distinction is made as to which job should be executed.
Please correct me if I am wrong and this is already possible with the current API, in which case I humbly beg forgiveness for missing this detail.
Thank you.