重试重跑

当前 Python 和 Go SDK 都没有整次重试、节点重跑、重跑计划或节点运行详情的方法。list_workflow_jobs()/ListWorkflowJobs() 只能返回作业 ID、工作流 ID、状态和起止时间,无法仅凭这些字段安全推导局部重跑范围。

SDK 能做的失败检测

等待作业进入完成或失败状态:

from moi.models import WorkflowJobStatus

job = client.wait_for_workflow_job(
    workflow_id,
    source_file_id,
    wait_for_statuses=[
        WorkflowJobStatus.COMPLETED,
        WorkflowJobStatus.FAILED,
    ],
)

if job["status"] == WorkflowJobStatus.FAILED:
    print("failed job:", job["job_id"])

该结果只足以触发告警或转人工排查。SDK 不返回失败节点、错误日志或中间产物,不能据此自动选择重跑节点。

再次载入不是重试 API

再次上传源文件可能触发一条新作业,但它不会与原作业建立“重试”关系,也不保证目标写入幂等。在这么做之前必须确认:

  • 失败原因已经在 UI 或目标实例的作业详情中修复;

  • 旧作业是否已经写入部分结果;

  • 目标 Volume 或外部系统能否安全接受重复写入;

  • 文件去重策略是否会跳过再次上传。

需要正式的整次重试或节点分支重跑时,使用目标 MOI 实例明确发布的 Product API 或 UI。不要通过 RawClient 的内部通用 HTTP 方法猜测路径或请求体。

应用侧恢复记录

若业务决定以新文件载入替代原作业,至少记录原 job ID、新文件 ID、新 job ID、失败原因和处理人。完成后核对目标产物,不要只看新作业状态。