diff options
Diffstat (limited to 'lib/presque/Role')
-rw-r--r-- | lib/presque/Role/Queue.pm | 10 | ||||
-rw-r--r-- | lib/presque/Role/Queue/Names.pm | 5 |
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'; |