MiguDelay 架构 07:任务准入与公开垫片门
MiguDelay(DDLive)项目架构系列文档:任务准入与公开垫片门。内容基于 2026-08-04 对指定重构分支的源码扫描结果整理。
MiguDelay 架构 07:任务准入与公开垫片门
系列导航:系列总览 · 上一篇:MiguDelay 架构 06:MQTT 与协议入口 · 下一篇:MiguDelay 架构 08:TaskSession 状态机
扫描基线
- 项目:
MiguDelay(DDLive)- 分支:
refactor/video-frame-provider- HEAD:
d28ec061406e4e3df93e3d1a92478d71a9ad4908- 工作树:clean
- 扫描日期:2026-08-04
- 说明:内容以当前 HEAD 源码为准;仓库旧架构文档只作为检索线索。
1. 职责
TaskAdmissionService 位于 QML/MQTT 和 TaskOrchestrator 之间,负责 start、stop、terminate 同步准入、latest-only pending start、公开垫片查询、超时重试、scheduleId 匹配和协议成功回复。
它不探测流、不创建目录、不启动 TaskHandle。
2. 调用链
1
2
3
4
5
6
7
8
9
10
11
12
13
Local:
TaskViewModel.startTask
-> TaskAdmissionService.requestStartFromCurrentConfig
-> pending start
-> public gasket gate
-> ITaskCommandPort.start
Remote:
ClientOperateHandle
-> TaskManager
-> TaskAdmissionService.requestStartAfterPublicGasket
-> public gasket gate
-> ITaskCommandPort.start
3. 公开垫片门
默认超时 2500ms,最多重试一次;发送失败或第二次超时后使用缓存配置释放 pending start。
sequenceDiagram
participant C as QML or MQTT
participant A as TaskAdmissionService
participant E as AdmissionEnvironment
participant O as TaskOrchestrator
C->>A: request start
A->>A: replace latest pending request
A->>E: query public gasket
alt response arrives
E-->>A: public gasket ready
else first timeout
A->>E: retry query once
else final timeout or send failure
A->>A: use cached gasket state
end
A->>O: start immutable command
O-->>A: CommandResult
4. latest-only 语义
后来的 start 替换旧 pending start。每个 pending item 带 requestId,晚到或重复 response 找不到当前 requestId 时不再启动。
5. stop 与 terminate
requestStop(scheduleId):
- active task 存在时先比较 scheduleId。
- 不匹配返回
TASK_SCHEDULE_MISMATCH,保留 active 和 pending replacement。 - 无 active、只有匹配 pending 时,只取消 pending,不提交 I/O。
- active 存在时提交
StopTaskCommand{Requested}。
terminate 不要求 scheduleId,但同样支持 pending-only cancellation。
6. 失败路径
| 失败点 | 处理 |
|---|---|
| shutdown | 同步拒绝 |
| pending 被替换 | 旧 request 失效 |
| gasket query 失败 | 使用缓存释放 |
| command rejected | 不发远程成功 reply |
| schedule mismatch | 保留当前任务和 pending |
| pending-only stop | 取消 pending,视为完成 |
7. 源码证据
src/code/module/playback/admission/taskadmissionservice.*src/code/module/playback/admission/legacytaskadmissionenvironment.*src/code/module/playback/admission/itaskadmissionenvironment.hsrc/code/data/playback/taskviewmodel.*src/code/module/taskmanager.*
系列导航:系列总览 · 上一篇:MiguDelay 架构 06:MQTT 与协议入口 · 下一篇:MiguDelay 架构 08:TaskSession 状态机
本文由作者按照
CC BY 4.0
进行授权