about summary refs log tree commit diff
path: root/lib/presque/RestQueueHandler.pm
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-05-09 15:39:40 +0200
committerfranck cuny <franck@lumberjaph.net>2010-05-09 15:39:40 +0200
commitc7ecb2bbd450d693726fac4fae2bab3180d527da (patch)
treed5d2de5716db7ab5edddf7078c6a08e99fa8b713 /lib/presque/RestQueueHandler.pm
parentuse roles (diff)
downloadpresque-c7ecb2bbd450d693726fac4fae2bab3180d527da.tar.gz
error, check if queue is open before sending job, some small tweak
Diffstat (limited to 'lib/presque/RestQueueHandler.pm')
-rw-r--r--lib/presque/RestQueueHandler.pm75
1 files changed, 43 insertions, 32 deletions
diff --git a/lib/presque/RestQueueHandler.pm b/lib/presque/RestQueueHandler.pm
index 115b3e5..b34a377 100644
--- a/lib/presque/RestQueueHandler.pm
+++ b/lib/presque/RestQueueHandler.pm
@@ -11,49 +11,60 @@ __PACKAGE__->asynchronous(1);
 sub get {
     my ( $self, $queue_name ) = @_;
 
-    return $self->http_error_queue if ( !$queue_name );
+    return $self->http_error_queue if !$queue_name;
 
     my $dkey = $self->_queue_delayed($queue_name);
     my $lkey = $self->_queue($queue_name);
 
-    $self->application->redis->zrangebyscore(
-        $dkey, 0, time,
+    $self->application->redis->get(
+        $self->_queue_stat($queue_name),
         sub {
-            my $value = shift;
-            if ( $value && scalar @$value ) {
-                my $k = shift @$value;
-                $self->application->redis->zrem(
-                    $dkey, $k,
-                    sub {
-                        $self->application->redis->get(
-                            $k,
+            my $status = shift;
+
+            if ( defined $status && $status == 0 ) {
+                return $self->http_error_closed_queue();
+            }
+
+            $self->application->redis->zrangebyscore(
+                $dkey, 0, time,
+                sub {
+                    my $value = shift;
+                    if ( $value && scalar @$value ) {
+                        my $k = shift @$value;
+                        $self->application->redis->zrem(
+                            $dkey, $k,
                             sub {
-                                $self->finish(shift);
+                                $self->application->redis->get(
+                                    $k,
+                                    sub {
+                                        $self->finish(shift);
+                                    }
+                                );
                             }
                         );
                     }
-                );
-            }
-            else {
-                $self->application->redis->lpop(
-                    $lkey,
-                    sub {
-                        my $value = shift;
-                        my $qpkey = $self->_queue_policy($queue_name);
-                        if ($value) {
-                            $self->application->redis->get(
-                                $value,
-                                sub {
-                                    $self->finish(shift);
+                    else {
+                        $self->application->redis->lpop(
+                            $lkey,
+                            sub {
+                                my $value = shift;
+                                my $qpkey = $self->_queue_policy($queue_name);
+                                if ($value) {
+                                    $self->application->redis->get(
+                                        $value,
+                                        sub {
+                                            $self->finish(shift);
+                                        }
+                                    );
+                                }
+                                else {
+                                    $self->http_error( 'no job', 404 );
                                 }
-                            );
-                        }
-                        else {
-                            $self->http_error('no job', 404);
-                        }
+                            }
+                        );
                     }
-                );
-            }
+                }
+            );
         }
     );
 }