From b842dbf024c131e6abbc11e564009167f2c71afb Mon Sep 17 00:00:00 2001 From: natthan-pigoux Date: Tue, 24 Mar 2026 13:37:10 +0100 Subject: [PATCH 1/2] feat: tasks to clean sandbox store --- diracx-tasks/pyproject.toml | 3 ++ .../diracx/tasks/jobs/clean_sandbox_store.py | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 diracx-tasks/src/diracx/tasks/jobs/clean_sandbox_store.py diff --git a/diracx-tasks/pyproject.toml b/diracx-tasks/pyproject.toml index dc8ac587a..def809d82 100644 --- a/diracx-tasks/pyproject.toml +++ b/diracx-tasks/pyproject.toml @@ -35,6 +35,9 @@ diracx-task-run = "diracx.tasks.task_run:main" [project.entry-points."diracx.dbs.sql"] TaskDB = "diracx.tasks.plumbing.persistence:TaskDB" +[project.entry-points."diracx.tasks.jobs"] +CleanSandboxStoreTask = "diracx.tasks.jobs:CleanSandboxStoreTask" + [build-system] requires = ["hatchling", "hatch-vcs"] build-backend = "hatchling.build" diff --git a/diracx-tasks/src/diracx/tasks/jobs/clean_sandbox_store.py b/diracx-tasks/src/diracx/tasks/jobs/clean_sandbox_store.py new file mode 100644 index 000000000..cb16ab8a3 --- /dev/null +++ b/diracx-tasks/src/diracx/tasks/jobs/clean_sandbox_store.py @@ -0,0 +1,31 @@ +"""Task definition to clean Sandbox Store.""" + +from __future__ import annotations + +import dataclasses +from typing import Annotated + +from diracx.core.settings import SandboxStoreSettings +from diracx.db.sql import SandboxMetadataDB +from diracx.logic.jobs.sandboxes import clean_sandboxes +from diracx.tasks.plumbing.base_task import PeriodicBaseTask +from diracx.tasks.plumbing.enums import Priority, Size +from diracx.tasks.plumbing.retry_policies import ExponentialBackoff +from diracx.tasks.plumbing.schedules import CronSchedule + +from .depends import NoTransaction + + +@dataclasses.dataclass +class CleanSandboxStoreTask(PeriodicBaseTask): + priority = Priority.BACKGROUND + size = Size.MEDIUM + retry_policy = ExponentialBackoff(base_delay_seconds=300, max_retries=3) + default_schedule = CronSchedule("0 6 * * *") + + async def execute( + self, + sandbox_metadata_db: Annotated[SandboxMetadataDB, NoTransaction()], + settings: SandboxStoreSettings, + ) -> int: + return await clean_sandboxes(sandbox_metadata_db, settings) From bffb6c6d99715d5fa8aabbc50e7ea217b01e904d Mon Sep 17 00:00:00 2001 From: Chris Burr Date: Wed, 8 Apr 2026 11:24:07 +0200 Subject: [PATCH 2/2] chore: Regenerate lock file --- pixi.lock | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/pixi.lock b/pixi.lock index a0fee9acf..cbab302b2 100644 --- a/pixi.lock +++ b/pixi.lock @@ -19241,7 +19241,7 @@ packages: requires_python: '>=3.11' - pypi: ./ name: diracx - version: 0.0.12.dev6+g26dd02621 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: 1f78b10647ef5e2e13a5438ef3c7f2ac2c051773bf180e30f00fdc45a328425f requires_dist: - diracx-api @@ -19252,7 +19252,7 @@ packages: requires_python: '>=3.11' - pypi: ./diracx-api name: diracx-api - version: 0.0.9.dev26+g26efc441d.d20260217 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: fce056f16b4ca37c0b2847bf95cf7cf02d2f75b1bc63793efd3fc959dfbc0cb9 requires_dist: - diracx-client @@ -19263,7 +19263,7 @@ packages: requires_python: '>=3.11' - pypi: ./diracx-cli name: diracx-cli - version: 0.0.9.dev26+g26efc441d.d20260217 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: a9c02d48d01723886e3f95b1379cf844587bbca1cc354e629dc221266fbeef8c requires_dist: - diraccfg @@ -19280,7 +19280,7 @@ packages: requires_python: '>=3.11' - pypi: ./diracx-client name: diracx-client - version: 0.0.9.dev26+g26efc441d.d20260217 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: 3d974bce5bd5a086bb1e8e6263dbab10927dfc446d4ff44836433a18508bd727 requires_dist: - azure-core @@ -19292,7 +19292,7 @@ packages: requires_python: '>=3.11' - pypi: ./diracx-core name: diracx-core - version: 0.0.11.dev6+g0a1fe118a + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: febb534a1a976612961f00cc690f64ff4f4f6ecef7a649fb1413602b3bb9f6fd requires_dist: - aiobotocore>=2.15 @@ -19314,10 +19314,10 @@ packages: - types-cachetools ; extra == 'types' - types-pyyaml ; extra == 'types' requires_python: '>=3.11' -- pypi: ./diracx-db +- pypi: https://files.pythonhosted.org/packages/28/74/e003b78633339e76e4c6bcebb32afbb25edf49fb33ea9b0122a03727e5e0/diracx_db-0.0.11-py3-none-any.whl name: diracx-db - version: 0.0.9.dev26+g26efc441d.d20260217 - sha256: 55e3f8e41ada508c6d544766d0c8f2dfcc6d798a127e176e2050a4aa5cb8d228 + version: 0.0.11 + sha256: 48e20daeee73c5e2feaae03a94545ffbd50387506b9abe840c9e97a425a5de36 requires_dist: - diracx-core - opensearch-py[async] @@ -19329,10 +19329,10 @@ packages: - freezegun ; extra == 'testing' - types-python-dateutil ; extra == 'types' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/28/74/e003b78633339e76e4c6bcebb32afbb25edf49fb33ea9b0122a03727e5e0/diracx_db-0.0.11-py3-none-any.whl +- pypi: ./diracx-db name: diracx-db - version: 0.0.11 - sha256: 48e20daeee73c5e2feaae03a94545ffbd50387506b9abe840c9e97a425a5de36 + version: 0.0.13.dev10+ge74cb7c97.d20260408 + sha256: 55e3f8e41ada508c6d544766d0c8f2dfcc6d798a127e176e2050a4aa5cb8d228 requires_dist: - diracx-core - opensearch-py[async] @@ -19344,10 +19344,10 @@ packages: - freezegun ; extra == 'testing' - types-python-dateutil ; extra == 'types' requires_python: '>=3.11' -- pypi: ./diracx-logic +- pypi: https://files.pythonhosted.org/packages/81/2c/9f35d11768e62a54b0f78e0effccc907645584641d82ad6bd3a70a185cc8/diracx_logic-0.0.11-py3-none-any.whl name: diracx-logic - version: 0.0.9.dev26+g26efc441d.d20260217 - sha256: e7e3d6391b7d5b6d4ce909ef500ac152b149c7c48f80802320a0baead3e9ba3e + version: 0.0.11 + sha256: 23bd4b996d46753ccbd7d02e86a96f8994a6d984785f2aafefab6d589727a15c requires_dist: - cachetools - diraccommon>=9.0.18 @@ -19360,10 +19360,10 @@ packages: - freezegun ; extra == 'testing' - types-cachetools ; extra == 'types' requires_python: '>=3.11' -- pypi: https://files.pythonhosted.org/packages/81/2c/9f35d11768e62a54b0f78e0effccc907645584641d82ad6bd3a70a185cc8/diracx_logic-0.0.11-py3-none-any.whl +- pypi: ./diracx-logic name: diracx-logic - version: 0.0.11 - sha256: 23bd4b996d46753ccbd7d02e86a96f8994a6d984785f2aafefab6d589727a15c + version: 0.0.13.dev10+ge74cb7c97.d20260408 + sha256: e7e3d6391b7d5b6d4ce909ef500ac152b149c7c48f80802320a0baead3e9ba3e requires_dist: - cachetools - diraccommon>=9.0.18 @@ -19378,7 +19378,7 @@ packages: requires_python: '>=3.11' - pypi: ./diracx-routers name: diracx-routers - version: 0.0.12.dev6+g26dd02621 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: 0077513713e84925ecc3c53259ecf985514b40dfe1d7688eace6e048bfe3b727 requires_dist: - cachetools @@ -19409,8 +19409,8 @@ packages: requires_python: '>=3.11' - pypi: ./diracx-tasks name: diracx-tasks - version: 0.0.12.dev6+g26dd02621 - sha256: 752189cc698d17c76e8c240a4a82f6593a5dc040545c29a504753de135b1bd6b + version: 0.0.13.dev10+ge74cb7c97.d20260408 + sha256: 47ecbf1d4db5442abf0cb47de03b0c0ce7064cfb0f9ff9bf009c9a2041d02db1 requires_dist: - croniter - diracx-core @@ -19427,7 +19427,7 @@ packages: requires_python: '>=3.11' - pypi: ./diracx-testing name: diracx-testing - version: 0.0.9.dev26+g26efc441d.d20260217 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: 9e7f8dc219ef9a81e9d5b14c0140344ee1ddabc65222a18f17faf5b5becce456 requires_dist: - httpx @@ -20091,7 +20091,7 @@ packages: timestamp: 1748320218212 - pypi: ./extensions/gubbins name: gubbins - version: 0.0.12.dev6+g26dd02621 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: 005a02b3df8d030f0ff43a321b2a5b7c177ecca059d331a8b93c77a100ad0ceb requires_dist: - gubbins-testing ; extra == 'testing' @@ -20137,7 +20137,7 @@ packages: requires_python: '>=3.11' - pypi: ./extensions/gubbins/gubbins-db name: gubbins-db - version: 0.0.12.dev6+g26dd02621 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: 423f2a5336b71eee661db826234b2a1e22e0920da3cd66ab795372caef174d05 requires_dist: - diracx-db @@ -20146,7 +20146,7 @@ packages: requires_python: '>=3.11' - pypi: ./extensions/gubbins/gubbins-logic name: gubbins-logic - version: 0.0.12.dev7+g4810e21bf.d20260327 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: ce4627c8c026fdbdbfaa11a8b1ff1cd4e206abb53983d2e13e2459ca8c5a9b69 requires_dist: - diracx-logic @@ -20160,7 +20160,7 @@ packages: requires_python: '>=3.11' - pypi: ./extensions/gubbins/gubbins-routers name: gubbins-routers - version: 0.0.12.dev6+g26dd02621 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: ad9b00b4ea222fe7b5b2913455e9d817b8e72d8ce2ecd240f2732f4992c29951 requires_dist: - diracx-routers @@ -20177,7 +20177,7 @@ packages: requires_python: '>=3.11' - pypi: ./extensions/gubbins/gubbins-tasks name: gubbins-tasks - version: 0.0.12.dev7+g4810e21bf.d20260327 + version: 0.0.13.dev10+ge74cb7c97.d20260408 sha256: c2b53c4c625ffc5745b191eb68a1df61a7fe89cfb2a12a31f17dc8985543c1e1 requires_dist: - diracx-tasks