From a83179629e4131a5669b974eaca290649793eba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Rein?= Date: Tue, 24 Feb 2026 22:24:29 +0100 Subject: [PATCH] fix: configure `failure_ttl` for RQ failed jobs (#519) Signed-off-by: Pawel Rein --- docling_serve/__main__.py | 1 + docling_serve/orchestrator_factory.py | 2 ++ docling_serve/settings.py | 1 + tests/test_failure_ttl.py | 20 ++++++++++++++++++++ 4 files changed, 24 insertions(+) create mode 100644 tests/test_failure_ttl.py diff --git a/docling_serve/__main__.py b/docling_serve/__main__.py index 4ab5ad1..74b4f30 100644 --- a/docling_serve/__main__.py +++ b/docling_serve/__main__.py @@ -408,6 +408,7 @@ def rq_worker() -> Any: sub_channel=docling_serve_settings.eng_rq_sub_channel, scratch_dir=get_scratch(), results_ttl=docling_serve_settings.eng_rq_results_ttl, + failure_ttl=docling_serve_settings.eng_rq_failure_ttl, redis_max_connections=docling_serve_settings.eng_rq_redis_max_connections, redis_socket_timeout=docling_serve_settings.eng_rq_redis_socket_timeout, redis_socket_connect_timeout=docling_serve_settings.eng_rq_redis_socket_connect_timeout, diff --git a/docling_serve/orchestrator_factory.py b/docling_serve/orchestrator_factory.py index 65ef12b..f9a1cbd 100644 --- a/docling_serve/orchestrator_factory.py +++ b/docling_serve/orchestrator_factory.py @@ -496,6 +496,7 @@ def get_async_orchestrator() -> BaseOrchestrator: kwargs={"task_data": task_data}, job_id=task_id, timeout=14400, + failure_ttl=docling_serve_settings.eng_rq_failure_ttl, ) await self.init_task_tracking(task) @@ -511,6 +512,7 @@ def get_async_orchestrator() -> BaseOrchestrator: sub_channel=docling_serve_settings.eng_rq_sub_channel, scratch_dir=get_scratch(), results_ttl=docling_serve_settings.eng_rq_results_ttl, + failure_ttl=docling_serve_settings.eng_rq_failure_ttl, redis_max_connections=docling_serve_settings.eng_rq_redis_max_connections, redis_socket_timeout=docling_serve_settings.eng_rq_redis_socket_timeout, redis_socket_connect_timeout=docling_serve_settings.eng_rq_redis_socket_connect_timeout, diff --git a/docling_serve/settings.py b/docling_serve/settings.py index 8bf493b..936a419 100644 --- a/docling_serve/settings.py +++ b/docling_serve/settings.py @@ -89,6 +89,7 @@ class DoclingServeSettings(BaseSettings): eng_rq_results_prefix: str = "docling:results" eng_rq_sub_channel: str = "docling:updates" eng_rq_results_ttl: int = 3_600 * 4 # 4 hours default + eng_rq_failure_ttl: int = 3_600 * 4 # 4 hours default eng_rq_redis_max_connections: int = 50 # Connection pool size eng_rq_redis_socket_timeout: Optional[float] = None # Socket timeout in seconds eng_rq_redis_socket_connect_timeout: Optional[float] = ( diff --git a/tests/test_failure_ttl.py b/tests/test_failure_ttl.py new file mode 100644 index 0000000..2246698 --- /dev/null +++ b/tests/test_failure_ttl.py @@ -0,0 +1,20 @@ +"""Tests for RQ failure_ttl configuration in docling-serve.""" + +from docling_serve.settings import DoclingServeSettings + + +class TestFailureTTLSettings: + def test_default_failure_ttl_matches_results_ttl(self): + settings = DoclingServeSettings( + eng_rq_redis_url="redis://localhost:6379/", + ) + assert settings.eng_rq_failure_ttl == settings.eng_rq_results_ttl + assert settings.eng_rq_failure_ttl == 3_600 * 4 + + def test_failure_ttl_is_configurable(self): + settings = DoclingServeSettings( + eng_rq_redis_url="redis://localhost:6379/", + eng_rq_failure_ttl=7200, + ) + assert settings.eng_rq_failure_ttl == 7200 + assert settings.eng_rq_results_ttl == 3_600 * 4