将 TLUSTY/SYNSPEC 拆为各自独立的 enabled/policy/strategies 阶段,
以策略链自动弹栈取代单级 seed_step 布尔回退;定向修复 2026-08-02
僵尸任务涡旋事故;新增节点并发配额热调;前端详情页从 1412 行巨型
视图拆为薄控制器 + detail 子模块,并补齐工具层与单测。
引擎与调度(task_engine_decoupling_design.md)
- models.rs: 新增 StagePolicy / EngineStageConfig / TaskSpec 阶段字段、
normalize_compat() 校正旧版在途消息策略链、failed_stage 归因
- scheduler.rs: resolve_dispatchable_chain 派发门控、
trigger_strategy_fallback 按 failed_stage 精确弹栈;启动期
force_recompute/skip_converged(默认)/skip_failed 三策略
- db.rs: tasks 表 +7 列持久化阶段配置;终态守卫
(mark_grid_point_running 仅 pending/queued→running;
record_task_report 拒绝迟到失败翻黑 converged);策略弹栈快照
僵尸涡旋修复(runbook-20260802-zombie-vortex-fix.md)
- 全链路跨库活性交叉校验:派发/claim/孤儿回收/回退统一查 MQ 队列活性,
活则放行、死则清僵尸,结构性消除"每点重复派发"
- stop/重启卫生:清队列同步 delete_tasks_by_ids,杜绝遗留 pending 行
- report_task: 幂等吸收 + 409 区分迟到冗余结果,仅 state_changed 时回退
- MQ: NULL workflow_name 回填 __legacy__、requeue 后迟到上报被 403 竞态修复
动态 CPU 配额(dynamic_cpu_slots_design.md)
- admin.rs: POST /admin/nodes/:id/quota(Option<Option<i32>> 区分
缺字段/显式 null);nodes 表 +admin_max_slots
- worker.rs: effective_max_slots = min(admin, physical),心跳下发原子生效
科学产物保全(tlusty_result_artifacts.md)
- runner.rs: SYNSPEC 启动前快照 fort.12/fort.14 → .bfac/.emflux 防覆盖
- 半失败点(大气收敛+光谱失败)改判 Failed 并写入 note;仅 SYNSPEC
场景不再恒判失败;撤销归档 LRU 200 上限改为永久保留
- executor.rs: 透传 synspec_params 数值参数(此前固定 None)
前端(dashboard/)
- workflowDetail.js 1412→328 行,拆出 views/detail/{ctx,overview,
pointsTable,parSets,pointPanel}.js,AbortController 治理监听/请求生命周期
- 删除 wfActions.js,新增 wfEnginePanel.js(双阶段三维配置编辑面板)
- 新增 utils/{errors,format,icons,polling,yamlStage}.js 纯函数模块
- 路由级动态 import 代码分割;节点配额三点菜单 + Modal 管理
- 首次引入 node:test 单测(format/polling/yamlStage/psCache,644 行)
- 系统性补齐 a11y:skip-link、ARIA、Tab 键盘漫游、toast 关闭、退出动画
文档与工具
- 新增 6 篇设计/调研:引擎解耦、动态配额、涡旋 runbook、
光谱正确性分析、收敛判断、产物归档
- PIPELINE/design/api/database 等协同重写为分布式 C/S 架构口径
- scripts/fetch_results.sh 跨节点产物备份;import_results 按 cno 升序导入
- workflows/sdB_cno.yaml: 新增 tlusty/synspec_stage 配置块,修正 wstart 笔误
74 lines
2.8 KiB
Markdown
74 lines
2.8 KiB
Markdown
# DCTS 开发者与参与贡献指南 (Contributing Guide)
|
||
|
||
> 感谢关注并参与 DCTS (Distributed Computing TLUSTY/SYNSPEC) 的开发!本文档为开发者提供本地环境配置、代码库结构说明及测试规范。
|
||
|
||
---
|
||
|
||
## 1. 本地开发环境准备
|
||
|
||
### 必备依赖
|
||
- **Rust 工具链**:1.75+ (推荐使用 `rustup` 安装)
|
||
- **C/Fortran 编译器**(计算节点模拟调试需 `gfortran` 或预编译好的二进制)
|
||
- **SQLite 3**开发库(嵌入在 Rust dependencies 中,无需额外安装系统库)
|
||
|
||
### 克隆与编译
|
||
```bash
|
||
cd dcts
|
||
cargo check --workspace --all-targets
|
||
cargo build
|
||
```
|
||
|
||
---
|
||
|
||
## 2. 代码库结构 (Workspace Layout)
|
||
|
||
```
|
||
dcts/
|
||
├── Cargo.toml # Workspace 根配置
|
||
├── crates/
|
||
│ ├── common/ # [Library] 物理计算引擎、子进程管理、收敛检测、种子匹配与归档白名单
|
||
│ ├── server/ # [Binary] Axum HTTP REST 服务端与 Scheduler
|
||
│ ├── node/ # [Binary] Worker 节点 Daemon 与任务抢占回路
|
||
│ └── mq/ # [Library] SQLite 事务型分布式任务队列
|
||
├── dashboard/ # [Web] ESM 模块化运维看板(Vite)
|
||
├── workflows/sdB_cno.yaml # 示例网格工作流配置
|
||
├── tools/
|
||
│ └── import_results/ # [Binary] 历史计算结果导入工具(旧版网格结果 → 种子/收敛入库)
|
||
├── scripts/ # 结果拉取等运维脚本
|
||
└── docs/ # 分主题架构与规格技术文档
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 测试与规范 (Testing & Guidelines)
|
||
|
||
### 3.1 运行单元测试与集成测试
|
||
```bash
|
||
# 运行 Workspace 内所有单元测试
|
||
cargo test --workspace
|
||
|
||
# 针对核心物理解析模块独立测试
|
||
cargo test -p common
|
||
```
|
||
|
||
### 3.2 代码风格与 Linting
|
||
提交 PR 前请确保以下命令无 error 和 warning:
|
||
```bash
|
||
# 代码格式化
|
||
cargo fmt --all -- --check
|
||
|
||
# Rust 官方 Linter 静态检查
|
||
cargo clippy --workspace --all-targets -- -D warnings
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 提交 Code Review 规范
|
||
|
||
1. **分支策略**:从 `main` 切出特性分支,推荐命名如 `feature/seed-optimizer` 或 `fix/stale-node-leak`。
|
||
2. **Commit Message 规范**:遵循 Conventional Commits,格式为 `<type>(<scope>): <description>`,如:
|
||
- `feat(common): 有向 CNO 距离种子匹配`
|
||
- `fix(server): 修复调度竞态与僵尸任务自愈`
|
||
- `type` ∈ `feat` / `fix` / `refactor` / `docs` / `test` / `chore` / `perf` / `ci`;`scope` 常用 `common` / `server` / `node` / `mq` / `dashboard` / `all`。
|
||
3. **保持文档更新**:若修改了 API 接口定义或数据库 Schema,请同步更新 `docs/api.md`、`docs/database.md`,以及物理/调度设计文档(`docs/design.md`、`docs/task_engine_decoupling_design.md`)。
|