Skip to content

Commit 2716a8d

Browse files
committed
retries: fix issue so max_retries can be overridden to zero via message options
1 parent 4c98d9b commit 2716a8d

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

dramatiq/middleware/retries.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def after_process_message(self, broker, message, *, result=None, exception=None)
9898
message.options["traceback"] = traceback.format_exc(limit=30)
9999
message.options["requeue_timestamp"] = int(time.time() * 1000)
100100

101-
max_retries = message.options.get("max_retries") or actor.options.get("max_retries", self.max_retries)
101+
max_retries = message.options.get("max_retries", actor.options.get("max_retries", self.max_retries))
102102
retry_when = actor.options.get("retry_when", self.retry_when)
103103
if retry_when is not None and not retry_when(retries, exception) or \
104104
retry_when is None and max_retries is not None and retries >= max_retries:

tests/middleware/test_retries.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ def do_work():
214214
assert timestamps[-1] - timestamps[0] < 0.2
215215

216216

217-
def test_actors_can_be_assigned_message_max_retries(stub_broker, stub_worker):
217+
@pytest.mark.parametrize("max_retries_message_option", (0, 4))
218+
def test_actors_can_be_assigned_message_max_retries(stub_broker, stub_worker, max_retries_message_option):
218219
# Given that I have a database
219220
attempts = []
220221

@@ -225,14 +226,14 @@ def do_work():
225226
raise RuntimeError("failure")
226227

227228
# When I send it a message with tight backoff and custom max retries
228-
do_work.send_with_options(max_retries=4, min_backoff=50, max_backoff=500)
229+
do_work.send_with_options(max_retries=max_retries_message_option, min_backoff=50, max_backoff=500)
229230

230231
# And join on the queue
231232
stub_broker.join(do_work.queue_name)
232233
stub_worker.join()
233234

234235
# Then I expect it to be retried as specified in the message options
235-
assert sum(attempts) == 5
236+
assert sum(attempts) == 1 + max_retries_message_option
236237

237238

238239
def test_actors_can_conditionally_retry(stub_broker, stub_worker):

0 commit comments

Comments
 (0)