From c01a0fbfc6c03d1746e227e4f5afe3cea884fecd Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Wed, 28 Jan 2026 13:45:34 -0300 Subject: [PATCH] image-sweeper: raise on job failure --- ariadne/services/image_sweeper.py | 10 +++++++++- tests/test_image_sweeper.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/ariadne/services/image_sweeper.py b/ariadne/services/image_sweeper.py index 5b44c8e..cc43830 100644 --- a/ariadne/services/image_sweeper.py +++ b/ariadne/services/image_sweeper.py @@ -194,7 +194,15 @@ class ImageSweeperService: extra={"event": "image_sweeper_trigger", "job": name}, ) if wait: - return self._wait_for_completion(name, settings.image_sweeper_wait_timeout_sec) + result = self._wait_for_completion(name, settings.image_sweeper_wait_timeout_sec) + status = result.get("status") + if status != "ok": + logger.error( + "image sweeper job incomplete", + extra={"event": "image_sweeper_incomplete", "job": name, "status": status}, + ) + raise RuntimeError(f"image sweeper job {name} {status}") + return result return {"job": name, "status": "queued"} diff --git a/tests/test_image_sweeper.py b/tests/test_image_sweeper.py index 54604c7..a112f69 100644 --- a/tests/test_image_sweeper.py +++ b/tests/test_image_sweeper.py @@ -46,3 +46,31 @@ def test_image_sweeper_run_wait(monkeypatch) -> None: svc = ImageSweeperService() result = svc.run(wait=True) assert result["status"] == "ok" + + +def test_image_sweeper_run_error(monkeypatch) -> None: + dummy_settings = types.SimpleNamespace( + image_sweeper_namespace="maintenance", + image_sweeper_service_account="node-image-sweeper", + image_sweeper_job_ttl_sec=3600, + image_sweeper_wait_timeout_sec=30.0, + ) + monkeypatch.setattr(sweeper_module, "settings", dummy_settings) + + def fake_post(path, payload): + assert path.endswith("/maintenance/jobs") + return {"metadata": {"name": "job-1"}} + + def fake_get(_path): + return {"status": {"failed": 1}} + + monkeypatch.setattr(sweeper_module, "post_json", fake_post) + monkeypatch.setattr(sweeper_module, "get_json", fake_get) + + svc = ImageSweeperService() + try: + svc.run(wait=True) + except RuntimeError as exc: + assert "image sweeper job" in str(exc) + else: + raise AssertionError("expected image sweeper failure to raise")