暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

openGauss小助手 2021-10-24
300
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
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论