seata @GlobalLock的优化小需求

h6my8fg2  于 2022-12-31  发布在  其他
关注(0)|答案(3)|浏览(399)

Why you need it?

关于@GlobalLock注解,client1.4.2。

场景:防止由于开发人员未遵循seata规范导致的线上出现数据类问题,加大上线安全率(防止挨骂),打算对已经涉及分布式事务表(即所有RM层的接口)加上@GlobalLock注解。

测试
1、debug发现RM层加上@GlobalLock也会做前后镜像,且前后镜像都对如update set语句非条件字段也做了镜像。
2、没有在逻辑开始前加上select ... for update,执行update语句后,@GlobalLock检查到全局锁存在后会立刻抛出异常; 而对于多事务用了@GlobalTransactional注解,都会等待其参数设定的时间。

需求
1、对于这种场景,希望优化@GlobalLock的“无谓”镜像。
2、希望能像@GlobalTransactional其作用,使在update语句上的@GlobalLock不加select ... for update,能够重试检查全局锁。
不愿加select ... for update 原因是对系统代码侵入较强。所以希望能多另一个新注解解决这个问题。

因场景经验不足,如诉求不合理,望指出,非常感谢。

lawou6xi

lawou6xi1#

Why you need it?

关于@GlobalLock注解,client1.4.2。

场景:防止由于开发人员未遵循seata规范导致的线上出现数据类问题,加大上线安全率(防止挨骂),打算对已经涉及分布式事务表(即所有RM层的接口)加上@GlobalLock注解。

测试: 1、debug发现RM层加上@GlobalLock也会做前后镜像,且前后镜像都对如update set语句非条件字段也做了镜像。 2、没有在逻辑开始前加上select ... for update,执行update语句后,@GlobalLock检查到全局锁存在后会立刻抛出异常; 而对于多事务用了@GlobalTransactional注解,都会等待其参数设定的时间。

需求: 1、对于这种场景,希望优化@GlobalLock的“无谓”镜像。 2、希望能像@GlobalTransactional其作用,使在update语句上的@GlobalLock不加select ... for update,能够重试检查全局锁。 不愿加select ... for update 原因是对系统代码侵入较强。所以希望能多另一个新注解解决这个问题。

因场景经验不足,如诉求不合理,望指出,非常感谢。

我们也有同类的需求, @cc1aymore 想请教下,你们有什么临时解决的方案吗?

svgewumm

svgewumm2#

@cc1aymore
对于您的问题
问题一:GlobalLock注解的定位是用于非Seata事务的读接口保证读隔离性,这里不应该做前后镜像,因为是select语句。
问题二:您是指的易用性上,想把在这个注解scope中的select语句自动加上for update。可以这样理解么?

相关问题