mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-31 21:17:06 +08:00
refactor: make subscription lifecycle events durable
This commit is contained in:
@@ -19,6 +19,10 @@ MoviePilot 保持模块化单体,不把所有后台动作迁到分布式队列
|
||||
`durable-required` 是目标语义,不代表当前实现已经 durable。ARCH-251 前,Event Registry 中标记该值的
|
||||
事件仍应在风险报告中说明崩溃窗口。
|
||||
|
||||
截至 2026-08-22,宿主正式装配的 `SubscribeAdded`、`SubscribeModified`、`SubscribeDeleted` 广播已由
|
||||
业务事务内的 outbox intent 提供 at-least-once 恢复;payload 保持插件 dict ABI,并增加可选幂等键。
|
||||
这不覆盖第三方插件自行发送的裸事件,也不代表订阅通知和外部统计上报已经全部 durable。
|
||||
|
||||
## Event 映射
|
||||
|
||||
Event Contract Registry 是 53 个事件的逐项机器清单。下表按相同语义分组列出每个事件,不省略事件名。
|
||||
@@ -93,5 +97,6 @@ pending 状态交由下次启动,不以取消异常写成成功。
|
||||
## 验证与演进
|
||||
|
||||
- Event Registry 的 `delivery` 字段与本 ADR 同步进入 runtime baseline。
|
||||
- ARCH-251 只实现一个 E2 pilot,并通过 commit 后崩溃、重复 claim、并发 claim 和 dead-letter 测试。
|
||||
- ARCH-251 从一个 E2 pilot 扩展到三种订阅生命周期事件,并通过 commit 后崩溃、重复 claim、并发 claim
|
||||
和 dead-letter 测试;下载与整理结果事件仍需逐条迁移。
|
||||
- ARCH-252 将 Scheduler 的定义、触发和执行状态拆分,但不提升不需要 durable 的 E0 信号。
|
||||
|
||||
@@ -729,6 +729,21 @@ ADR 必须逐个映射当前 Event、BackgroundTasks、Scheduler job、Agent tas
|
||||
- 66 个订阅/调度专项测试和 40 个数据库、迁移、Session/outbox 测试通过(1 个环境条件 skip);
|
||||
fresh schema 先 create_all 再升级与重复迁移均保持幂等。
|
||||
|
||||
**扩展实施记录(2026-08-22)**:
|
||||
|
||||
- 宿主自有的 `SubscribeModified`、`SubscribeDeleted` 生产路径已扩展到同一 outbox:订阅行更新/删除与
|
||||
version 1 intent 使用同一 `AsyncSession`、UoW 和 commit;即时广播失败时 intent 保持 pending,恢复
|
||||
dispatcher 分别按 `subscribe.modified`、`subscribe.deleted` topic 重放。
|
||||
- API、Agent 更新/删除工具以及按媒体身份批量删除均复用请求级或独占事务作用域。API 中保留的
|
||||
`event_published=False` 分支只服务测试替身和旧依赖注入,不是正式装配路径;正式 `HostRuntime`
|
||||
同时提供订阅 repository、history repository、transaction 与 outbox factory。
|
||||
- `SubscribeAddedEventData`、`SubscribeModifiedEventData`、`SubscribeDeletedEventData` 已进入 Event Contract;
|
||||
对插件仍投递原有 dict 字段,只新增可选 `idempotency_key`,不把 Pydantic 实例传给插件。
|
||||
- 保证边界只覆盖主仓可追踪的宿主生产者。运行时安装在 `app/plugins/**` 的第三方插件未被主仓改写;
|
||||
插件若自行直接发送同名事件,该发送仍由插件负责,无法与插件自己的数据库写入自动组成原子事务。
|
||||
- 订阅外部统计上报仍是 post-commit 副作用,不在事件 intent 的重放 handler 中;因此当前可以宣称三种
|
||||
订阅事件具备宿主级 at-least-once 恢复,但不能宣称订阅通知和所有外部上报均已 durable。
|
||||
|
||||
**禁止**:本阶段不引入 Celery、Kafka、RabbitMQ 等新基础设施。
|
||||
|
||||
#### ARCH-252:Scheduler 拆成声明、执行和状态
|
||||
|
||||
Reference in New Issue
Block a user