? 232327-add-nodes-to-queue-for-deletion.patch ? bartik-move-secondary-links-889982.patch ? drupal-7.0-alpha1.he.po.po ? job.patch ? modules/node/.node.module.swp ? modules/system/.system.api.php.swp ? sites/default/files ? sites/default/settings.php Index: modules/comment/comment.module =================================================================== RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v retrieving revision 1.892 diff -u -p -r1.892 comment.module --- modules/comment/comment.module 23 Aug 2010 14:53:50 -0000 1.892 +++ modules/comment/comment.module 27 Aug 2010 17:43:55 -0000 @@ -1578,6 +1578,14 @@ function comment_delete($cid) { * The comment to delete. */ function comment_delete_multiple($cids) { + if (count($cids) > 100) { + $jobs = array_chunk($cids, 100); + $cids = array_pop($jobs); + foreach ($jobs as $job) { + DrupalQueue::addJob('comment_delete_multiple', array($job)); + } + } + $comments = comment_load_multiple($cids); if ($comments) { Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.1293 diff -u -p -r1.1293 node.module --- modules/node/node.module 23 Aug 2010 22:15:34 -0000 1.1293 +++ modules/node/node.module 27 Aug 2010 17:43:55 -0000 @@ -1136,6 +1136,13 @@ function node_delete($nid) { */ function node_delete_multiple($nids) { if (!empty($nids)) { + if (count($nids) > 100) { + $jobs = array_chunk($nids, 100); + $nids = array_pop($jobs); + foreach ($jobs as $job) { + DrupalQueue::addJob('node_delete_multiple', array($job)); + } + } $nodes = node_load_multiple($nids, array()); foreach ($nodes as $nid => $node) { Index: modules/system/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.module,v retrieving revision 1.957 diff -u -p -r1.957 system.module --- modules/system/system.module 22 Aug 2010 13:52:58 -0000 1.957 +++ modules/system/system.module 27 Aug 2010 17:43:56 -0000 @@ -2857,6 +2857,25 @@ function system_cron() { } /** + * Implements hook_cron_queue_info(). + */ +function system_cron_queue_info() { + $queues['system_workers'] = array( + 'worker callback' => 'system_queue_worker', + 'time' => 15, + 'reliable' => TRUE, + ); + return $queues; +} + +/** + * Simple job queue worker. + */ +function system_queue_worker($data) { + return call_user_func_array($data['callback'], $data['arguments']); +} + +/** * Implements hook_flush_caches(). */ function system_flush_caches() { Index: modules/system/system.queue.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.queue.inc,v retrieving revision 1.13 diff -u -p -r1.13 system.queue.inc --- modules/system/system.queue.inc 14 Jun 2010 13:10:31 -0000 1.13 +++ modules/system/system.queue.inc 27 Aug 2010 17:43:56 -0000 @@ -93,6 +93,18 @@ class DrupalQueue { } return $queues[$name]; } + + /** + * Add a simple job to the queue. + * + * @param $callback + * The name of the function to be called when the queue is processed next. + * @param $arguments + * The arguments to the callback. + */ + public static function addJob($callback, $arguments = array()) { + return DrupalQueue::get('system_workers', TRUE)->createItem(array('callback' => $callback, 'arguments' => $arguments)); + } } interface DrupalQueueInterface { Index: modules/user/user.module =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.module,v retrieving revision 1.1196 diff -u -p -r1.1196 user.module --- modules/user/user.module 26 Aug 2010 09:14:33 -0000 1.1196 +++ modules/user/user.module 27 Aug 2010 17:43:56 -0000 @@ -2349,6 +2349,13 @@ function user_delete($uid) { */ function user_delete_multiple(array $uids) { if (!empty($uids)) { + if (count($uids) > 100) { + $jobs = array_chunk($uids, 100); + $uids = array_pop($jobs); + foreach ($jobs as $job) { + DrupalQueue::addJob('user_delete_multiple', array($job)); + } + } $accounts = user_load_multiple($uids, array()); foreach ($accounts as $uid => $account) {