开发者社区> 问答> 正文

在seata分布式事务执行期间,独立事务发生脏读

在seata分布式事务,A分支事务已执行完成,同时记录了undo-log;B分支事务正在执行...在B分支事务执行期间,存在一个非Seata的独立事务X,事务X读取了A分支已提交的数据(脏数据),并使用脏数据执行了相应操作后;B分支事务执行失败,主事务驱动A分支事务回滚,A分支事务根据undo-log执行回滚后。即会丢失独立事务X提交的数据。

展开
收起
一人吃饱,全家不饿 2021-02-02 10:41:31 2790 0
来自:阿里开源
2 条回答
写回答
取消 提交回答
  • 这里有两个方法各自一条线程,三个业务线 两个业务分别是: 1.下单业务(扣减库存->tx1,生成订单->tx2) 2.采购业务(采购了商品补仓->tx3)

    @GlobalTransactional //seata的分布式事务 public void doOrder(){ 1)扣减库存 2)生成订单 }

    @GlobalLock public void doAdditional(){ 3)增加库存 }

    @GlobalTransactional public void doStatus(){ 4)修改用户状态 5)修改余额状体 }

    @GlobalLock应该是抢全局锁的吧.@GlobalLock它怎么知道要去竞争的是doOrder()方法中的全局锁?而不是doStatus()方法中的全局锁呢?如果我理解的有误,能给出解释吗?

    2021-05-12 01:13:01
    赞同 展开评论 打赏
  • 事务X 应该标记@GlobalLock或在seata中进行管理。

    2021-02-02 10:41:42
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
阿里巴巴相信开源的世界里人人贡献代码,人人获得收益,共同创造一个互帮互利的社区,促进技术进步和发展。
问答排行榜
最热
最新

相关电子书

更多
基于社区的分布式 风险感知模型 立即下载
如何利用Redisson分布式化传统Web项目 立即下载
《Seata 1.3 新特性以及如何参与社区》 立即下载