Support XA transaction in proxy proposal
Support XA transaction in proxy proposal
现状
proxy目前已经通过JTA实现了透明的跨数据库连接的分布式事务,本提案希望实现通过XA语句控制的分布式事务
解决方案
鉴于问题本身的复杂性,我们可以将其拆解成3个较小的问题予以解决
  1. 能正确解析XA语句
  1. 为XA事务中的每个子事务分配一个连接,并将XA语句转发到对应的数据库
  1. 当数据库崩溃时,调用者(业务方)来处理XA RECOVER
测试点
开启两个shardingsphere实例,分别监听3306和3307
Case 1
  1. 会话A连接3306;会话B连接3307
  1. 会话A执行XA START xid1;会话B执行XA START xid2
  1. 会话A执行INSERT INTO `test` (`sn`) VALUES (1);会话B执行INSERT INTO `test` (`sn`) VALUES (2)
  1. 会话A执行XA END xid1;会话B执行XA END xid2
  1. 会话A执行XA COMMIT xid1;会话B执行XA COMMIT xid2
  1. 分别查询插入的数据,都能查到
Case 2
  1. 会话A连接3306;会话B连接3307
  1. 会话A执行XA START xid1;会话B执行XA START xid2
  1. 会话A执行INSERT INTO `test` (`sn`) VALUES (1);会话B执行INSERT INTO `test` (`sn`) VALUES (2)
  1. 会话A执行XA END xid1;会话B执行XA END xid2