about summary refs log tree commit diff
path: root/lib/presque/Role
diff options
context:
space:
mode:
Diffstat (limited to 'lib/presque/Role')
-rw-r--r--lib/presque/Role/Queue.pm10
-rw-r--r--lib/presque/Role/Queue/Names.pm5
2 files changed, 15 insertions, 0 deletions
diff --git a/lib/presque/Role/Queue.pm b/lib/presque/Role/Queue.pm
index c7b50f4..6ac0e8a 100644
--- a/lib/presque/Role/Queue.pm
+++ b/lib/presque/Role/Queue.pm
@@ -16,6 +16,16 @@ sub push_job {
     if ($delayed) {
         $method = 'zadd';
         @args = ($queue_name . ':delayed', $delayed, $key);
+        $self->application->redis->get(
+            $self->_queue_delayed_next($queue_name),
+            sub {
+                my $val = shift;
+                if (!$val || ($val && $val > $delayed)) {
+                    $self->application->redis->set(
+                        $self->_queue_delayed_next($queue_name), $delayed);
+                }
+            }
+        );
     }
     $self->application->redis->$method(@args,);
 }
diff --git a/lib/presque/Role/Queue/Names.pm b/lib/presque/Role/Queue/Names.pm
index 6a2b6a7..c371a50 100644
--- a/lib/presque/Role/Queue/Names.pm
+++ b/lib/presque/Role/Queue/Names.pm
@@ -12,6 +12,11 @@ sub _queue_delayed {
     return $queue_name.':delayed';
 }
 
+sub _queue_delayed_next {
+    my ($self, $queue_name) = @_;
+    return $queue_name.':delayed:next';
+}
+
 sub _queue_policy {
     my ($self, $queue_name) = @_;
     return $queue_name.':queuepolicy';