From 2cd2125d6270eb7fc8912d78e79ebae6b15db53b Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Tue, 9 Jun 2026 23:14:11 +0800 Subject: [PATCH] Avoid blocking cold scan requests --- tests/test_web_observability.py | 9 +++++---- web/scan_terminal_service.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/tests/test_web_observability.py b/tests/test_web_observability.py index 7a8abd8c..37167a05 100644 --- a/tests/test_web_observability.py +++ b/tests/test_web_observability.py @@ -3080,7 +3080,7 @@ def test_scan_terminal_timeout_does_not_replace_better_cached_snapshot(monkeypat assert [row["id"] for row in cached["rows"]] == ["old-1", "old-2"] -def test_scan_terminal_cold_requests_share_inflight_build(monkeypatch): +def test_scan_terminal_cold_requests_start_background_build_without_blocking(monkeypatch): import time from concurrent.futures import ThreadPoolExecutor @@ -3119,11 +3119,12 @@ def test_scan_terminal_cold_requests_share_inflight_build(monkeypatch): executor.submit(scan_terminal_service.build_scan_terminal_payload, filters), executor.submit(scan_terminal_service.build_scan_terminal_payload, filters), ] - results = [future.result(timeout=2) for future in futures] + results = [future.result(timeout=0.02) for future in futures] assert calls == 1 - assert results[0]["rows"] == [{"id": "shared-row"}] - assert results[1]["rows"] == [{"id": "shared-row"}] + assert [result["status"] for result in results] == ["failed", "failed"] + assert all(result["rows"] == [] for result in results) + assert all("初始化" in result["stale_reason"] or "刷新中" in result["stale_reason"] for result in results) def test_scan_terminal_prewarm_builds_default_terminal_payload(monkeypatch): diff --git a/web/scan_terminal_service.py b/web/scan_terminal_service.py index 1e1d3de9..008288b0 100644 --- a/web/scan_terminal_service.py +++ b/web/scan_terminal_service.py @@ -371,6 +371,16 @@ def build_scan_terminal_payload( ), failed_at=cached_entry.get("last_failed_at"), ) + started = _start_scan_terminal_background_refresh(filters) + return build_failed_scan_terminal_payload( + filters=filters, + error_message=( + "市场扫描快照正在初始化" + if started + else "市场扫描快照正在刷新中" + ), + failed_at=cached_entry.get("last_failed_at"), + ) return ( timing_recorder.measure(