Yearning icon indicating copy to clipboard operation
Yearning copied to clipboard

[Question] 工单事务失效,在开启事务状态下仍然以无事务方式运行

Open zycgit opened this issue 6 months ago • 3 comments

描述问题 工单事务失效

复现

准备数据

-- 添加表
create table biz_model (
  id             bigint NOT NULL AUTO_INCREMENT,
  created_time   datetime  COMMENT 'Creation timestamp',
  updated_time   datetime  COMMENT 'Last update timestamp',
  content        varchar(50)  NOT NULL COMMENT 'biz body',
  PRIMARY KEY (id)
);

-- 初始化数据
insert into biz_model (id, created_time, updated_time, content) 
values (1, '2025-05-30 14:02:39', '2025-05-30 14:02:39', '... content1 ...' );

insert into biz_model (id, created_time, updated_time, content) 
values (2, '2025-05-30 14:02:39', '2025-05-30 14:02:39', '... content2 ...' );

insert into biz_model (id, created_time, updated_time, content) 
values (5275, '2025-05-30 14:02:39', '2025-05-30 14:02:39', '... content3 ...' );

工单内容

-- 修复一条数据
update biz_model set content = 'abc' where id = 1;

-- 修复一条数据(模拟 SQL 报错)
update biz_model set content = null where id = 5275;

重现该行为的步骤:

  1. 创建 DML 工单,以事务方式执行工单

截图

Image Image Image

数据并没有回滚

部署方式

  • Docker

环境 (请填写环境信息):

  • 浏览器 [chrome]
  • 版本号 [HenryYee ver.3.1.9]

zycgit avatar Aug 19 '25 07:08 zycgit

Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿


Title: [Question] The ticket transaction is invalid and still runs in transaction-free mode when the transaction is enabled.

Issues-translate-bot avatar Aug 19 '25 07:08 Issues-translate-bot

根据 Yearning 的实现,前端会将事务执行的意图(如 DMLTransaction 标志)通过 RPC 发送到后端,实际的 SQL 执行和事务管理(如 BEGIN/COMMIT/ROLLBACK)是在后端 Engine.Exec 服务中完成的。前端和 Docker 部署本身不会影响事务行为,关键在于后端是否正确处理事务请求。

目前没有发现相关 issue 或 PR 讨论 DML 工单事务失效的问题。代码显示只要 DMLTransaction 标志为 true,后端就应该用事务机制执行 SQL,但如果你遇到事务未生效(如部分 SQL 执行成功,报错后未回滚),很可能是后端 Engine.Exec 没有正确包裹事务或忽略了该标志,或者后端配置有误。

建议:

  • 检查后端 Engine.Exec 服务的日志,确认是否有事务相关的错误或异常。
  • 确认后端服务是否正确解析并应用 DMLTransaction 标志。
  • 如果有自定义后端或多节点部署,确保所有节点配置一致且支持事务。

参考代码实现细节:src/handler/order/audit/impl.go
事务标志定义:src/engine/engine.go

如需进一步排查,建议重点关注后端 Engine.Exec 的事务处理逻辑。

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other  Chat with Dosu Join Discord Share on X

dosubot[bot] avatar Aug 19 '25 07:08 dosubot[bot]

我也测试了,模拟SQL报错(事务场景),yearning ver3.1.9+Mysql 8.0,不是正常的事务行为。yearning ver3.1.9+Mysql 5.7是正常的事务行为。

Image Image

chenfangWork avatar Aug 20 '25 06:08 chenfangWork