Narayana 事务 begin 流程

Narayana 事务 begin 流程

整体流程

检查事务状态
获取超时时间
创建事务对象
    事务对象设置到 ThreadLocal 中,和当前线程绑定

使用 API

TransactionManager transactionManager = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager();
// 开启全局事务
transactionManager.begin();

调用链路

internal.jta.transaction.arjunacore.BaseTransaction#begin
开启事务
    internal.jta.transaction.arjunacore.BaseTransaction#checkTransactionState
    校验事务状态
        jta.common.JTAEnvironmentBean#isXaTransactionTimeoutEnabled
        是否启用超时配置
        internal.jta.transaction.arjunacore.TransactionImple#getTransaction
        获取当前线程已经存在的全局事务
            arjuna.coordinator.BasicAction#Current
                internal.arjuna.thread.ThreadActionData#currentAction
                    internal.arjuna.thread.ThreadActionData#setup
                    如果当前事务存在,执行setup操作
    arjuna.coordinator.TxControl#createTransactionStatusManager 静态代码块
    创建 TransactionStatusManager
        arjuna.recovery.TransactionStatusManager#start
        启动事务状态管理
            arjuna.recovery.TransactionStatusManager#getTsmServerSocket
                arjuna.recovery.TransactionStatusManager#getListenerHostName
                    arjuna.common.RecoveryEnvironmentBean#getTransactionStatusManagerAddress
                arjuna.utils.Utility#hostNameToInetAddress
            arjuna.recovery.TransactionStatusManager#addService
                arjuna.common.RecoveryEnvironmentBean#isTimeoutSocket
            internal.arjuna.recovery.TransactionStatusManagerItem#createAndSave
            创建 status manager item 并序列化保存
                arjuna.utils.Utility#getProcessUid
                创建 uid,由 hostInetAddr + pid + hash 组成
                internal.arjuna.recovery.TransactionStatusManagerItem#saveThis
                将 host+port 写出到存储日志
                    arjuna.state.OutputBuffer#initBuffer
                    arjuna.utils.Utility#hostInetAddr
                    arjuna.utils.Utility#getpid
                    arjuna.common.Uid#generateHash
                    internal.arjuna.recovery.TransactionStatusManagerItem#save_state
                    保存状态到磁盘
                        arjuna.state.OutputBuffer#packString
                        打包状态到 outputBuffer
                    internal.arjuna.recovery.TransactionStatusManagerItem#getStore
                    反射获取存储实例并初始化
                    internal.arjuna.objectstore.FileSystemStore#write_committed
                    写出buffer里的状态到文件存储
                        internal.arjuna.objectstore.FileSystemStore#write_state_internal
                            internal.arjuna.objectstore.ShadowingStore#write_state
                            写出状态到磁盘
                                internal.arjuna.objectstore.FileSystemStore#synchronousWrites
                                同步写,调用 sync 刷盘
                                internal.arjuna.objectstore.FileSystemStore#closeAndUnlock
                                解锁
                                internal.arjuna.objectstore.FileSystemStore#addToCache
                                写出结果缓存到内存
    new TransactionImple(v)
    创建事务对象
    arjuna.AtomicAction#begin
    开启事务
        arjuna.coordinator.TwoPhaseCoordinator#start
            arjuna.coordinator.BasicAction#Current
            获取当前 BasicAction
            arjuna.coordinator.TwoPhaseCoordinator#start
                arjuna.coordinator.BasicAction#Begin
                BasicAction 开启事务操作
                    arjuna.StateManager#get_uid
                    arjuna.coordinator.BasicAction#actionInitialise
                        arjuna.coordinator.ActionHierarchy#add
                    arjuna.coordinator.ActionManager#manager
                    arjuna.coordinator.ActionManager#put
        internal.arjuna.thread.ThreadActionData#pushAction
        缓存创建的 BasicAction 事务对象 到 当前线程
    internal.jta.transaction.arjunacore.TransactionImple#putTransaction
    缓存 TransactionImple 到 hashMap,key是uid

相关推荐

  1. Narayana 事务 begin 流程

    2023-12-08 10:32:02       53 阅读
  2. transformer beginner

    2023-12-08 10:32:02       53 阅读
  3. VIM_beginner

    2023-12-08 10:32:02       28 阅读
  4. QT_BEGIN_NAMESPACE

    2023-12-08 10:32:02       33 阅读
  5. <span style='color:red;'>事务</span>

    事务

    2023-12-08 10:32:02      25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 10:32:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 10:32:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 10:32:02       82 阅读
  4. Python语言-面向对象

    2023-12-08 10:32:02       91 阅读

热门阅读

  1. Docker快速入门(编译源码辅助技)

    2023-12-08 10:32:02       57 阅读
  2. 数组实现循环队列(新增一个空间)

    2023-12-08 10:32:02       66 阅读
  3. 【数据结构】并查集算法总结

    2023-12-08 10:32:02       57 阅读
  4. extern “C“使用方法__演变过程

    2023-12-08 10:32:02       64 阅读
  5. swiper和video实现抖音刷视频功能

    2023-12-08 10:32:02       66 阅读
  6. Django的回顾的第4天

    2023-12-08 10:32:02       39 阅读
  7. Django二转Day06

    2023-12-08 10:32:02       52 阅读