Queue - When UserJob has no more tasks, update status & fire hook #23711
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
Suppose you setup a queue with several tasks and then run them all. What happens to the queue's status?
@eileenmcnaughton - This allows the
civicrm_queue.status
to actually becomecompleted
. This serves a couple purposes:active
tocompleted
so that the background-worker can stop polling for new tasks.onEnd
callback as AJAX. This provides a safer mechanism (hook_queueStatus
) which works in both media.Before
The
civicrm_queue.status
always remainsactive
.After
Depends on the use-case:
UserJob
), then the status remainsactive
.UserJob
, then the status changes fromactive
tocompleted
, and it fires an event:Technical Details
setStatus()
.Queue.runNext
API andcivicrm/queue/ajax/runNext
). Both of these fire an internal event (civi.queue.check
) to consult the status. The nice thing is that it's easy to incorporate this into both AJAX+background workflows.queue_id
relation, so this doesn't affect statuses on there. Forr-run
, I useddemoqueue
, eg