Skip to content

fix(frontend): workflow-run PATCH 请求未携带 version,后端乐观锁形同虚设 #205

Description

@xiaocheny214

问题描述

文件: frontend/src/entities/workflow-run/api.ts:285-293

async update(run) {
    return mapWorkflowRun(
      await getApiClient().request<WorkflowRunDto>(
        `/workflow-runs/${encodeURIComponent(run.id)}`,
        {
          method: 'PATCH',
          json: { nodes: run.nodes, status: run.storageStatus },
        },
      ),
    )
  },

PATCH body 只有 { nodes, status }version 字段未发送

WorkflowRun 类型定义了 version: number,响应 DTO 也会解析它,但前端从不将其回传给后端。后端即使有 WHERE version = ? 的乐观锁检查,也无法生效。

影响

  • 并发编辑时后写覆盖先写(last-write-wins),数据静默丢失
  • 后端 version 字段的唯一作用退化为单调递增计数器

建议修复

PATCH body 中加入 version:

json: { nodes: run.nodes, status: run.storageStatus, version: run.version },

后端配合校验,不匹配时返回 409 Conflict。

影响

  • 严重程度: High
  • 并发场景数据丢失

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0优先级 P0(最高,先做)bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions