Skip to content
Snippets Groups Projects
Commit 1876c741 authored by totten's avatar totten
Browse files

CRM_Queue_Runner - Fix upgrade warnings. Extract disableBackgroundExecution().

This is a revision to #23775.  As before, it prevents a hard error when
upgrading to 5.51.  However, the try-catch produces confusing error messages
in the `CiviCRM.log.*` (ie they indicate a SQL error, but the situation is
actually a normal/expected during upgrade).  This avoids the error messages.

Tested (`r-run`) with `civicrm/upgrade`, `drush civicrm-upgrade-db`, and `cv
upgrade:db` -- for both 5.45=>5.51 and 5.45=>5.49=>5.51.
parent fda805c0
No related branches found
No related tags found
No related merge requests found
......@@ -184,16 +184,7 @@ class CRM_Queue_Runner {
public function runAllViaWeb() {
$_SESSION['queueRunners'][$this->qrid] = serialize($this);
$url = CRM_Utils_System::url($this->pathPrefix . '/runner', 'reset=1&qrid=' . urlencode($this->qrid));
try {
// If this was persistent/registered queue, ensure that no one else tries to execute it.
CRM_Core_DAO::executeQuery('UPDATE civicrm_queue SET status = NULL WHERE name = %1', [
1 => [$this->queue->getName(), 'String'],
]);
}
catch (PEAR_Exception $e) {
// For sites being upgraded the field may not exist as yet.
// https://lab.civicrm.org/dev/core/-/issues/3653
}
$this->disableBackgroundExecution();
CRM_Utils_System::redirect($url);
}
......@@ -208,6 +199,7 @@ class CRM_Queue_Runner {
* failed task
*/
public function runAll() {
$this->disableBackgroundExecution();
$taskResult = $this->formatTaskResult(TRUE);
while ($taskResult['is_continue']) {
// setRaiseException should't be necessary here, but there's a bug
......@@ -507,4 +499,24 @@ class CRM_Queue_Runner {
}
}
/**
* Ensure that background workers will not try to run this queue.
*/
protected function disableBackgroundExecution(): 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;
}
}
// We don't actually know if the queue was registered persistently.
// But if it was, then it should be disabled.
CRM_Core_DAO::executeQuery('UPDATE civicrm_queue SET status = NULL WHERE name = %1', [
1 => [$this->queue->getName(), 'String'],
]);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment