|
1 | | -from copy import deepcopy |
2 | 1 | from logging import getLogger |
3 | 2 | from typing import Any |
4 | 3 |
|
5 | 4 | from taskiq.abc.middleware import TaskiqMiddleware |
6 | 5 | from taskiq.exceptions import NoResultError |
| 6 | +from taskiq.kicker import AsyncKicker |
7 | 7 | from taskiq.message import TaskiqMessage |
8 | 8 | from taskiq.result import TaskiqResult |
9 | 9 |
|
@@ -47,25 +47,32 @@ async def on_error( |
47 | 47 | return |
48 | 48 |
|
49 | 49 | retry_on_error = message.labels.get("retry_on_error") |
| 50 | + if isinstance(retry_on_error, str): |
| 51 | + retry_on_error = retry_on_error.lower() == "true" |
| 52 | + |
50 | 53 | if retry_on_error is None: |
51 | | - retry_on_error = "true" if self.default_retry_label else "false" |
| 54 | + retry_on_error = self.default_retry_label |
52 | 55 | # Check if retrying is enabled for the task. |
53 | | - if retry_on_error.lower() != "true": |
| 56 | + if not retry_on_error: |
54 | 57 | return |
55 | | - new_msg = deepcopy(message) |
| 58 | + |
| 59 | + kicker: AsyncKicker[Any, Any] = AsyncKicker( |
| 60 | + task_name=message.task_name, |
| 61 | + broker=self.broker, |
| 62 | + labels=message.labels, |
| 63 | + ).with_task_id(message.task_id) |
56 | 64 |
|
57 | 65 | # Getting number of previous retries. |
58 | | - retries = int(new_msg.labels.get("_retries", 0)) + 1 |
59 | | - new_msg.labels["_retries"] = str(retries) |
60 | | - max_retries = int(new_msg.labels.get("max_retries", self.default_retry_count)) |
| 66 | + retries = int(message.labels.get("_retries", 0)) + 1 |
| 67 | + kicker.with_labels(_retries=retries) |
| 68 | + max_retries = int(message.labels.get("max_retries", self.default_retry_count)) |
61 | 69 |
|
62 | 70 | if retries < max_retries: |
63 | 71 | logger.info( |
64 | 72 | "Task '%s' invocation failed. Retrying.", |
65 | 73 | message.task_name, |
66 | 74 | ) |
67 | | - broker_message = self.broker.formatter.dumps(message=new_msg) |
68 | | - await self.broker.kick(broker_message) |
| 75 | + await kicker.kiq(*message.args, **message.kwargs) |
69 | 76 |
|
70 | 77 | if self.no_result_on_retry: |
71 | 78 | result.error = NoResultError() |
|
0 commit comments