protected function Cron::processQueues in Drupal 9
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Cron.php \Drupal\Core\Cron::processQueues()
- 10 core/lib/Drupal/Core/Cron.php \Drupal\Core\Cron::processQueues()
Processes cron queues.
File
- core/
lib/ Drupal/ Core/ Cron.php, line 168
Class
- Cron
- The Drupal core Cron service.
Namespace
Drupal\CoreCode
protected function processQueues() {
// Grab the defined cron queues.
foreach ($this->queueManager
->getDefinitions() as $queue_name => $info) {
if (isset($info['cron'])) {
// Make sure every queue exists. There is no harm in trying to recreate
// an existing queue.
$this->queueFactory
->get($queue_name)
->createQueue();
$queue_worker = $this->queueManager
->createInstance($queue_name);
$end = time() + (isset($info['cron']['time']) ? $info['cron']['time'] : 15);
$queue = $this->queueFactory
->get($queue_name);
$lease_time = isset($info['cron']['time']) ?: NULL;
while (time() < $end && ($item = $queue
->claimItem($lease_time))) {
try {
$queue_worker
->processItem($item->data);
$queue
->deleteItem($item);
} catch (DelayedRequeueException $e) {
// The worker requested the task not be immediately re-queued.
// - If the queue doesn't support ::delayItem(), we should leave the
// item's current expiry time alone.
// - If the queue does support ::delayItem(), we should allow the
// queue to update the item's expiry using the requested delay.
if ($queue instanceof DelayableQueueInterface) {
// This queue can handle a custom delay; use the duration provided
// by the exception.
$queue
->delayItem($item, $e
->getDelay());
}
} catch (RequeueException $e) {
// The worker requested the task be immediately requeued.
$queue
->releaseItem($item);
} catch (SuspendQueueException $e) {
// If the worker indicates there is a problem with the whole queue,
// release the item and skip to the next queue.
$queue
->releaseItem($item);
watchdog_exception('cron', $e);
// Skip to the next queue.
continue 2;
} catch (\Exception $e) {
// In case of any other kind of exception, log it and leave the item
// in the queue to be processed again later.
watchdog_exception('cron', $e);
}
}
}
}
}