From 9ad8c0094e8bbc2c400b4741ba7b0465da5f171c Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Wed, 18 Jun 2025 12:33:53 +0200 Subject: [PATCH 1/6] Add Redis to conditional requirements --- lib/galaxy/dependencies/__init__.py | 7 +++++++ lib/galaxy/dependencies/conditional-requirements.txt | 1 + 2 files changed, 8 insertions(+) diff --git a/lib/galaxy/dependencies/__init__.py b/lib/galaxy/dependencies/__init__.py index 9d891f1be6c..79735fa64f5 100644 --- a/lib/galaxy/dependencies/__init__.py +++ b/lib/galaxy/dependencies/__init__.py @@ -320,6 +320,13 @@ class ConditionalDependencies: def check_rucio_clients(self): return "rucio" in self.object_stores + def check_redis(self): + celery_enabled = self.config.get("enable_celery_tasks", False) + celery_conf = self.config.get("celery_conf") or {} + celery_result_backend = celery_conf.get("result_backend") or "" + celery_broker_url = celery_conf.get("broker_url") or "" + return celery_enabled and celery_result_backend.startswith("redis") or celery_broker_url.startswith("redis") + def optional(config_file=None): if not config_file: diff --git a/lib/galaxy/dependencies/conditional-requirements.txt b/lib/galaxy/dependencies/conditional-requirements.txt index dcc846e2016..daacee72966 100644 --- a/lib/galaxy/dependencies/conditional-requirements.txt +++ b/lib/galaxy/dependencies/conditional-requirements.txt @@ -15,6 +15,7 @@ galaxycloudrunner pkce total-perspective-vortex>=2.3.2,<3 openai +redis==5.3.0 # For file sources plugins fs.webdavfs>=0.4.2 # type: webdav From 53ace944684f4cb20b65c5769cebc8fda941a5af Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Wed, 18 Jun 2025 12:34:17 +0200 Subject: [PATCH 2/6] Add unit test for conditional Redis configuration --- test/unit/app/dependencies/test_deps.py | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/unit/app/dependencies/test_deps.py b/test/unit/app/dependencies/test_deps.py index 13ce79e7bc8..1193b27dadf 100644 --- a/test/unit/app/dependencies/test_deps.py +++ b/test/unit/app/dependencies/test_deps.py @@ -3,6 +3,8 @@ from contextlib import contextmanager from shutil import rmtree from tempfile import mkdtemp +import pytest + from galaxy.dependencies import ConditionalDependencies AZURE_BLOB_TEST_CONFIG = """ @@ -122,6 +124,44 @@ def test_vault_hashicorp_configured(): assert not cds.check_custos_sdk() +@pytest.mark.parametrize( + "config,expected", + [ + ( + { + "enable_celery_tasks": True, + }, + False, + ), + ( + { + "enable_celery_tasks": True, + "celery_conf": {"result_backend": None}, + }, + False, + ), + ( + { + "enable_celery_tasks": True, + "celery_conf": {"broker_url": "redis://localhost:6379/0"}, + }, + True, + ), + ( + { + "enable_celery_tasks": True, + "celery_conf": {"result_backend": "redis://localhost:6379/0"}, + }, + True, + ), + ], +) +def test_conditional_redis(config, expected): + with _config_context() as cc: + cds = cc.get_cond_deps(config=config) + assert cds.check_redis() is expected + + @contextmanager def _config_context(): config_dir = mkdtemp() From 9ea62b1ff85e4bed1ca59be83081e87d9fdbd872 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20L=C3=B3pez?= <46503462+davelopez@users.noreply.github.com> Date: Wed, 18 Jun 2025 14:45:51 +0200 Subject: [PATCH 3/6] Set minimum redis version to 5.3.0 Co-authored-by: Marius van den Beek --- lib/galaxy/dependencies/conditional-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/dependencies/conditional-requirements.txt b/lib/galaxy/dependencies/conditional-requirements.txt index daacee72966..a3721b233e4 100644 --- a/lib/galaxy/dependencies/conditional-requirements.txt +++ b/lib/galaxy/dependencies/conditional-requirements.txt @@ -15,7 +15,7 @@ galaxycloudrunner pkce total-perspective-vortex>=2.3.2,<3 openai -redis==5.3.0 +redis>=5.3.0 # For file sources plugins fs.webdavfs>=0.4.2 # type: webdav From e0d3ebc110ee5f6afee3df1ed1fb4772706c1e4d Mon Sep 17 00:00:00 2001 From: Marius van den Beek Date: Sat, 21 Jun 2025 11:00:05 +0200 Subject: [PATCH 4/6] Make redis check a little more specific Co-authored-by: Nicola Soranzo --- lib/galaxy/dependencies/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/dependencies/__init__.py b/lib/galaxy/dependencies/__init__.py index 79735fa64f5..19b4012babe 100644 --- a/lib/galaxy/dependencies/__init__.py +++ b/lib/galaxy/dependencies/__init__.py @@ -325,7 +325,7 @@ class ConditionalDependencies: celery_conf = self.config.get("celery_conf") or {} celery_result_backend = celery_conf.get("result_backend") or "" celery_broker_url = celery_conf.get("broker_url") or "" - return celery_enabled and celery_result_backend.startswith("redis") or celery_broker_url.startswith("redis") + return celery_enabled and celery_result_backend.startswith("redis://") or celery_broker_url.startswith("redis://") def optional(config_file=None): From 74a4f30c5bc6de972079caf6118e604462a796b7 Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Mon, 23 Jun 2025 09:17:07 +0200 Subject: [PATCH 5/6] Fix format --- lib/galaxy/dependencies/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/galaxy/dependencies/__init__.py b/lib/galaxy/dependencies/__init__.py index 19b4012babe..089ba93bd35 100644 --- a/lib/galaxy/dependencies/__init__.py +++ b/lib/galaxy/dependencies/__init__.py @@ -325,7 +325,9 @@ class ConditionalDependencies: celery_conf = self.config.get("celery_conf") or {} celery_result_backend = celery_conf.get("result_backend") or "" celery_broker_url = celery_conf.get("broker_url") or "" - return celery_enabled and celery_result_backend.startswith("redis://") or celery_broker_url.startswith("redis://") + return ( + celery_enabled and celery_result_backend.startswith("redis://") or celery_broker_url.startswith("redis://") + ) def optional(config_file=None): From f3ae4b2fd54e1f132f34ff40218aad44b3dd65d0 Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Mon, 23 Jun 2025 11:28:31 +0200 Subject: [PATCH 6/6] Improve Redis URL validation in conditional dependencies check --- lib/galaxy/dependencies/__init__.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/dependencies/__init__.py b/lib/galaxy/dependencies/__init__.py index 089ba93bd35..66fd94e9ba3 100644 --- a/lib/galaxy/dependencies/__init__.py +++ b/lib/galaxy/dependencies/__init__.py @@ -325,9 +325,13 @@ class ConditionalDependencies: celery_conf = self.config.get("celery_conf") or {} celery_result_backend = celery_conf.get("result_backend") or "" celery_broker_url = celery_conf.get("broker_url") or "" - return ( - celery_enabled and celery_result_backend.startswith("redis://") or celery_broker_url.startswith("redis://") - ) + + def is_redis_url(url: str) -> bool: + # https://docs.celeryq.dev/en/stable/userguide/configuration.html#conf-redis-result-backend + protocol = url.split("://")[0] + return protocol in {"redis", "rediss", "redis+socket", "socket"} + + return celery_enabled and is_redis_url(celery_result_backend) or is_redis_url(celery_broker_url) def optional(config_file=None):