diff options
author | Bharat Mediratta <bharat@menalto.com> | 2010-11-21 13:01:44 -0800 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2010-11-21 13:03:02 -0800 |
commit | 5f4ab7fd76d24e3848aa96b3f657fca587d68f72 (patch) | |
tree | 5855fa45857e0088cbd5b1113518a2663e1c9071 /modules | |
parent | 12b77c7ef4bb715df45aa7299872691cc0c4dcef (diff) |
Shuffle up the way we figure out which image to rebuild next so that
multiple concurrent tasks actually work in parallel and don't stomp
on each other. Fixes #1498.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/gallery/helpers/gallery_task.php | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/modules/gallery/helpers/gallery_task.php b/modules/gallery/helpers/gallery_task.php index d56edabb..e69ff91a 100644 --- a/modules/gallery/helpers/gallery_task.php +++ b/modules/gallery/helpers/gallery_task.php @@ -71,7 +71,12 @@ class gallery_task_Core { static function rebuild_dirty_images($task) { $errors = array(); try { - $result = graphics::find_dirty_images_query()->select("id")->execute(); + // Choose the dirty images in a random order so that if we run this task multiple times + // concurrently each task is rebuilding different images simultaneously. + $result = graphics::find_dirty_images_query()->select("id") + ->select(new Database_Expression("RAND() as r")) + ->order_by("r", "ASC") + ->execute(); $total_count = $task->get("total_count", $result->count()); $mode = $task->get("mode", "init"); if ($mode == "init") { |