Issue #1509996 by jhedstrom: Added Convert hook_cron_queue_info() to hook_queue_info().

8.0.x
catch 2012-04-17 12:07:50 +09:00
parent 5de2f76426
commit d9135600c9
3 changed files with 39 additions and 21 deletions

View File

@ -5305,8 +5305,8 @@ function drupal_cron_run() {
$return = FALSE;
// Grab the defined cron queues.
$queues = module_invoke_all('cron_queue_info');
drupal_alter('cron_queue_info', $queues);
$queues = module_invoke_all('queue_info');
drupal_alter('queue_info', $queues);
// Try to acquire cron lock.
if (!lock_acquire('cron', 240.0)) {
@ -5317,7 +5317,9 @@ function drupal_cron_run() {
// Make sure every queue exists. There is no harm in trying to recreate an
// existing queue.
foreach ($queues as $queue_name => $info) {
queue($queue_name)->createQueue();
if (isset($info['cron'])) {
queue($queue_name)->createQueue();
}
}
// Register shutdown callback.
drupal_register_shutdown_function('drupal_cron_cleanup');
@ -5345,12 +5347,14 @@ function drupal_cron_run() {
}
foreach ($queues as $queue_name => $info) {
$function = $info['worker callback'];
$end = time() + (isset($info['time']) ? $info['time'] : 15);
$queue = queue($queue_name);
while (time() < $end && ($item = $queue->claimItem())) {
$function($item->data);
$queue->deleteItem($item);
if (isset($info['cron'])) {
$function = $info['worker callback'];
$end = time() + (isset($info['cron']['time']) ? $info['cron']['time'] : 15);
$queue = queue($queue_name);
while (time() < $end && ($item = $queue->claimItem())) {
$function($item->data);
$queue->deleteItem($item);
}
}
}
// Restore the user.

View File

@ -331,12 +331,15 @@ function aggregator_cron() {
}
/**
* Implements hook_cron_queue_info().
* Implements hook_queue_info().
*/
function aggregator_cron_queue_info() {
function aggregator_queue_info() {
$queues['aggregator_feeds'] = array(
'title' => t('Aggregator refresh'),
'worker callback' => 'aggregator_refresh',
'time' => 60,
'cron' => array(
'time' => 60,
),
);
return $queues;
}

View File

@ -120,7 +120,7 @@ function hook_admin_paths_alter(&$paths) {
* Long-running tasks and tasks that could time out, such as retrieving remote
* data, sending email, and intensive file tasks, should use the queue API
* instead of executing the tasks directly. To do this, first define one or
* more queues via hook_cron_queue_info(). Then, add items that need to be
* more queues via hook_queue_info(). Then, add items that need to be
* processed to the defined queues.
*/
function hook_cron() {
@ -154,22 +154,33 @@ function hook_cron() {
* items in the queue, otherwise it might take several requests, which can be
* run in parallel.
*
* You can create queues, add items to them, claim them, etc without declaring
* the queue in this hook if you want, however, you need to take care of
* processing the items in the queue in that case.
*
* @return
* An associative array where the key is the queue name and the value is
* again an associative array. Possible keys are:
* - 'worker callback': The name of the function to call. It will be called
* with one argument, the item created via
* Drupal\Core\Queue\QueueInterface::createItem() in hook_cron().
* - 'time': (optional) How much time Drupal should spend on calling this
* worker in seconds. Defaults to 15.
* - 'cron': (optional) An associative array containing the optional key:
* - 'time': (optional) How much time Drupal cron should spend on calling
* this worker in seconds. Defaults to 15.
* If the cron key is not defined, the queue will not be processed by cron,
* and must be processed by other means.
*
* @see hook_cron()
* @see hook_cron_queue_info_alter()
* @see hook_queue_info_alter()
*/
function hook_cron_queue_info() {
function hook_queue_info() {
$queues['aggregator_feeds'] = array(
'title' => t('Aggregator refresh'),
'worker callback' => 'aggregator_refresh',
'time' => 60,
// Only needed if this queue should be processed by cron.
'cron' => array(
'time' => 60,
),
);
return $queues;
}
@ -183,13 +194,13 @@ function hook_cron_queue_info() {
* @param array $queues
* An array of cron queue information.
*
* @see hook_cron_queue_info()
* @see hook_queue_info()
* @see drupal_cron_run()
*/
function hook_cron_queue_info_alter(&$queues) {
function hook_queue_info_alter(&$queues) {
// This site has many feeds so let's spend 90 seconds on each cron run
// updating feeds instead of the default 60.
$queues['aggregator_feeds']['time'] = 90;
$queues['aggregator_feeds']['cron']['time'] = 90;
}
/**