Skip to content

Commit 625e2ec

Browse files
authored
Prefer retry method from the task decorator if no retry method is given to RetryException (#356)
This matches the already documented behavior.
1 parent 423d8a1 commit 625e2ec

File tree

5 files changed

+32
-1
lines changed

5 files changed

+32
-1
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## Version 0.21.0
4+
5+
* When raising `RetryException` with no `method`, use task decorator retry method if set ([356](https://github.com/closeio/tasktiger/pull/356))
6+
37
## Version 0.20.0
48

59
* Add `tiger.get_sizes_for_queues_and_states` ([352](https://github.com/closeio/tasktiger/pull/352))

tasktiger/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from .tasktiger import TaskTiger, run_worker
1313
from .worker import Worker
1414

15-
__version__ = "0.20.0"
15+
__version__ = "0.21.0"
1616
__all__ = [
1717
"TaskTiger",
1818
"Worker",

tasktiger/worker.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,8 +771,12 @@ def _mark_done() -> None:
771771
has_job_timeout = True
772772

773773
if execution and execution.get("retry"):
774+
# Prefer retry method from the execution, then the task, then
775+
# default.
774776
if "retry_method" in execution:
775777
retry_func, retry_args = execution["retry_method"]
778+
elif task.retry_method:
779+
retry_func, retry_args = task.retry_method
776780
else:
777781
# We expect the serialized method here.
778782
retry_func, retry_args = serialize_retry_method(

tests/tasks.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,11 @@ def retry_task_2():
135135
raise RetryException(method=fixed(DELAY, 1), log_error=False)
136136

137137

138+
@tiger.task(retry_method=fixed(DELAY, 1))
139+
def retry_task_3():
140+
raise RetryException(log_error=False)
141+
142+
138143
def verify_current_task():
139144
with redis.Redis(
140145
host=REDIS_HOST, db=TEST_DB, decode_responses=True

tests/test_base.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
non_batch_task,
4040
retry_task,
4141
retry_task_2,
42+
retry_task_3,
4243
simple_task,
4344
sleep_task,
4445
task_on_other_queue,
@@ -617,6 +618,23 @@ def test_retry_exception_2(self):
617618

618619
pytest.raises(TaskNotFound, task.n_executions)
619620

621+
def test_retry_exception_3(self):
622+
task = self.tiger.delay(retry_task_3)
623+
self._ensure_queues(queued={"default": 1})
624+
assert task.n_executions() == 0
625+
626+
Worker(self.tiger).run(once=True)
627+
self._ensure_queues(scheduled={"default": 1})
628+
assert task.n_executions() == 1
629+
630+
time.sleep(DELAY)
631+
632+
Worker(self.tiger).run(once=True)
633+
Worker(self.tiger).run(once=True)
634+
self._ensure_queues()
635+
636+
pytest.raises(TaskNotFound, task.n_executions)
637+
620638
@pytest.mark.parametrize("count", [1, 3, 7])
621639
def test_retry_executions_count(self, count):
622640
task = self.tiger.delay(exception_task, retry_method=fixed(DELAY, 20))

0 commit comments

Comments
 (0)