refactor retry
This commit is contained in:
parent
efb10d38a2
commit
e657330ac1
@ -5,7 +5,6 @@ import shutil
|
|||||||
import httpx
|
import httpx
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from celery import states
|
from celery import states
|
||||||
from celery.exceptions import MaxRetriesExceededError
|
|
||||||
from celery.signals import before_task_publish
|
from celery.signals import before_task_publish
|
||||||
from celery.signals import task_failure
|
from celery.signals import task_failure
|
||||||
from celery.signals import task_postrun
|
from celery.signals import task_postrun
|
||||||
@ -576,6 +575,8 @@ def run_workflows_updated(sender, document: Document, logging_group=None, **kwar
|
|||||||
|
|
||||||
@shared_task(
|
@shared_task(
|
||||||
retry_backoff=True,
|
retry_backoff=True,
|
||||||
|
autoretry_for=(httpx.HTTPStatusError,),
|
||||||
|
retry_kwargs={"max_retries": 3},
|
||||||
)
|
)
|
||||||
def send_webhook(url, data, headers, files):
|
def send_webhook(url, data, headers, files):
|
||||||
try:
|
try:
|
||||||
@ -588,16 +589,11 @@ def send_webhook(url, data, headers, files):
|
|||||||
logger.info(
|
logger.info(
|
||||||
f"Webhook sent to {url}",
|
f"Webhook sent to {url}",
|
||||||
)
|
)
|
||||||
except httpx.HTTPStatusError as e:
|
except Exception as e:
|
||||||
logger.error(
|
logger.error(
|
||||||
f"Failed sending webhook to {url}: {e}",
|
f"Failed attempt sending webhook to {url}: {e}",
|
||||||
)
|
|
||||||
try:
|
|
||||||
send_webhook.retry(exc=e, max_retries=3)
|
|
||||||
except MaxRetriesExceededError:
|
|
||||||
logger.error(
|
|
||||||
f"Max retries exceeded for webhook to {url}",
|
|
||||||
)
|
)
|
||||||
|
raise e
|
||||||
|
|
||||||
|
|
||||||
def run_workflows(
|
def run_workflows(
|
||||||
|
@ -19,7 +19,6 @@ from documents.signals.handlers import send_webhook
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from django.db.models import QuerySet
|
from django.db.models import QuerySet
|
||||||
|
|
||||||
from celery.exceptions import MaxRetriesExceededError
|
|
||||||
|
|
||||||
from documents import tasks
|
from documents import tasks
|
||||||
from documents.data_models import ConsumableDocument
|
from documents.data_models import ConsumableDocument
|
||||||
@ -2539,8 +2538,7 @@ class TestWorkflows(
|
|||||||
self.assertIn(expected_str, cm.output[0])
|
self.assertIn(expected_str, cm.output[0])
|
||||||
|
|
||||||
@mock.patch("httpx.post")
|
@mock.patch("httpx.post")
|
||||||
@mock.patch("documents.signals.handlers.send_webhook.retry")
|
def test_workflow_webhook_send_webhook_retry(self, mock_http):
|
||||||
def test_workflow_webhook_send_webhook_retry(self, mock_retry, mock_http):
|
|
||||||
mock_http.return_value.raise_for_status = mock.Mock(
|
mock_http.return_value.raise_for_status = mock.Mock(
|
||||||
side_effect=HTTPStatusError(
|
side_effect=HTTPStatusError(
|
||||||
"Error",
|
"Error",
|
||||||
@ -2548,9 +2546,9 @@ class TestWorkflows(
|
|||||||
response=mock.Mock(),
|
response=mock.Mock(),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
mock_retry.side_effect = MaxRetriesExceededError("Max retries exceeded")
|
|
||||||
|
|
||||||
with self.assertLogs("paperless.handlers") as cm:
|
with self.assertLogs("paperless.handlers") as cm:
|
||||||
|
with self.assertRaises(HTTPStatusError):
|
||||||
send_webhook(
|
send_webhook(
|
||||||
url="http://paperless-ngx.com",
|
url="http://paperless-ngx.com",
|
||||||
data="Test message",
|
data="Test message",
|
||||||
@ -2558,9 +2556,9 @@ class TestWorkflows(
|
|||||||
files=None,
|
files=None,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(mock_retry.call_count, 1)
|
self.assertEqual(mock_http.call_count, 1)
|
||||||
|
|
||||||
expected_str = "Failed sending webhook to http://paperless-ngx.com"
|
expected_str = (
|
||||||
expected_str2 = "Max retries exceeded"
|
"Failed attempt sending webhook to http://paperless-ngx.com"
|
||||||
|
)
|
||||||
self.assertIn(expected_str, cm.output[0])
|
self.assertIn(expected_str, cm.output[0])
|
||||||
self.assertIn(expected_str2, cm.output[1])
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user