Skip to content

Commit 4d3f45e

Browse files
committed
increment attempts only when taken from list
1 parent f826130 commit 4d3f45e

File tree

1 file changed

+8
-13
lines changed

1 file changed

+8
-13
lines changed

src/Jenssegers/Mongodb/Queue/MongoQueue.php

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,17 @@ protected function getNextAvailableJobAndReserve($queue)
6464
$job = $this->database->getCollection($this->table)->findOneAndUpdate(
6565
[
6666
'queue' => $this->getQueue($queue),
67-
'reserved' => 0,
67+
'reserved' => ['$ne' => 1],
6868
'available_at' => ['$lte' => Carbon::now()->getTimestamp()],
6969
],
7070
[
7171
'$set' => [
7272
'reserved' => 1,
7373
'reserved_at' => Carbon::now()->getTimestamp(),
7474
],
75+
'$inc' => [
76+
'attempts' => 1,
77+
],
7578
],
7679
[
7780
'returnDocument' => FindOneAndUpdate::RETURN_DOCUMENT_AFTER,
@@ -98,20 +101,12 @@ protected function releaseJobsThatHaveBeenReservedTooLong($queue)
98101

99102
$reserved = $this->database->collection($this->table)
100103
->where('queue', $this->getQueue($queue))
101-
->where(function ($query) use ($expiration, $now) {
102-
// Check for available jobs
103-
$query->where(function ($query) use ($now) {
104-
$query->whereNull('reserved_at');
105-
$query->where('available_at', '<=', $now);
106-
});
107-
108-
// Check for jobs that are reserved but have expired
109-
$query->orWhere('reserved_at', '<=', $expiration);
110-
})->get();
104+
->whereNotNull('reserved_at');
105+
->where('reserved_at', '<=', $expiration);
106+
->get();
111107

112108
foreach ($reserved as $job) {
113-
$attempts = $job['attempts'] + 1;
114-
$this->releaseJob($job['_id'], $attempts);
109+
$this->releaseJob($job['_id'], $job['attempts']);
115110
}
116111
}
117112

0 commit comments

Comments
 (0)