7 项缺陷本地修复 — 变更 SOP(2026-10-09)¶
规划产物:
.trae/specs/lustre_ins_7fix/{spec.md,tasks.md}(spec-planner子智能体产出, 作为过程件,不是结案凭据;结案凭据即本文件与 HANDOFF)。
1. 范围与结论¶
| 项 | 结论 |
|---|---|
#18 client_mount 两处缺陷 |
已修复(挂载改 systemd mount unit;fstab 改「同挂载点替换」) |
#12 fstab_persist 幂等日志瑕疵 |
已修复(先查现状,exists 走幂等跳过,动作词按实际结果) |
| #5 幂等探测 unknown 未三态化 | 已修复(新增三态函数;UNKNOWN 禁止进入 mkfs) |
#11 dry-run 下 get_param 无输出误判失败 |
已修复(降级 WARN,不记失败) |
#10 ssh_user 幽灵配置 + lctl dl 固定字段解析 |
已修复(凭据按节点下发;NID 改正则解析) |
| #4 RUNBOOK 容量水位基线占位 | 已修复(填 .21 实测值 + 取数日期 + 原始输出留存) |
| #1 调优 unit 按角色拆分 | 代码侧已完成;远端部署 + 重启验证待放行(见 §5) |
未纳入:#3、#15(用户尚未裁定是否属本工程范围)。
2. 变更清单¶
| 文件 | 改动摘要 |
|---|---|
utils/file_utils.py |
新增 merge_fstab_entry()(纯函数,exists/replaced/added)、fstab_entry_state();append_to_fstab() 改为「读全文 → 合并 → 备份 → 一次写回」,返回实际动作 |
modules/client_mount.py |
新增 _mount_unit_name()(systemd-escape -p 推导,带缓存);execute() 顺序改为 mkdir → fstab → daemon-reload → systemctl start <unit>;删除 mount -t lustre |
modules/fstab_persist.py |
execute() 先查 fstab_entry_state:exists → idempotent_skipped 不进变更入口;动作词按 替换/追加 实际区分 |
utils/idempotent_utils.py |
新增 lustre_target_formatted_state()(DONE/PENDING/UNKNOWN,SSH 层失败 → UNKNOWN);is_lustre_target_formatted() 降为 == DONE 兼容包装 |
modules/target_format.py |
pre_check() / execute() 改用三态;UNKNOWN → BLOCK / 拒绝格式化并跳过 |
modules/lctl_tuning.py |
① _apply_params 不可读参数降 WARN、不记失败;② 常量新增 server/client 单元路径;_merge_params / _server_params_for_host / _client_params_for_host 拆参;单元生成按 kind 产出 Before= / After=…server / RequiresMountsFor=;新增 _write_one_unit、_remove_legacy_unit;execute() 改调新 _write_unit |
deployer.py |
_do_initialize() 从 nodes.{mgs_mds,oss,clients} 收集 ssh_user(缺省 root)构造 credential_map 传入 setup_credentials |
utils/lustre_state.py |
新增 _extract_nid() + _NID_RE;get_online_targets() 的 host 改全行 NID 正则(不再用 parts[4]) |
docs/RUNBOOK.md |
第 10 章水位基线表填实测值 + 取数日期 + 原始输出留存路径 |
3. 验证证据(本机判据,两遍同结果)¶
| 判据 | 命令要点 | 结果 |
|---|---|---|
| TR-1.1 fstab 替换(坏样本:同挂载点旧行) | .venv/bin/python 内联:merge_fstab_entry(old,new) 断言 replaced、新行 1 条、旧串消失、二次调用 exists |
ALL PASS |
| TR-1.2 / TR-2.3 / TR-4.2 / TR-5.3 / TR-6.2 / TR-7.3 / TR-8.3 | python -m py_compile <file> |
COMPILE_OK |
| TR-2.1 挂载顺序(fake SSH 记录命令序列) | 断言 systemctl start mnt-lustre.mount 存在、fstab 写入 < daemon-reload < start、全序列无 mount -t lustre |
ALL PASS |
| TR-2.2 静态检查 | grep -n "mount -t lustre" modules/client_mount.py |
0 命中 |
| TR-3.1 幂等与动作词(正反例) | exists → 变更入口 0 次;absent → 描述含「追加」;same_mp_different → 含「替换」 |
ALL PASS |
| TR-4.1 三态 + UNKNOWN 闭合 | DONE/PENDING/UNKNOWN 三态断言;UNKNOWN 下 execute() 命令中 mkfs 计数 = 0、pre_check() 返回 False;DONE 下 pre_check() 返回 True |
ALL PASS |
| TR-5.1 不可读降级 | _apply_params 在 get_param 空串时 _failures == [] |
ALL PASS |
| TR-6.1 凭据下发 | credential_map 中 h1=deploy(同主机多配置取首个)、h2=root、default 仍 root |
ALL PASS |
| TR-7.2 真实样本解析 | 对 reports/lctl-dl-22-20261009.txt 解析,mgc 行 host = MGC192.168.31.21@tcp;移位合成行解析正确;无 NID 行 host = "" 不抛异常 |
ALL PASS |
| TR-8.1 单元内容(坏样本:mdc 出现在 server / OSS 含 mdt) | .21:server 含 mdt.*.max_mod_rpcs_in_flight=32 + Before=mnt-lustre.mount、不含 mdc.;client 含 mdc.*=31 + RequiresMountsFor=/mnt/lustre + After=mnt-lustre.mount lustre-tune-server.service、不含 mdt.*;.22 纯 OSS 只出 server 且两者都不含 |
ALL PASS |
| TR-11.1 全量语法 | python -m py_compile deployer.py main.py utils/*.py modules/*.py |
COMPILE_OK |
过程中我方判据曾写错两处表现层预期(
mount_point_for_target对它返回/mnt/ost0;lctl dl除mgc行本无 NID), 均为断言写错而非代码错,修正断言后通过——如实登记。 修复过程中发现并修正 1 处真实缺陷:_mount_unit_name首版多加了mnt-前缀(产出mnt-mnt-lustre.mount), 由 TR-8.1 拦住。
4. 备份与回滚¶
- 本地代码备份:
backup/7fix-code-20261009-051355/(cp -a --parents,含utils/modules/deployer.pydocs/RUNBOOK.mdconfig/*.yaml*)。 - 回滚通式:
cp -a backup/7fix-code-20261009-051355/<relpath> <relpath>。 - 远程
/etc/fstab:写入前自动cp /etc/fstab.bak.<ts>,回滚cp -f /etc/fstab.bak.<ts> /etc/fstab && systemctl daemon-reload。 - 远程调优单元:写入前自动备份到
/var/backups/lustre-ins/etc/systemd/system/…。
5. 遗留(需用户裁决)¶
- #1 远端部署(对应 tasks.md T9):需放行变更窗口。前置:确认
.21/.22无在跑 Slurm/LSF 作业;执行顺序先.22后.21;旧单单元备份后停用。 - 可选重启验证(
mdc.*重启后自动达标)为根治唯一硬证据,影响生产,请单独批准。 - #3 / #15 是否属本工程范围,未裁定。
- 子智能体与内置模型调用不走本机 proxy → 本轮部分消耗不在收尾五项表口径内(HANDOFF §3.3「成本口径缺口」)。
来源:
/home/rain/Documents/lustre_ins/7fix-20261009/SOP.md| 最后更新:2026-10-09 05:24(由build/sync.py同步,请勿在站点侧修改)