文章

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)

  1. active task 存在时先比较 scheduleId。
  2. 不匹配返回 TASK_SCHEDULE_MISMATCH,保留 active 和 pending replacement。
  3. 无 active、只有匹配 pending 时,只取消 pending,不提交 I/O。
  4. 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.h
  • src/code/data/playback/taskviewmodel.*
  • src/code/module/taskmanager.*

系列导航系列总览 · 上一篇:MiguDelay 架构 06:MQTT 与协议入口 · 下一篇:MiguDelay 架构 08:TaskSession 状态机

本文由作者按照 CC BY 4.0 进行授权