当前位置: 首页 > news >正文

怎么通过做网站挣钱活动公司

怎么通过做网站挣钱,活动公司,戴尔的网站建设,微信扫码点餐小程序怎么做文章目录 前言一、doGlobalRollback3.1、changeGlobalStatus3.2、doGlobalRollback 前言 本篇介绍Seata服务端接收到客户端TM回滚请求,进行处理并且驱动所有的RM进行回滚的源码。 一、doGlobalRollback doGlobalRollback是全局回滚的方法:   首先依旧…

文章目录

  • 前言
  • 一、doGlobalRollback
    • 3.1、changeGlobalStatus
    • 3.2、doGlobalRollback


前言

  本篇介绍Seata服务端接收到客户端TM回滚请求,进行处理并且驱动所有的RM进行回滚的源码。


一、doGlobalRollback

  doGlobalRollback是全局回滚的方法:
在这里插入图片描述
  首先依旧是进行校验,添加监听器。然后会关闭会话,阻止新分支注册,保证了在回滚执行期间,不会再有分支悄悄进来。

  • 判断事务是否还在「初始状态」,如果是,就可以把状态改为 Rollbacking。
  • 否则说明这个事务已经处于回滚中或提交中,可能是别的线程已经发起操作;就不再做重复回滚处理。
  • doGlobalRollback中完成全局事务回滚的逻辑。
    在这里插入图片描述

3.1、changeGlobalStatus

  该方法主要是用于修改表中的状态:

  • lock_table表中对应XID的状态改为回滚。
  • global_table表中对应XID的状态改为回滚。

在这里插入图片描述

3.2、doGlobalRollback

  doGlobalRollback的逻辑和提交事务的逻辑类似,也是有几个关键部分:

  1. 得到当前XID下的所有分支事务。
  2. 遍历这些分支事务。
  3. 拿到分支事务的状态,如果状态是一阶段提交失败,就直接移除该分支,然后继续下次循环。
  4. 驱动RM回滚。
  5. 根据RM返回的错误码判断。
  6. 执行最后的清理工作。

在这里插入图片描述
  根据RM返回的错误码:

  • PhaseTwo_Rollbacked代表回滚成功,会执行removeBranch的逻辑,删除该分支在lock_tablebranch_table以及branchSessions中的记录。
  • PhaseTwo_RollbackFailed_Unretryable代表回滚失败,并且无法重试了,会执行endRollbackFailed的逻辑。

  endRollbacked方法中,根据不同的状态,对global_table的状态进行修改。
在这里插入图片描述
  最终都会执行globalSession.end();方法,清除全局事务在lock_table表中的记录,然后清理掉global_table的记录。
  那既然 globalSession.end() 最终会物理删除 global_table 的记录,那为什么前面还要调用 globalSession.changeGlobalStatus(…) 去更新状态?

changeGlobalStatus() 虽然最终会更新数据库中的 status 字段,但是在过程中它触发了事务生命周期钩子机制,供系统其他部分观察状态变化。
changeGlobalStatus(): 我告诉所有人,这个事务已经结束了(并以某种状态结束)
end(): 把这笔事务从系统生命周期中移除(内存 + 数据库)

http://www.dtcms.com/a/574089.html

相关文章:

  • [特殊字符] MySQL 报错 Invalid default value?罪魁祸首是 NO_ZERO_DATE 和 NO_ZERO_IN_DATE
  • 公司网站制作需要什么步骤邢台网站建设服务周到
  • 自学网络安全学习的误区和陷阱
  • 电商网站怎么做搜索建各公司网站要多少钱
  • BendSQL v0.30.3 Web UI 功能介绍
  • DeepSeek-OCR和Glyph用视觉压缩思路对比
  • 做动漫网站要多少钱tp框架网站开发参考文献
  • 会做网站的公司个人做门户网站需要注册
  • 【数据结构】常见的排序算法 -- 插入排序
  • 电源模块的冲击电流是什么,会对电源模块造成哪些影响?
  • 【机器学习14】深度学习推荐系统、降维技术PCA
  • 烟台网站建设薇企汇互联见效付款静态网站制作流程
  • 2.1 ShaderLab - 渲染状态
  • 在Android设备上打开Perfetto调试日志开关
  • 大型门户网站源码线上培训网站开发
  • 拓扑排序的实现
  • 手机网站模板怎么用网络竞价托管公司
  • 【linux】基础开发工具(3)gcc/g++,动静态库
  • 零基础入门C语言之枚举和联合体
  • PostIn零基础学习 - 如何快速导入PostMan数据,实现数据迁移
  • linux安装mysql说明
  • 大良陈村网站建设广东建设信息网行业版
  • Electron开发应用完整指南
  • 蓝牙音箱东莞网站建设wordpress 有赞云
  • 150.ddr写入数据时数据帧边界对齐问题
  • 济南 制作网站 公司凡科网站怎么做外链
  • 沈阳做网站推广的公司878网站正在建设中
  • Java基础语言进阶学习——4,Java异常体系和自定义异常
  • junit使用
  • 电商网站开发需要掌握哪些知识技能做黑彩网站会怎样处罚