fix(cfg): 热重载读侧三点一致性校验——掐断打回出厂与保存吞段(#73) #82
Reference in New Issue
Block a user
Delete Branch "fix-config-reload-03ecc431fc5e"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This is by an automated agent, not a human.
问题(#73 真机证据,8/8 复现)
运行中改配置(界面保存或 FTP STOR)触发 poll 热重载后,全部配置段被打回出厂默认且不自愈;此后任何一次保存还会把非默认段从文件里整段删掉(台架实测 1066B→986B,
[sntp]段消失),是对时静默 10.5 小时的元凶。决定性探针:重载读到的内容连"必报错"的非法行都能无错吞下 + RAM 清零同时发生 ⇒ 读侧拿到的是旧/短视图(dhara FTL 陈旧缓存窗口),boot 同解析器无恙;主机单测因 Fake FatFs 的 rename/缓存语义与真机卷层不同而全绿漏检。卷层本体已由 #79/#81 处理并合并。处置(引擎侧根因无关防御,本 PR)
App/cfg/cfg_file.c):s_load_file后加三点一致性校验——读长 == stat.size;读前后 re-stat 的 size/mtime 一致;内容判据s_view_bad(INI 文本任意偏移含 NUL 即坏视图——台架实证"同尺寸全 0 旧映射块"能骗过纯三点校验,此判据是该形态唯一引擎侧拦截)。判为旧/短/撕裂/坏视图则:RAM 不动、基线不刷新、每 2 拍自动重试(视图刷新即自愈收敛);首次拒绝留 1 条DBG_ERROR+ syslog,之后每 30 拍(约 1 分钟)一条 WARN 提示重启兜底。-1且文件零写入;各调用方(run_par/iec104/net_cfg UI 链)本就保留 dirty 按拍重试 ⇒ 吞段链在第一次保存即被掐断。测试
/keil-build0 Error 0 Warning;Code 254,332→254,820 B(+488 B,台账与同码凭证已回填)。文档
配置文件设计说明 §(3)/§5.3/风险表/变更记录 v1.17(含守卫日志"两数相等"语义注记);配置文件单元测试说明 058–062;网络配置说明、产品需求 FR-CFG-3 同步"HELD/WARN 持续即重启收敛"口径。
台架补验(真机,见本 PR 评论《台架补验实录》)
poll: view 1064B != stat 1064B, HELD (RAM kept)当场拦停,RAM 未再动、引擎对盘零写入;16:56:42/16:57:41WARN held 30/60 rounds限速心跳实机成立;16:54:29 boot 零误伤。@super_agent_bot 进行台架验证
收到,开始台架验证:烧写本 PR 固件到台架板,按 #73 证据链跑"非默认段 STOR + peek RAM + 二次 save"回归,结果回本 PR 线程。
This is by an automated agent, not a human.
台架补验实录(板 192.168.31.100,ST-LINK 烧写 + 镜像 cmp「No difference found」双确认,守卫固件 = 本 PR 源码)
load: OK (1064B),boot 路径零误伤(无 HELD)。[ERR][CFG] poll: view 1064B != stat 1064B, HELD (RAM kept)当场拦停:RAM 未再变动、引擎对盘零写入(两数相等即内容判据命中,语义已写进设计说明 §5.3)。WARN: cfg reload held 30/60 rounds, reboot to converge限速心跳实机命中 30 趟节奏——操作员可见的持续告警口径实机成立。边界如实保留(重要):本轮台架仍见偶发打回,形态全部是"内容合法但陈旧"的整卷视图(长度/令牌/内容三者一致但滞后,如滞回出厂模板时代;15:19/16:34/16:58 三例),按设计引擎层无法检出。16:58:38 HELD 解除后 reload 确已自动应用(守卫"拒绝→自愈"链路本身通了),但该次应用读到的仍是滞后整卷视图(再次打回默认)——实机环境下自愈结果被卷层滞后盖过,"HELD→视图转新鲜→自动追平"全链由主机侧 TC-058/061 钉死。根因在 dhara/FTL 卷层,建议另立卷层工单。卷层根治前,"改过配置(界面或 FTP)后重启一次"仍是最稳口径(#73 已发)。
@
@super_agent_bot 按你的推荐,创建一个卷层工单
收到:这就建卷层工单(dhara/FTL"一致但陈旧整卷视图"),把本次台架三例时间戳证据、排查方向与现有缓解口径一并挂进去,建好回帖编号。
这是由自动化代理发布的,非真人。
已按推荐另立卷层工单:#85(dhara 整卷陈旧视图“三者自洽但滞后”根治,含本台架三例时间戳证据与排查方向,已入项目看板下一顺位)。引用本 PR 为证据源,引擎守卫(HELD/内容判据)作为最后承接面保留。