From 6fc7f87943063ac5f0ab65ea29175996d09c5e6e Mon Sep 17 00:00:00 2001 From: mwiegand Date: Mon, 11 May 2026 22:48:28 +0200 Subject: [PATCH] overlay_builders: address code-review nits on retry helpers Co-Authored-By: Claude Sonnet 4.6 --- l4d2web/services/overlay_builders.py | 15 ++++++++------- l4d2web/tests/test_overlay_builders.py | 3 +++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/l4d2web/services/overlay_builders.py b/l4d2web/services/overlay_builders.py index 958927b..c13fd6a 100644 --- a/l4d2web/services/overlay_builders.py +++ b/l4d2web/services/overlay_builders.py @@ -10,11 +10,11 @@ from __future__ import annotations import os import subprocess import tempfile -import time as _time +import time from pathlib import Path from typing import Callable, Protocol -import requests as _requests +import requests from sqlalchemy import select from l4d2host.paths import get_left4me_root @@ -34,7 +34,8 @@ SCRIPT_SANDBOX_HELPER = "/usr/local/libexec/left4me/left4me-script-sandbox" DISK_BUDGET_BYTES = 20 * 1024**3 DOWNLOAD_RETRY_ATTEMPTS = 3 -DOWNLOAD_RETRY_BACKOFF_SECONDS = (1.0, 2.0, 4.0) +DOWNLOAD_RETRY_BACKOFF_SECONDS = (1.0, 2.0) +assert len(DOWNLOAD_RETRY_BACKOFF_SECONDS) == DOWNLOAD_RETRY_ATTEMPTS - 1 def _sleep_with_cancel( @@ -46,14 +47,14 @@ def _sleep_with_cancel( """Sleep up to `seconds`, returning early (True) if `should_cancel` becomes True. Returns False on a full uninterrupted sleep. Polls every `poll_interval` seconds.""" - deadline = _time.monotonic() + seconds + deadline = time.monotonic() + seconds while True: if should_cancel(): return True - remaining = deadline - _time.monotonic() + remaining = deadline - time.monotonic() if remaining <= 0: return False - _time.sleep(min(poll_interval, remaining)) + time.sleep(min(poll_interval, remaining)) def _download_with_retry( @@ -73,7 +74,7 @@ def _download_with_retry( return except InterruptedError: raise - except (_requests.RequestException, OSError) as exc: + except (requests.RequestException, OSError) as exc: last_exc = exc if attempt == DOWNLOAD_RETRY_ATTEMPTS: raise diff --git a/l4d2web/tests/test_overlay_builders.py b/l4d2web/tests/test_overlay_builders.py index 9b6c11a..224d5ea 100644 --- a/l4d2web/tests/test_overlay_builders.py +++ b/l4d2web/tests/test_overlay_builders.py @@ -475,6 +475,9 @@ def test_download_with_retry_exhausts_and_raises(env, tmp_path, monkeypatch): meta, tmp_path / "cache", on_stderr=on_stderr, should_cancel=lambda: False, ) + # Two stderr "attempt N/3 failed" lines for attempts 1 and 2; the final + # attempt re-raises without logging. + assert sum(1 for line in err if "attempt" in line and "failed" in line) == 2 def test_download_with_retry_propagates_interrupted(env, tmp_path, monkeypatch):