[Question] 工单事务失效,在开启事务状态下仍然以无事务方式运行
描述问题 工单事务失效
复现
准备数据
-- 添加表
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;
重现该行为的步骤:
- 创建 DML 工单,以事务方式执行工单
截图
数据并没有回滚
部署方式
- Docker
环境 (请填写环境信息):
- 浏览器 [chrome]
- 版本号 [HenryYee ver.3.1.9]
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.
根据 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
我也测试了,模拟SQL报错(事务场景),yearning ver3.1.9+Mysql 8.0,不是正常的事务行为。yearning ver3.1.9+Mysql 5.7是正常的事务行为。