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