fix: 评测任务软删除健壮性增强,删除不存在任务返回 404
- delete_eval_task 用 RETURNING 校验记录存在性与重复删除,否则抛 KeyError - eval_tasks/eval_task 列表与详情过滤已软删除记录(deleted_at IS NULL) - model_eval_delete 捕获 KeyError 返回 404,避免接口崩溃 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -2305,7 +2305,10 @@ async def model_eval_delete(task_id: str, current_user: dict = Depends(get_curre
|
||||
pending = _require_approval_or_admin("eval", task_id, current_user, f"删除评测任务 {task_id}")
|
||||
if pending:
|
||||
return pending
|
||||
try:
|
||||
get_platform_store().delete_eval_task(task_id)
|
||||
except KeyError:
|
||||
raise fail(404, "eval task not found")
|
||||
return ok({"deleted": task_id})
|
||||
|
||||
|
||||
|
||||
@@ -2515,12 +2515,18 @@ class PlatformStore:
|
||||
|
||||
def eval_tasks(self) -> list[dict[str, Any]]:
|
||||
with self.connect() as conn:
|
||||
rows = conn.execute("SELECT * FROM eval_tasks ORDER BY create_time DESC").fetchall()
|
||||
# 评测任务采用软删除,普通列表不得再次返回已删除记录。
|
||||
rows = conn.execute(
|
||||
"SELECT * FROM eval_tasks WHERE deleted_at IS NULL ORDER BY create_time DESC"
|
||||
).fetchall()
|
||||
return [self._enrich_eval_payload(conn, self._json_payload_row(row)) for row in rows]
|
||||
|
||||
def eval_task(self, task_id: str) -> dict[str, Any]:
|
||||
with self.connect() as conn:
|
||||
row = conn.execute("SELECT * FROM eval_tasks WHERE id=?", (task_id,)).fetchone()
|
||||
row = conn.execute(
|
||||
"SELECT * FROM eval_tasks WHERE id=? AND deleted_at IS NULL",
|
||||
(task_id,),
|
||||
).fetchone()
|
||||
if not row:
|
||||
raise KeyError(task_id)
|
||||
payload = self._enrich_eval_payload(conn, self._json_payload_row(row))
|
||||
@@ -2591,7 +2597,13 @@ class PlatformStore:
|
||||
|
||||
def delete_eval_task(self, task_id: str) -> None:
|
||||
with self.connect() as conn:
|
||||
conn.execute("UPDATE eval_tasks SET deleted_at=?, deleted_by=? WHERE id=?", (utcnow(), "system", task_id))
|
||||
result = conn.execute(
|
||||
"UPDATE eval_tasks SET deleted_at=?, deleted_by=? "
|
||||
"WHERE id=? AND deleted_at IS NULL RETURNING id",
|
||||
(utcnow(), "system", task_id),
|
||||
)
|
||||
if not result.fetchone():
|
||||
raise KeyError(task_id)
|
||||
|
||||
def running_eval_tasks(self) -> list[dict[str, Any]]:
|
||||
"""Return eval tasks that have been submitted to a compute node and are still running."""
|
||||
|
||||
Reference in New Issue
Block a user