openGauss源码解析(71)

openGauss源码解析:事务机制源码解析(3)

4. 事务状态转换相关函数简述

1) 事务处理子函数:根据当前事务上层状态机,对事务的资源进行相应的申请、回收及清理。

具体介绍如表5-2所示。

表5-2 事务处理子函数

子函数

说明

StartTransaction

开启事务,对内存及变量进行初始化操作,完成后将底层事务状态置为TRANS_INPROGRESS

CommitTransaction

当前的底层状态机为TRANS_INPROGRESS,然后置为TRANS_COMMIT,本地持久化CLOG及XLOG日志,并清空相应的事务槽位信息,最后将底层状态机置为TRANS_DEFAULT

PrepareTransaction

当前底层状态机为TRANS_INPROGRESS,同前面描述的CommitTransaction函数类似处理,设置底层状态机为TRANS_PREPARE,构造两阶段GXACT结构并创建两阶段文件,加入dummy的槽位信息,将线程的锁信息转移到dummy槽位中,释放资源,最后将底层状态机置为TRANS_DEFAULT

AbortTransaction

释放LWLock、UnlockBuffers、LockErrorCleanup,当前底层状态为TRANS_INPROGRESS,设置为TRANS_ABORT,记录相应的CLOG日志,清空事务槽位信息,释放各类资源

CleanupTransaction

当前底层状态机应为TRANS_ABORT,继续清理一些资源,一般紧接着AbortTransaction调用

FinishPreparedTransaction

结束两阶段提交事务

StartSubTransaction

开启子事务

CommitSubTransaction

提交子事务

AbortSubTransaction

回滚子事务

CleanupSubTransaction

清理子事务的一些资源信息,类似于CleanupTransaction

PushTransaction/PopTransaction

子事务类似于一个栈式的信息,Push/Pop函数是开启和结束子事务时使用

2) 处理函数,根据相应的状态机调用子函数。

具体介绍如表5-3所示。

表5-3 事务执行函数

函数

说明

StartTransactionCommand

事务开始时根据上层状态机调用相应的事务执行函数

CommitTransactionCommand

事务结束时根据上层状态机调用相应的事务执行函数

AbortCurrentTransaction

事务内部出错,长跳转longjump调用,提前清理掉相应的资源,并将事务上层状态机置为TBLOCK_ABORT

3) 上层事务状态机控制函数

具体介绍如表5-4所示。

表5-4 上层事务状态机控制函数

函数

说明

BeginTransactionBlock

开启一个显式事务时,将上层事务状态机变为TBLOCK_BEGIN

EndTransactionBlock

显式提交一个事务时,将上层事务状态机变为TBLOCK_END

UserAbortTransactionBlock

显式回滚一个事务时,将上层事务状态机变为TBLOCK_ABORT_PENDING/ TBLOCK_ABORT_END

PrepareTransactionBlock

显式执行PREPARE语句,将上层事务状态机变为TBLOCK_PREPARE

DefineSavepoint

执行savepoint语句,通过调用PushTransaction将子事务上层事务状态机变为TBLOCK_SUBBEGIN

ReleaseSavepoint

执行release savepoint语句,将子事务上层状态机转变为TBLOCK_SUBRELEASE

RollbackToSavepoint

执行“rollback to”语句,将所有子事务上层状态机转变为TBLOCK_SUBABORT_PENDING/ TBLOCK_SUBABORT_END,顶层事务的上层状态机转变为TBLOCK_SUBABORT_RESTART

posted @ 2024-04-30 09:53  openGauss-bot  阅读(7)  评论(0编辑  收藏  举报