From 51a64094cc79c16a60d980a92dc83113e5282be8 Mon Sep 17 00:00:00 2001 From: gd Date: Tue, 5 Jun 2018 17:58:20 +0300 Subject: [PATCH 1/3] Fixed queue attempts incremenet. - Fixed wrong queue attempts - Removed unnecessary reserved flag --- src/Jenssegers/Mongodb/Queue/MongoJob.php | 2 +- src/Jenssegers/Mongodb/Queue/MongoQueue.php | 25 +++++++-------------- tests/QueueTest.php | 2 +- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/Jenssegers/Mongodb/Queue/MongoJob.php b/src/Jenssegers/Mongodb/Queue/MongoJob.php index f1a61cf46..86b44dfcd 100644 --- a/src/Jenssegers/Mongodb/Queue/MongoJob.php +++ b/src/Jenssegers/Mongodb/Queue/MongoJob.php @@ -13,7 +13,7 @@ class MongoJob extends DatabaseJob */ public function isReserved() { - return $this->job->reserved; + return $this->job->reserved_at != null; } /** diff --git a/src/Jenssegers/Mongodb/Queue/MongoQueue.php b/src/Jenssegers/Mongodb/Queue/MongoQueue.php index e9cd8da9c..b994fb411 100644 --- a/src/Jenssegers/Mongodb/Queue/MongoQueue.php +++ b/src/Jenssegers/Mongodb/Queue/MongoQueue.php @@ -70,14 +70,16 @@ protected function getNextAvailableJobAndReserve($queue) $job = $this->database->getCollection($this->table)->findOneAndUpdate( [ 'queue' => $this->getQueue($queue), - 'reserved' => 0, + 'reserved_at' => null, 'available_at' => ['$lte' => Carbon::now()->getTimestamp()], ], [ '$set' => [ - 'reserved' => 1, 'reserved_at' => Carbon::now()->getTimestamp(), ], + '$inc' => [ + 'attempts' => 1, + ] ], [ 'returnDocument' => FindOneAndUpdate::RETURN_DOCUMENT_AFTER, @@ -105,20 +107,11 @@ protected function releaseJobsThatHaveBeenReservedTooLong($queue) $reserved = $this->database->collection($this->table) ->where('queue', $this->getQueue($queue)) - ->where(function ($query) use ($expiration, $now) { - // Check for available jobs - $query->where(function ($query) use ($now) { - $query->whereNull('reserved_at'); - $query->where('available_at', '<=', $now); - }); - - // Check for jobs that are reserved but have expired - $query->orWhere('reserved_at', '<=', $expiration); - })->get(); + ->where('reserved_at', '<=', $expiration) + ->get(); foreach ($reserved as $job) { - $attempts = $job['attempts'] + 1; - $this->releaseJob($job['_id'], $attempts); + $this->releaseJob($job['_id']); } } @@ -129,12 +122,10 @@ protected function releaseJobsThatHaveBeenReservedTooLong($queue) * @param int $attempts * @return void */ - protected function releaseJob($id, $attempts) + protected function releaseJob($id) { $this->database->table($this->table)->where('_id', $id)->update([ - 'reserved' => 0, 'reserved_at' => null, - 'attempts' => $attempts, ]); } diff --git a/tests/QueueTest.php b/tests/QueueTest.php index 35be33f9a..f80a145fa 100644 --- a/tests/QueueTest.php +++ b/tests/QueueTest.php @@ -43,7 +43,7 @@ public function testQueueJobExpired() Queue::getDatabase() ->table(Config::get('queue.connections.database.table')) ->where('_id', $id) - ->update(['reserved' => 1, 'reserved_at' => $expiry]); + ->update(['reserved_at' => $expiry]); // Expect an attempted older job in the queue $job = Queue::pop('test'); From 530007234b532efe1aa6b3473b3cfd26e080df9a Mon Sep 17 00:00:00 2001 From: gd Date: Tue, 5 Jun 2018 18:12:31 +0300 Subject: [PATCH 2/3] Fix docker setup. --- docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 62c68e45d..c9e5461f9 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -3,8 +3,8 @@ FROM php:7.1-cli RUN pecl install xdebug RUN apt-get update && \ - apt-get install -y autoconf pkg-config libssl-dev git && \ - pecl install mongodb git zlib1g-dev && docker-php-ext-enable mongodb && \ + apt-get install -y autoconf pkg-config libssl-dev git zlib1g-dev && \ + pecl install mongodb && docker-php-ext-enable mongodb && \ docker-php-ext-install -j$(nproc) pdo pdo_mysql zip && docker-php-ext-enable xdebug RUN curl -sS https://getcomposer.org/installer | php \ From 732679885bd33b10e18a201b9620fbb66919ec79 Mon Sep 17 00:00:00 2001 From: gd Date: Thu, 7 Jun 2018 13:42:38 +0300 Subject: [PATCH 3/3] Done --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index c9e5461f9..c37b559b1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,7 +5,7 @@ RUN pecl install xdebug RUN apt-get update && \ apt-get install -y autoconf pkg-config libssl-dev git zlib1g-dev && \ pecl install mongodb && docker-php-ext-enable mongodb && \ - docker-php-ext-install -j$(nproc) pdo pdo_mysql zip && docker-php-ext-enable xdebug + docker-php-ext-install -j$(nproc) pdo pdo_mysql zip && docker-php-ext-enable xdebug RUN curl -sS https://getcomposer.org/installer | php \ && mv composer.phar /usr/local/bin/ \