Skip to content

Commit cd07b1b

Browse files
committed
fix: handle enqueue failure in retry to prevent job loss
Only delete job record after successful re-enqueue. If enqueue fails, re-add PID to failed queue so the job can be retried later.
1 parent 9d414b1 commit cd07b1b

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

src/Queue/Broker/Redis.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,20 @@ public function retry(Queue $queue, ?int $limit = null): void
149149
break;
150150
}
151151

152-
$this->enqueue($queue, $job->getPayload());
152+
$enqueued = $this->enqueue($queue, $job->getPayload());
153153

154-
/**
155-
* Remove old job record after re-enqueueing to prevent memory leak.
156-
*/
157-
$this->connection->remove("{$queue->namespace}.jobs.{$queue->name}.{$pid}");
158-
159-
$processed++;
154+
if ($enqueued) {
155+
/**
156+
* Remove old job record after successful re-enqueue to prevent memory leak.
157+
*/
158+
$this->connection->remove("{$queue->namespace}.jobs.{$queue->name}.{$pid}");
159+
$processed++;
160+
} else {
161+
/**
162+
* Re-add PID to failed queue if enqueue failed so job isn't lost.
163+
*/
164+
$this->connection->leftPush("{$queue->namespace}.failed.{$queue->name}", $pid);
165+
}
160166
}
161167
}
162168

src/Queue/Queue.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public function __construct(
88
public string $name,
99
public string $namespace = 'utopia-queue',
10-
public int $jobTtl = 86400,
10+
public int $jobTtl = 0,
1111
) {
1212
if (empty($this->name)) {
1313
throw new \InvalidArgumentException('Cannot create queue with empty name.');

0 commit comments

Comments
 (0)