test: the stall-sweep tests read the thresholds they check, and stay clear of the new import value (#4432)
CI and images / lint (push) Successful in 3s
CI and images / extension-version (push) Successful in 4s
CI and images / extension-test (push) Successful in 18s
CI and images / frontend-build (push) Successful in 23s
CI and images / backend-lint-and-test (push) Successful in 33s
CI and images / integration (push) Successful in 2m21s
CI and images / sign-extension (push) Successful in 3s
CI and images / build-agent (push) Successful in 6s
CI and images / build-web (push) Successful in 1m39s
CI and images / smoke-web (push) Successful in 56s
CI and images / promote (push) Successful in 1s
CI and images / lint (push) Successful in 3s
CI and images / extension-version (push) Successful in 4s
CI and images / extension-test (push) Successful in 18s
CI and images / frontend-build (push) Successful in 23s
CI and images / backend-lint-and-test (push) Successful in 33s
CI and images / integration (push) Successful in 2m21s
CI and images / sign-extension (push) Successful in 3s
CI and images / build-agent (push) Successful in 6s
CI and images / build-web (push) Successful in 1m39s
CI and images / smoke-web (push) Successful in 56s
CI and images / promote (push) Successful in 1s
Run 7505 failed test_recover_stalled_task_runs_ml_queue_uses_longer_threshold. It restated the old 25-minute ml threshold as a 30-minute "stale" row, which is now inside the 40-minute window. The test now reads the value from QUEUE_STUCK_THRESHOLD_MINUTES. The archive test's fast-import row was exactly 10 minutes old, which is the new import threshold, so it passed only by the milliseconds between seeding and sweeping. It is now 15 minutes old. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVjrnpQjRgHdvq95rASoiR
This commit is contained in:
+19
-14
@@ -335,26 +335,30 @@ def test_recover_stalled_task_runs_ml_queue_uses_longer_threshold(db_sync):
|
|||||||
"""ml-queue tasks (embed_image video branch) legitimately run
|
"""ml-queue tasks (embed_image video branch) legitimately run
|
||||||
past the default 5-min threshold. The sweep must NOT flag an
|
past the default 5-min threshold. The sweep must NOT flag an
|
||||||
ml-queue task that's only been running 10 min — the override
|
ml-queue task that's only been running 10 min — the override
|
||||||
threshold (25 min via QUEUE_STUCK_THRESHOLD_MINUTES) protects
|
threshold (QUEUE_STUCK_THRESHOLD_MINUTES["ml"]) protects in-flight
|
||||||
in-flight video tagging. Operator-flagged 2026-05-28 after
|
video tagging. Operator-flagged 2026-05-28 after image 6288 (mp4)
|
||||||
image 6288 (mp4) was marked failed at the 5-min tick mid-run."""
|
was marked failed at the 5-min tick mid-run. Read from the table
|
||||||
|
rather than restated: the value moved 25 -> 40 in #4432."""
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
|
||||||
from backend.app.models import TaskRun
|
from backend.app.models import TaskRun
|
||||||
from backend.app.tasks.maintenance import recover_stalled_task_runs
|
from backend.app.tasks.maintenance import (
|
||||||
|
QUEUE_STUCK_THRESHOLD_MINUTES,
|
||||||
|
recover_stalled_task_runs,
|
||||||
|
)
|
||||||
|
|
||||||
|
ml_threshold = QUEUE_STUCK_THRESHOLD_MINUTES["ml"]
|
||||||
now = datetime.now(UTC)
|
now = datetime.now(UTC)
|
||||||
# 10-min-old ml-queue row: stale by the default 5-min rule but
|
# 10-min-old ml-queue row: stale by the default 5-min rule but
|
||||||
# fresh by the 25-min ml override. Must survive the sweep.
|
# fresh by the ml override. Must survive the sweep.
|
||||||
ml_fresh_id = _make_task_run(
|
ml_fresh_id = _make_task_run(
|
||||||
db_sync, status="running", queue="ml",
|
db_sync, status="running", queue="ml",
|
||||||
started_at=now - timedelta(minutes=10),
|
started_at=now - timedelta(minutes=10),
|
||||||
)
|
)
|
||||||
# 30-min-old ml-queue row: past even the ml override. Must be
|
# Past even the ml override. Must be flagged.
|
||||||
# flagged.
|
|
||||||
ml_stale_id = _make_task_run(
|
ml_stale_id = _make_task_run(
|
||||||
db_sync, status="running", queue="ml",
|
db_sync, status="running", queue="ml",
|
||||||
started_at=now - timedelta(minutes=30),
|
started_at=now - timedelta(minutes=ml_threshold + 5),
|
||||||
)
|
)
|
||||||
db_sync.commit()
|
db_sync.commit()
|
||||||
|
|
||||||
@@ -431,9 +435,10 @@ def test_download_stuck_threshold_exceeds_hard_time_limit():
|
|||||||
def test_recover_stalled_task_runs_archive_task_uses_longer_threshold(db_sync):
|
def test_recover_stalled_task_runs_archive_task_uses_longer_threshold(db_sync):
|
||||||
"""import_archive_file shares the 'import' queue with fast
|
"""import_archive_file shares the 'import' queue with fast
|
||||||
single-file import_media_file, so it gets a per-task-name override
|
single-file import_media_file, so it gets a per-task-name override
|
||||||
(40 min) while the import queue stays at the 5-min default. A
|
(40 min) while the import queue keeps its short threshold (10 min
|
||||||
10-min-old archive task-run must survive; a 50-min-old one is
|
since #4432; import_media_file's hard limit is 6). A 10-min-old
|
||||||
flagged. Operator-flagged 2026-05-28."""
|
archive task-run must survive; a 50-min-old one is flagged.
|
||||||
|
Operator-flagged 2026-05-28."""
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
|
||||||
from backend.app.models import TaskRun
|
from backend.app.models import TaskRun
|
||||||
@@ -441,12 +446,12 @@ def test_recover_stalled_task_runs_archive_task_uses_longer_threshold(db_sync):
|
|||||||
|
|
||||||
archive_name = "backend.app.tasks.import_file.import_archive_file"
|
archive_name = "backend.app.tasks.import_file.import_archive_file"
|
||||||
now = datetime.now(UTC)
|
now = datetime.now(UTC)
|
||||||
# Fast single-file import on the same queue, 10 min old → flagged
|
# Fast single-file import on the same queue, 15 min old → flagged
|
||||||
# by the default 5-min rule.
|
# by the import queue's 10-min threshold.
|
||||||
media_id = _make_task_run(
|
media_id = _make_task_run(
|
||||||
db_sync, status="running", queue="import",
|
db_sync, status="running", queue="import",
|
||||||
task_name="backend.app.tasks.import_file.import_media_file",
|
task_name="backend.app.tasks.import_file.import_media_file",
|
||||||
started_at=now - timedelta(minutes=10),
|
started_at=now - timedelta(minutes=15),
|
||||||
)
|
)
|
||||||
# Archive on the same queue, 10 min old → survives (40-min override).
|
# Archive on the same queue, 10 min old → survives (40-min override).
|
||||||
archive_fresh_id = _make_task_run(
|
archive_fresh_id = _make_task_run(
|
||||||
|
|||||||
Reference in New Issue
Block a user