mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 16:07:01 +08:00
refactor: make download and transfer events durable
This commit is contained in:
@@ -19,9 +19,11 @@ MoviePilot 保持模块化单体,不把所有后台动作迁到分布式队列
|
||||
`durable-required` 是目标语义,不代表当前实现已经 durable。ARCH-251 前,Event Registry 中标记该值的
|
||||
事件仍应在风险报告中说明崩溃窗口。
|
||||
|
||||
截至 2026-08-22,宿主正式装配的 `SubscribeAdded`、`SubscribeModified`、`SubscribeDeleted` 广播已由
|
||||
业务事务内的 outbox intent 提供 at-least-once 恢复;payload 保持插件 dict ABI,并增加可选幂等键。
|
||||
这不覆盖第三方插件自行发送的裸事件,也不代表订阅通知和外部统计上报已经全部 durable。
|
||||
截至 2026-08-22,宿主正式装配的 `SubscribeAdded`、`SubscribeModified`、`SubscribeDeleted`、
|
||||
`DownloadAdded`、`TransferComplete`、`TransferFailed` 广播已由业务事务内的 outbox intent 提供
|
||||
at-least-once 恢复;payload 保持插件 dict/对象 ABI,并增加可选幂等键。下载和整理的 outbox 只保存
|
||||
可 JSON 序列化的快照,重放时恢复旧对象字段。这不覆盖第三方插件自行发送的裸事件,也不代表订阅通知
|
||||
和外部统计上报已经全部 durable。
|
||||
|
||||
## Event 映射
|
||||
|
||||
@@ -97,6 +99,6 @@ pending 状态交由下次启动,不以取消异常写成成功。
|
||||
## 验证与演进
|
||||
|
||||
- Event Registry 的 `delivery` 字段与本 ADR 同步进入 runtime baseline。
|
||||
- ARCH-251 从一个 E2 pilot 扩展到三种订阅生命周期事件,并通过 commit 后崩溃、重复 claim、并发 claim
|
||||
和 dead-letter 测试;下载与整理结果事件仍需逐条迁移。
|
||||
- ARCH-251 已覆盖 Registry 中六种 `durable_required` 事件,并通过 commit 后崩溃、重复 claim、并发
|
||||
claim、JSON 快照恢复和 dead-letter 测试;后续新增 E2 事件必须同时提供业务事务边界和恢复测试。
|
||||
- ARCH-252 将 Scheduler 的定义、触发和执行状态拆分,但不提升不需要 durable 的 E0 信号。
|
||||
|
||||
@@ -743,6 +743,16 @@ ADR 必须逐个映射当前 Event、BackgroundTasks、Scheduler job、Agent tas
|
||||
插件若自行直接发送同名事件,该发送仍由插件负责,无法与插件自己的数据库写入自动组成原子事务。
|
||||
- 订阅外部统计上报仍是 post-commit 副作用,不在事件 intent 的重放 handler 中;因此当前可以宣称三种
|
||||
订阅事件具备宿主级 at-least-once 恢复,但不能宣称订阅通知和所有外部上报均已 durable。
|
||||
- `DownloadAdded`、`TransferComplete`、`TransferFailed` 也已逐项接入,而不是复用一个不分业务语义的
|
||||
“万能消息总线”。下载历史、下载文件清单或整理历史与各自 intent 在独占同步 Session/UoW 中原子提交;
|
||||
即时广播失败时 intent 保持 pending,三种恢复 handler 均继续使用有限重试与 dead-letter 策略。
|
||||
- 下载和整理事件保留插件原有运行时对象 ABI:即时发送仍含 `Context`、`FileItem`、`MetaInfo`、
|
||||
`MediaInfo`、`TransferInfo`;outbox 单独存 JSON 快照,恢复 handler 无远端调用地重建这些对象。
|
||||
`idempotency_key` 仍是唯一新增的可选公开字段,提醒插件按 at-least-once 语义自行去重。
|
||||
- 本切片同时把 `DownloadChain.download_single` 的提交后通知/任务编排抽成独立方法,并删除已经被
|
||||
Application 删除命令替代的两个 `Subscribe` Model 级删除事务装饰器;Model decorator 基线从
|
||||
178 降到 176,Oper 内显式 commit/rollback 仍为 0。strict mypy 门禁新增 Chain durable context、
|
||||
payload 转换和启动适配器。
|
||||
|
||||
**禁止**:本阶段不引入 Celery、Kafka、RabbitMQ 等新基础设施。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user