17-06 发布失败恢复
题目
先推导:在文件保存、指向切换、进程启动哪步制造失败。完成时核对:旧版完整可读,恢复后请求能核对版本。
推导与做法
发布顺序是写临时目录、核对完整清单、发布版本目录、原子切换 current。缺少清单的 broken 版本不能激活,指向仍为 v1。
题解用项目真实发布器生成 v1、v2,并发送实际 FastAPI 请求。current 切为 v2 后,旧进程仍回答自己已加载的 v1;服务重新启动才加载 v2。回退同样先验证旧目录,再切指向并重开服务。
过程图
%% 每个节点保留输入、执行位置或执行后的实际状态。
flowchart TD
S0["v1完整,进程已装入v1"]
S1["broken缺少清单:禁止切换"]
S0 --> S1
S2["v2完整后current切为v2"]
S1 --> S2
S3["旧进程仍答v1,重开后答v2"]
S2 --> S3
classDef default fill:#EEF0FB,stroke:#4657B5,color:#24324A
linkStyle default stroke:#4657B5
实现与运行
查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。
在配套目录的 综合项目与交付/model_project 中运行。先按项目 README 执行 uv sync --locked。
# 使用项目解释器运行本题,题号决定执行哪一组演示。
uv run python "../../学习索引/参考实现/代码/ch17.py" 17-06
程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。
查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
{
"before": "v1",
"after_failed_publish": "v1",
"old_process_after_switch": "v1",
"restarted": "v2"
}