核心变更:
1. GridAxisValue 源精度命名
- 新增 GridAxisValue 类型,携带 f64 数值 + YAML 源书写文本(Deref 透明兼容算术)
- config.rs 绕过 serde_yaml 归一化,逐 token 捕获轴值原文(logg: 5.0 → g5.0)
- runner/executor/scheduler 全链路改用 DB TEXT 列权威 point_name,
修复 REAL 列回读丢精度导致的 model_name 错配
2. 工作流执行可观测台
- 新增 stats/progress/points 三组 API(进度时间序列、经验速率 ETA、
停滞预警、逐点明细分页、收敛性热力图数据)
- 新增 workflow_progress_snapshots 表 + tasks/grid_points 耗时列
- runner 携带 last_iter/worst_depth/n_depths 进 conv.json
- 前端新增 hash 路由、工作流详情页(概览/网格点/收敛分析三 Tab)、YAML 编辑器
3. 节点停用/启用管理
- 新增 disabled 状态 + disable/enable API;停用节点保持心跳但停止分发,
worker 空闲待命而非退出;移除 revoke API,token 失效统一走重发覆盖;
移除 host_name 字段
4. 白名单结果归档
- 新增 result_filter 模块,只归档有语义产物,丢弃 Tlusty 中间单元(~2MB/模型)
- executor 原子写入归档 + 200 点 LRU 上限
5. 历史数据导入
- sync_seeds 重写为 import_results:经 /admin/import_seed 标记 converged +
按新版命名迁移产物树
6. 部署与目录重规划
- data/results→seeds、data/archive→result + migrate_data_dirs.sh
- deploy.sh 增强(SSH 复用、Profile、远程 env);Dockerfile 瘦身
7. 文档同步更新 api/database/architecture/deployment
108 lines
4.1 KiB
Bash
Executable File
108 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 一次性数据目录迁移:results→seeds、archive→result(目录重命名后的历史数据搬迁)。
|
||
#
|
||
# 背景:data 目录重新规划后,两个子目录改名:
|
||
# data/results/ → data/seeds/ (server 种子库;原名 results 误导,实际只存种子)
|
||
# data/archive/ → data/result/ (node 完整计算结果归档;原名 archive 不够准确)
|
||
# 本脚本把已落盘的旧目录搬到新位置,并修正 DB 的 seeds.file_path 审计字段。
|
||
#
|
||
# 关键事实(已确认):
|
||
# - download_seed 端点不读 seeds.file_path(从 seeds_dir 重拼路径),故 DB 迁移失败
|
||
# 不影响功能;但保持审计一致仍建议执行。
|
||
# - 迁移需在 server 停机时进行(mv 整目录 + 写 DB)。
|
||
#
|
||
# 用法:
|
||
# ./scripts/migrate_data_dirs.sh # dry-run,只看将做什么
|
||
# ./scripts/migrate_data_dirs.sh --apply # 实际执行
|
||
#
|
||
# 环境变量:
|
||
# DCTS_DATA_DIR 数据根目录(默认 data)
|
||
# DCTS_DB_PATH 主库路径(默认 data/dcts.db,相对 DCTS_DATA_DIR)
|
||
|
||
set -euo pipefail
|
||
|
||
DATA_DIR="${DCTS_DATA_DIR:-data}"
|
||
DB_PATH="${DCTS_DB_PATH:-${DCTS_DATA_DIR:-data}/dcts.db}"
|
||
APPLY=0
|
||
if [[ "${1:-}" == "--apply" ]]; then
|
||
APPLY=1
|
||
fi
|
||
|
||
run_or_echo() {
|
||
# dry-run 时打印命令,--apply 时执行
|
||
if [[ $APPLY -eq 1 ]]; then
|
||
eval "$1"
|
||
else
|
||
echo " [dry-run] $1"
|
||
fi
|
||
}
|
||
|
||
echo "数据根目录: $DATA_DIR"
|
||
echo "主库路径: $DB_PATH"
|
||
echo "模式: $([[ $APPLY -eq 1 ]] && echo ' APPLY(实际执行)' || echo ' dry-run(只预览)')"
|
||
echo "------------------------------------------------"
|
||
|
||
moved=0
|
||
|
||
# 1. results → seeds
|
||
OLD_RESULTS="${DATA_DIR}/results"
|
||
NEW_SEEDS="${DATA_DIR}/seeds"
|
||
if [[ -d "$OLD_RESULTS" ]]; then
|
||
echo "[1/2] 发现旧目录 $OLD_RESULTS"
|
||
if [[ -d "$NEW_SEEDS" ]]; then
|
||
echo " ⚠️ 目标 $NEW_SEEDS 已存在!不会自动合并,请手动处理后重跑。"
|
||
else
|
||
run_or_echo "mv '$OLD_RESULTS' '$NEW_SEEDS'"
|
||
moved=$((moved + 1))
|
||
echo " → results 重命名为 seeds"
|
||
fi
|
||
else
|
||
echo "[1/2] 旧目录 $OLD_RESULTS 不存在,跳过"
|
||
fi
|
||
|
||
# 2. archive → result
|
||
OLD_ARCHIVE="${DATA_DIR}/archive"
|
||
NEW_RESULT="${DATA_DIR}/result"
|
||
if [[ -d "$OLD_ARCHIVE" ]]; then
|
||
echo "[2/2] 发现旧目录 $OLD_ARCHIVE"
|
||
if [[ -d "$NEW_RESULT" ]]; then
|
||
echo " ⚠️ 目标 $NEW_RESULT 已存在!不会自动合并,请手动处理后重跑。"
|
||
else
|
||
run_or_echo "mv '$OLD_ARCHIVE' '$NEW_RESULT'"
|
||
moved=$((moved + 1))
|
||
echo " → archive 重命名为 result"
|
||
fi
|
||
else
|
||
echo "[2/2] 旧目录 $OLD_ARCHIVE 不存在,跳过"
|
||
fi
|
||
|
||
# 3. DB seeds.file_path 审计字段修正(非功能性,但保持一致)
|
||
echo "------------------------------------------------"
|
||
if [[ -f "$DB_PATH" ]] && command -v sqlite3 >/dev/null 2>&1; then
|
||
# 统计待更新的行数(results→seeds)
|
||
STMT_COUNT="SELECT COUNT(*) FROM seeds WHERE file_path LIKE '%/results/%';"
|
||
if [[ $APPLY -eq 1 ]]; then
|
||
cnt=$(sqlite3 "$DB_PATH" "$STMT_COUNT" 2>/dev/null || echo "0")
|
||
else
|
||
# dry-run:尝试只读,读不到就标"无法预览"
|
||
cnt=$(sqlite3 "file:${DB_PATH}?mode=ro" "$STMT_COUNT" 2>/dev/null || echo "?")
|
||
fi
|
||
echo "[3/3] DB seeds.file_path 含旧路径的行数: $cnt"
|
||
if [[ "$cnt" != "0" && "$cnt" != "?" ]]; then
|
||
# 把路径中的 /results/ 替换为 /seeds/
|
||
run_or_echo "sqlite3 \"$DB_PATH\" \"UPDATE seeds SET file_path = REPLACE(file_path, '/results/', '/seeds/') WHERE file_path LIKE '%/results/%';\""
|
||
echo " → 已修正 seeds.file_path 审计路径"
|
||
fi
|
||
else
|
||
echo "[3/3] 跳过 DB 迁移:$DB_PATH 不存在或无 sqlite3 命令"
|
||
echo " (download_seed 不读此列,不影响功能;可后续手动执行 UPDATE)"
|
||
fi
|
||
|
||
echo "------------------------------------------------"
|
||
if [[ $APPLY -eq 1 ]]; then
|
||
echo "✅ 完成:迁移了 $moved 个目录"
|
||
else
|
||
echo "✅ dry-run 完成。加 --apply 实际执行。"
|
||
echo " ⚠️ 执行前请先停掉 server(mv 整目录 + 写 DB 需停机)。"
|
||
fi
|