← 回工程日志
# #7 【中转站8001·复诊】大文件上传竞态 —— 接着修(上一轮 27B 已交出诊断成果,这轮要**落地修复**,不是再诊断)。★上一轮成果(2026-10-14 夜班 #02 实测):① 真复现:server.py 的 _recv_multipart 里 os.path.getsize(tmp)(约 974 行)抛 FileNotFoundError,临时文件 .upload_tmp/<uuid>.part 在「收完数据流之后」凭空消失;② 排除了「代码里删的」——用全局 hook os.remove/os.unlink 埋了「抓凶手」陷阱,压测 44GB(62 个 t300/t1g 文件)后 **0 命中**;③ 复现率:62 个文件里 2 次 UPLOAD_EXCEPTION;④ server.py 里已留 [DBG] 埋点链(TMP_CREATE / READ1_EMPTY / TMP_CLOSE / MOVE_START / UPLOAD_EXCEPTION)+ bytes_written 计数。【这轮要做的】1) 对比 bytes_written 与实际文件大小(写入是否被截断/被覆盖)2) 查清文件被「谁」清的(重点怀疑:.upload_tmp 被外部清理、断连/abort、uuid 冲突、多线程重入)3) 实施真正的修复(不是埋点)4) 把调试埋点撤干净(os.remove/os.unlink 的全局 hook 必须撤)5) 验收:连续 5 次上传 1GB 全部 HTTP 200 且 md5sum 与源一致。相关文件 /home/zyf/桌面/视频/server.py(改前 cp -a 备份 + systemctl --user restart transit-wall)。来源:2026-10-14 用户要求把这轮诊断成果带进新任务。

归属日期: 2026-10-14
序号: 7
当前状态: ✅ 已通过
被接手次数: 2

该任务出现时间为
2026-10-14-本次第一次
2026-10-14-本次第二次

---

## 2026-10-14 第1次(夜班 #02 · 只诊断未修复)
- 执行者: 晚风(Hermes/Qwen3.8-27B) · 夜班派发
- 做了什么: 复现出 server.py 的 _recv_multipart() 中 os.path.getsize(tmp) 抛 FileNotFoundError(约 974 行)—— 临时文件 .upload_tmp/<uuid>.part 在「收完数据流之后」凭空消失;用全局 hook os.remove/os.unlink 埋「抓凶手」陷阱,压测 44GB(62 个 t300/t1g 文件)后 0 命中;复现率 2/62。
- 结论: 定位到现象与出错位置,但未修复(未找到"谁删的")。
- 遗留/卡点: 未找到删除者。留下 [DBG] 埋点链(TMP_CREATE / READ1_EMPTY / TMP_CLOSE / MOVE_START / UPLOAD_EXCEPTION)+ bytes_written 计数 + os.remove/os.unlink 全局 hook。

## 2026-10-14 第2次(复诊 · 本轮真修)
- 执行者: 晚风(Hermes) · 手动接手
- 做了什么: 查清并根治真因 —— 同一个 server.py 被两个 systemd 单元同时运行、互相抢 8001 端口:
  · system 级 yeshen-transit.service(root 管理,Restart=always)—— restart counter 已达 20099 次
  · user 级 transit-wall.service(Restart=always + RestartSec=3)—— restart counter 2538 次
  抢输的一方在 bind 失败退出之前,仍然执行了 __main__ 里的「启动清理 .upload_tmp」→ 把正在上传的 .part 删掉。这解释了全部三个疑点:hook 0 命中(删除发生在另一个进程)、10MB 小文件正常而 1GB 必挂(大文件传输窗口长,必撞上每 3 秒一次的清理)、"文件凭空消失"跨进程无日志。
  修复:① 代码层 —— 启动清理挪到「bind 成功之后」+ 只删超过 1 小时的老 .part + 撤干净全部 6 处 [DIAG] 埋点;② 服务层 —— 停掉并 disable 重复的 system 级 yeshen-transit,保留 user 级 transit-wall 独占 8001。
- 证据(真命令 + 原始输出):
  - 改前: yeshen-transit.service Active: activating (auto-restart);restart counter is at 20099;ExecStart 报 OSError [Errno 98] Address already in use
  - 改后: yeshen-transit.service → inactive (dead) + disabled;8001 由 transit-wall(PID 1165748) 独占
  - 最终验收(孪生服务已停的干净状态): 连续 5 次上传 1GB → HTTP 200 ×5;5 个落盘文件 md5 全部与源一致(源 md5 3b26d4a510e901db1e0c723658f9ee57),大小均 1073741824
  - 压测期间服务零重启: Active: active (running) since 19:28:24,restart counter 未增长
  - 改前备份: server.py.bak_20261014_task7_before_manual_fix
- 结论: ✅ 验收通过(5/5 全 200 + 5/5 md5 一致),根因(双服务抢端口 × 启动清理)已根治。
- 遗留/卡点: 无

---
电脑A 10-20 21:32