fix: 修复任务长期运行中卡住
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
from datetime import UTC, datetime, timedelta
|
||||
|
||||
from fastapi.testclient import TestClient
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.pool import StaticPool
|
||||
|
||||
from app.db import Base, get_db_session
|
||||
@@ -92,6 +95,47 @@ def test_create_task_returns_400_when_running_task_exists():
|
||||
app.dependency_overrides.clear()
|
||||
|
||||
|
||||
def test_create_task_recovers_stale_running_task_before_creating_new_one(monkeypatch):
|
||||
client, engine = make_test_client()
|
||||
now = datetime(2026, 7, 3, 12, 0, tzinfo=UTC)
|
||||
monkeypatch.setattr("app.services.task_service.utc_now", lambda: now)
|
||||
monkeypatch.setattr("app.services.task_service.task_executor.submit", lambda *_args, **_kwargs: None)
|
||||
try:
|
||||
with Session(engine) as session:
|
||||
session.add(
|
||||
Task(
|
||||
id="stale-running",
|
||||
platform="douyin",
|
||||
status="running",
|
||||
current_stage="ai_analysis",
|
||||
last_progress_at=now - timedelta(minutes=11),
|
||||
)
|
||||
)
|
||||
session.commit()
|
||||
|
||||
response = client.post(
|
||||
"/api/tasks",
|
||||
json={
|
||||
"platform": "douyin",
|
||||
"hotspot_limit": 5,
|
||||
"item_limit_per_hotspot": 5,
|
||||
"comment_limit_per_item": 50,
|
||||
},
|
||||
)
|
||||
|
||||
with Session(engine) as session:
|
||||
stale_task = session.get(Task, "stale-running")
|
||||
|
||||
assert response.status_code == 201
|
||||
assert stale_task.status == "failed"
|
||||
assert stale_task.error_stage == "system"
|
||||
assert stale_task.error_type == "stale_progress_timeout"
|
||||
assert "超过 10 分钟没有进度更新" in stale_task.error_message
|
||||
finally:
|
||||
engine.dispose()
|
||||
app.dependency_overrides.clear()
|
||||
|
||||
|
||||
def test_task_list_and_detail_return_created_tasks():
|
||||
client, engine = make_test_client()
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user