incubator-seata
incubator-seata copied to clipboard
@GlobalLock的优化小需求
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 原因是对系统代码侵入较强。所以希望能多另一个新注解解决这个问题。
因场景经验不足,如诉求不合理,望指出,非常感谢。
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 想请教下,你们有什么临时解决的方案吗?
@cc1aymore 对于您的问题 问题一:GlobalLock注解的定位是用于非Seata事务的读接口保证读隔离性,这里不应该做前后镜像,因为是select语句。 问题二:您是指的易用性上,想把在这个注解scope中的select语句自动加上for update。可以这样理解么?
plz assign it to me
由于GlobalLock下不会注册分支,tc无法驱动这个事务的提交或回滚,所以无法锁重试,这个可以由业务侧自行重试 而GlobalLock下且没有xid时,会构建后镜像,这个没有意义,前镜像查到pk即可,事务的回滚提交都是由globllock的本地事务完成,不需要构建后镜像