Skip to content

Commit

Permalink
Re-enable any queues that were disabled for background processing, on…
Browse files Browse the repository at this point in the history
… end

This addresses what is likely an artificial scenario but

essentially if these steps are followed twice within the same function
- create a queue
- run the queue via runAll

The second time will fail because the queue was disabled & no re-enabled, despite
being perisistent
  • Loading branch information
eileenmcnaughton committed Aug 9, 2023
1 parent c3279fe commit 29776f7
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions CRM/Queue/Runner.php
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ public function runAll() {

if ($taskResult['numberOfItems'] === 0) {
$result = $this->handleEnd();
$this->enableBackgroundExecution();
if (!empty($result['redirect_url'])) {
CRM_Utils_System::redirect($result['redirect_url']);
}
Expand Down Expand Up @@ -521,4 +522,24 @@ protected function disableBackgroundExecution(): void {
]);
}

/**
* Ensure that background workers will not try to run this queue.
*/
protected function enableBackgroundExecution(): void {
if (CRM_Core_Config::isUpgradeMode()) {
// Versions <=5.50 do not have `status` column.
if (!CRM_Core_DAO::checkTableExists('civicrm_queue') || !CRM_Core_BAO_SchemaHandler::checkIfFieldExists('civicrm_queue', 'status')) {
// The system doesn't have automatic background workers yet. Neither necessary nor possible to toggle `status`.
// See also: https://lab.civicrm.org/dev/core/-/issues/3653
return;
}
}

// If it was disabled for background processing & has not been otherwise altered then
// re-enable it as it might be a persistent queue.
CRM_Core_DAO::executeQuery('UPDATE civicrm_queue SET status = "active" WHERE name = %1 AND status IS NULL', [
1 => [$this->queue->getName(), 'String'],
]);
}

}

0 comments on commit 29776f7

Please sign in to comment.