about summary refs log tree commit diff
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-06-28 10:13:19 +0200
committerfranck cuny <franck@lumberjaph.net>2010-06-28 10:13:19 +0200
commit84b5147670347eb26a75c27342d410a580b03de4 (patch)
tree71302d475e90f899516782014912129a2a468628
parentadd POD; fix queue size when null (diff)
downloadpresque-84b5147670347eb26a75c27342d410a580b03de4.tar.gz
store value for next delayed job, return info with control status
-rw-r--r--lib/presque/ControlHandler.pm10
-rw-r--r--lib/presque/Role/Queue.pm10
-rw-r--r--lib/presque/Role/Queue/Names.pm5
3 files changed, 21 insertions, 4 deletions
diff --git a/lib/presque/ControlHandler.pm b/lib/presque/ControlHandler.pm
index 7feadc8..38bbe89 100644
--- a/lib/presque/ControlHandler.pm
+++ b/lib/presque/ControlHandler.pm
@@ -15,13 +15,15 @@ __PACKAGE__->asynchronous(1);
 sub get {
     my ($self, $queue_name) = @_;
 
-    $self->application->redis->get(
+    $self->application->redis->mget(
         $self->_queue_stat($queue_name),
+        $self->_queue_delayed_next($queue_name),
         sub {
-            my $status = shift;
+            my $res = shift;
             $self->entity(
-                {   queue  => $queue_name,
-                    status => $status
+                {   queue          => $queue_name,
+                    status         => $res->[0],
+                    next_run_after => $res->[1],
                 }
             );
         }
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';