feat(all): 科学计算正确性修复、调度竞态消除、节点优雅退出、安全加固与收敛分析重构
科学计算正确性: - 修复 Fortran 无-E 科学记数法(指数≥100 时 E 被挤掉,如 -1.35+118)导致 发散行被静默跳过、误判收敛的 bug;扩展大气无效检测覆盖 Inf 与 *** 溢出标记 - 种子匹配改为 CNO 有向距离(富金属方向重罚 4×、贫金属方向轻罚 1×), 基于 1191 个真实种子配对回测标定,回测净改善 314 个点 - GridAxisValue 反序列化拒绝非法文本(不再静默 NaN);chmax≤0 显式报错 - ions 行宽列宽对齐真实 fort.5 格式 调度与队列竞态: - 原子选点(IMMEDIATE 事务 SELECT+UPDATE)消除并发调度重复派发 (#5) - 调度互斥锁 + 冷启动优先策略(SeedStep 仅作失败后救援,不再正常路径热启动) - 毒消息 dead_letter 标记防出队死循环;clear_queue 保留 claimed 行 (#6) - 孤儿 running 点回收兜底;stale_sec 默认 7800→21600s(3 倍超时缓冲) 节点生命周期: - SIGTERM+SIGINT 双信号监听(修复 Docker stop 发 SIGTERM 不触发优雅退出) - SlotGuard RAII 防活动 slot 泄漏;子进程超时增加二级 30s wait 防 Fortran hang - SeedStep 种子下载 fail-fast + 沙盒私有副本解耦 LRU 清理竞争 - reqwest Client 增加连接/请求超时;启动清理残留 task_* 沙盒 安全加固: - 节点注册 registration_secret 二次凭据 (H8),恒定时间比对防时序旁路 - token 缓存 generation 机制消除 reissue 后旧 token TOCTOU 复活窗口 - 新增 /api/auth/logout 服务端 session 即时撤销;fail-closed 鉴权启动策略 - 前端 token 迁移 sessionStorage;YAML 高亮改 DOM API 消除 XSS 注入面 - 备份文件权限收紧 0600;点表动态值全面 escapeHtml 前端 Dashboard: - 收敛性分析从热力图重构为 Parallel Sets 平行集合图(6 维+状态轴,手写 SVG 零依赖) - 进度曲线横轴改为真实时间(服务端 now 锚定,停滞期诚实留白);轮询指数退避 - 移除 imported 收敛途径分类,导入点按实际途径 cold_run/seed_step 归类 - 初始化时 /api/auth/check 校验 token;401 toast 提示替代静默 reload 服务端恢复与工具链: - 启动恢复 initializing 态工作流;默认工作流 INSERT-only 不覆盖 API 编辑 - body limit 分层(10MB 不再截断 256MB report);multipart 显式错误处理 - 嵌入二进制原子写(tmp+rename)防半写损坏 - import_results 判定收敛途径透传 success_method;conv.json 格式对齐本项目 - push_import_results.sh 退出码修复 + .bat UTF-8 BOM + scp 上传 - Docker USE_MIRRORS 默认关闭;移除无用 assets 挂载;删除 hosts.ini 入库
This commit is contained in:
@@ -52,7 +52,7 @@ flowchart TB
|
||||
- **ESM 模块化 Web 看板**:前端采用 ESM 模块解耦设计(`state.js`, `api.js`, `components/`),支持节点凭据管理、工作流控制与全局 Toast 通知。
|
||||
|
||||
### 2.2 Worker 计算节点 (`node`)
|
||||
- **弹性扩容与身份标识**:`DCTS_NODE_ID` 未指定或为空时,自动生成基于随机 UUID 的节点 ID(`node-<uuid>`),原生支持 `docker compose --scale node=N` 动态横向扩展多个 Worker 容器。
|
||||
- **身份标识**:`DCTS_NODE_ID` 未指定或为空时,自动生成基于随机 UUID 的节点 ID(`node-<uuid>`)。Worker 是计算服务,每个物理设备部署一个 node 进程(多 slot 并行由 `DCTS_MAX_SLOTS` 控制),无需在同一设备运行多副本。
|
||||
- **环境自适应预热 (Bootstrap)**:启动时核对本地 `./runtime` 运行依赖,缺失时自动向 Master 拉取可执行文件与二进制数据。
|
||||
- **任务抢占与执行 (Claim & Execute)**:根据并发配置轮询抢占任务,调用 `common` 启动子进程链(tlusty / synspec)。
|
||||
- **种子检索与回传 (Seed Sync)**:计算成功后将收敛的大气结构文件(`.7`)与状态 JSON 汇报回服务端。
|
||||
|
||||
+1
-1
@@ -128,7 +128,7 @@ DCTS 运行时所依赖的物理计算底座二进制文件 `assets/tlusty_stati
|
||||
| `DCTS_BACKUP_DIR` | `data/backups` | 数据库自动/手动备份输出目录 |
|
||||
| `DCTS_ADMIN_TOKEN` | *空* | 管理员控制台与敏感 API 鉴权令牌 |
|
||||
| `DCTS_AUTH_TOKEN` | *空* | 旧版全局令牌(兼容回退为 Admin 凭据,建议迁移到 `DCTS_ADMIN_TOKEN`) |
|
||||
| `DCTS_AUTH_DISABLED` | `false` | 应急开发参数:设置为`1` 或 `true` 时跳过鉴权 |
|
||||
| `DCTS_AUTH_DISABLE` | `false` | 应急开发参数:设置为`1` 或 `true` 时跳过鉴权(仅本地调试,切勿生产) |
|
||||
| `DCTS_STALE_SEC` | `1800` | 任务运行超时重新放回队列的时间上限(秒) |
|
||||
| `DCTS_NODE_STALE_SEC` | `120` | 判定 Worker 节点离线的心跳超时时间(秒) |
|
||||
|
||||
|
||||
@@ -32,10 +32,13 @@
|
||||
|
||||
### 现象 2:任务长时间处于 `Running` 状态没有进展
|
||||
- **原因**:Worker 节点在计算中途遭遇断电、内存溢出(OOM)或僵死进程卡死。
|
||||
- **自动恢复**:Master 服务端后台线程会在超过 `DCTS_STALE_SEC`(默认 30 分钟)后自动将该任务标记为 `pending` 重新放回队列。
|
||||
- **手动恢复**:若需立即重置挂起任务,可直接重启 `server` 或使用 SQL:
|
||||
- **自动恢复**:Master 服务端后台线程会在超过 `DCTS_STALE_SEC`(默认 21600 秒 / 6 小时,约为单任务超时的 3 倍缓冲)后自动将 `claimed` 态任务重置为 `pending` 放回队列。
|
||||
- **手动恢复**:若需立即重置挂起任务,最稳妥的方式是重启 `server`(启动恢复逻辑会处理卡死态)。若必须直接操作队列库,注意队列表的正确列名与状态:
|
||||
```sql
|
||||
UPDATE task_queue SET status='pending', assigned_node=NULL WHERE status='running';
|
||||
-- task_queue 表的状态列是 status,领用列是 claimed_by_node_id(非 assigned_node);
|
||||
-- 领用中的任务是 status='claimed'(非 'running')。
|
||||
UPDATE task_queue SET status='pending', claimed_by_node_id=NULL
|
||||
WHERE status='claimed';
|
||||
```
|
||||
|
||||
### 现象 3:网络抖动或后端滚动重配下提示 `向服务端上报任务 ... 结果失败`
|
||||
|
||||
Reference in New Issue
Block a user