summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2010-11-21 13:01:44 -0800
committerBharat Mediratta <bharat@menalto.com>2010-11-21 13:03:02 -0800
commit5f4ab7fd76d24e3848aa96b3f657fca587d68f72 (patch)
tree5855fa45857e0088cbd5b1113518a2663e1c9071 /modules
parent12b77c7ef4bb715df45aa7299872691cc0c4dcef (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.php7
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") {