seata1.3 AT模式, tm事务提交更新成8之前,会不会先删除相关数据呢?

seata1.3 AT模式, tm事务提交global_table状态更新成8之前,会不会先删除lock_table相关数据呢? lQLPJxaRkZOiW6TNA6nNAh-wdgMpjukrt2QC75DlIUBvAA_543_937.png

展开
收起
哈喽!小陈 2022-08-08 17:39:49 905 分享 版权
阿里云 AI 助理回答

在Seata 1.3的AT模式中,TM事务提交过程中,全局事务状态更新到8(即GlobalStatus.Committed)之前,并不会直接删除lock_table中的相关数据。这一过程遵循分布式事务的两阶段提交协议:

  1. 第一阶段(Prepare Phase):TM向涉及的RM发送prepare请求,RM在本地执行事务操作并记录undo/redo日志,然后在lock_table中对相关资源进行锁定,并将事务状态设置为预提交状态。此时,资源仍处于锁定状态以确保一致性。

  2. 第二阶段(Commit Phase)

    • 如果所有RM都回复prepare成功,TM会向所有RM发送commit请求。
    • 接收到commit请求的RM会正式提交本地事务,释放lock_table中的锁,并更新global_table中的事务状态为Committed(状态码8)。
    • 若有任何RM回复prepare失败,或在等待超时时间内未收到所有RM的响应,TM则向所有RM发送rollback请求,RM执行事务回滚,同样也会清理lock_table中的相应条目。

综上所述,在事务状态更改为Committed之前,lock_table中的锁是保持有效的,以维护事务的隔离性和一致性,直到事务被确定性地提交或回滚后,相应的锁和事务上下文才会被清理。因此,不会出现先更新global_table状态而忽视lock_table清理顺序的情况。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

为企业提供高效、稳定、易扩展的中间件产品。

收录在圈子:
+ 订阅
阿里云中间件主要有包含这么几个: 分布式关系型数据库DRDS_水平拆分 做数据库扩展性的 、消息队列MQ 是做消息的中间件、企业级分布式应用服务EDAS 做分布式服务的、还有一些其他的中间件,比如配置服务、缓存等等。
还有其他疑问?
咨询AI助理