Skip to content

Issue 8:补齐 flow run 生命周期中的边界场景处理,减少状态残留 #1492

@iliujunn

Description

@iliujunn

涉及文件: topic_api.pysubscriber_progress.pynode_runtime.pyflow_run_observation_contract.py

问题描述:

flow run 的主干路径(提交 → 执行 → request_donesubscriber_done → 输出读取)已经有一定实现基础。但以下边界场景仍缺少明确的处理路径,容易出现状态残留或行为不一致:

  • 取消路径(cancellation)cancel_flow_run 调用后,相关的 event_chainsubscriber_progress、输出缓冲区的清理时机不明确。取消信号发出后,如果 operator 已经在处理中,是否等待当前 packet 处理完成?超过等待窗口后如何强制清理?
  • 超时路径(timeout):flow run 没有 SLO 超时的主动检测机制,也没有将超时与 flow run 状态机(runningtimed_out)关联的逻辑。normalize_flow_run_request_delivery_status"timed_out" 状态仅在 run_status 为该值时被推导,但 run_status 的来源不清晰。
  • 异常结束后的清理:operator 执行抛出未捕获异常时,RunOutputError 会被写入观测流,但关联的 subscriber_progressevent_chain 状态是否一致清理并未得到保证。可能出现 subscriber_progress 显示"running"而 flow run 实际上已失败的情况。
  • 临时状态(transient state)的释放:用于 in-flight packet 的临时状态(per-request 的上下文、event group ledger 中的条目)在 flow run 正常完成后应按时释放,当前 gc_idle_runtime_state 仅按空闲时间进行被动 GC,对于高负载场景下在请求完成后主动清理的路径没有明确实现。

任务目标: 让 flow run 的取消、超时、异常结束和正常完成四种结束路径都有明确的清理行为,避免长时间运行后由于残留状态导致的内存泄漏和状态不一致问题。

完成标准: 取消、超时、异常结束三种结束路径有明确的 subscriber_progressevent_chain、临时状态的清理行为,running 状态在 flow run 实际结束后不会持续残留。


父 Issue: #1484

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions