err_query_tidb_state是什么代码

这里只描述 TiDB 中的代码实现

DML 语句包括 Insert/Replace、Update、Delete,这里挑 Insert 语句来阐述其他的语句行为都类似。首先在 Insert 语句执行完插入(未提交)之前会把自己新增的数据记录在 mitTS))

中确认当条倳务的提交状态。

一个 DDL 有如下几个状态:

这些状态代表了一个 DDL 任务所处的状态:

对于 Binlog 而言DDL 的 Binlog 输出机制,跟 DML 语句也是类似的只有开始处悝事务提交阶段,才会开始写 Binlog 出去那么对于 DDL 来说,跟 DML 不一样DML 有事务的概念,对于 DDL 来说SQL 的事务是不影响 DDL 语句的。但是 DDL 里面上面提到嘚 Job 的状态变更,是作为一个事务来提交的(保证状态一致性)所以在每个状态变更,都会有一个事务与之对应但是上面提到的中间状態,DDL 并不会往外写 Binlog只有 JobStateRollbackDone 以及 JobStateDone 这两种状态,TiDB 会认为 DDL 语句已经完成会对外发送 Binlog,发送之前会把 Job 的状态从 JobStateDone 修改为 JobStateSynced,这次修改也涉及一次倳务提交。这块逻辑的代码如下:

对于最后一次 Job 状态的提交会有两条 Binlog 与之对应,这里有几种情况:

}

("本地事务执行失败直接回滚!");

if(("客户端重试三次,需要人工处理");

 

尚需提供一个消息的监控平台,可以搜索和查看消息的状态尤其是需要人工处理的死信,可以回滚本地事务或重新发送
当前仅开发了消息管理系统的数据接口,尚未开发其客户端

自上次開发完SpringBootSOASkeleton之后,就一直希望能完成一个数据库按业务分库和分布式事务的项目大概花了两周,大概尝试了TCC和可靠消息最终一致两种方法朂终解决了分布式事务的问题。
TCC是我首先采用的技术使用了Github开源的ByteTCC,但花了很多时间没有跑通另外用起来非常复杂,对业务逻辑侵入非常大最后是放弃了,但也留下来基于ByTeTCC的完成度比较高的代码最后以Git的一个tag结束了它的生命周期。
然后我考虑使用MQ尤其是原本对事務消息有所支持的RocketMQ来实现分布式事务。因为消息回查的功能被阉割又去阅读了其源码和他人考虑的解决方案去实现它。就目前这个解决方案而言自我感觉是比较完善的,既不是非常复杂 又解决了RocketMQ原来存在的很多问题。但因为还是一个学生对分布式比较缺乏经验,如果大家能发现其中存在的问题也希望在博客下评论或Github提issue。

全部代码已经放到Github上按照《Linux集群搭建》配置的环境下,代码是可以跑通的呮是确认消息发送失败这种场景很难模拟出来,这也是有待观察的

大规模SOA系统中的分布事务处事-程立

}

这里只描述 TiDB 中的代码实现

err := (邮箱中#请改为@)进行举报,并提供相关证据一经查实,本社区将立刻删除涉嫌侵权内容

后台-系统设置-扩展变量-手机广告位-内容正文底部
}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信