2.5.2 XA事务的提交以及回滚

2.5.2.1 XA事务的提交

在Dble中采用二段提交的方式对于XA事务进行提交 具体的逻辑可见下图

整体来说的处理原则如下:

  1. 将XA事务的提交分为END PREPARE COMMIT三个部分
  2. 如果在PREPARE下发之前有节点失败或报错,关闭所有后端连接放弃事务数据
  3. 如果在PREPARE下发过程中发生失败,则回滚事务,所有节点下发ROLLBACK
  4. 如果在COMMIT节点发生失败,则尝试重新下发,几次尝试未果将事务交给定时任务来继续重试

2.5.2.2 XA事务的回滚

相对来说回滚的逻辑就容易的多,直接在所有节点下发rollback。如果失败,直接关闭失败的连接。

2.5.2.3 XA事务重试机制

2.19.03.0之前的dble版本对于失败的事务,策略是将事务交给定时任务后台进行无限重试。2.19.03.0版本对这一过程进行了可配置化,并提供管理命令控制这一过程。

2.5.2.3.1 配置

2.19.03.0版本可以通过bootstrap.cnf文件中的xaRetryCount属性配置xa后台重试策略:

  1. 当 xaRetryCount 等于0时,后台无限重试
  2. 当 xaRetryCount 大于0时,后台尝试次数达到xaRetryCount后,重试停止且发送告警

    若重试失败,会发出一条告警,重试成功后自动解决相应告警。

2.5.2.3.2 相关命令

2.19.03.0版本新增两个管理命令

  1. 通过show @@session.xa 查看后台重试xa事务信息
  2. 通过 kill @@xa_session id1,id2...取消指定session后台尝试xa事务
2.5.2.3.3 实现细节

重试时会先从后端连接池中获取连接,如果重试失败,相对应的连接会被关闭回收,更糟糕是重试多次都失败的话,有可能池内的连接都会被回收,此时就会新建后端连接来进行重试

results matching ""

    No results matching ""