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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




