fix(walkforward): SSE 放弃时清 localStorage + JSON 解析失败告警

跨组件后续修复的 WF 侧 (优化器侧同款问题另起 PR):
- stopWalkForward 延迟分支 + MAX_RECONNECT 超限退出漏清 localStorage, 导致刷新页面
  tryReconnect 会重连到已放弃/未取消的任务。两处补 removeItem(RECONNECT_KEY/JOB_KEY_KEY)。
- walkforward_stream 的 params/overrides JSON 解析失败静默降级为 {}/None, 会让用户配置
  丢失变成无声 bug。升级为 logger.warning (仍降级不崩流, 但可诊断)。
This commit is contained in:
im47cn
2026-07-12 22:18:11 +08:00
parent e4262d9951
commit 5ea58f6a8d
2 changed files with 18 additions and 1 deletions
+6
View File
@@ -3,6 +3,7 @@ from __future__ import annotations
import asyncio
import json
import logging
import queue
import threading
from dataclasses import asdict
@@ -21,6 +22,8 @@ from app.services.backtest import (
is_available,
)
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api/backtest", tags=["backtest"])
FACTOR_DEFAULT_DAYS = 180
@@ -840,10 +843,13 @@ async def walkforward_stream(
try:
base_params = json.loads(params) if params else {}
except (json.JSONDecodeError, TypeError):
# 静默降级会让"用户配置丢失"变成无声 bug: 至少 warn 供诊断 (前端应传合法 JSON)。
logger.warning("walkforward: params JSON 解析失败, 降级为空 params: %r", params)
base_params = {}
try:
ov = json.loads(overrides) if overrides else None
except (json.JSONDecodeError, TypeError):
logger.warning("walkforward: overrides JSON 解析失败, 降级为 None: %r", overrides)
ov = None
wf_cfg = WalkForwardConfig(
strategy_id=strategy_id,