这个文章其实建了好久了,一直搁着没写.因为一直忙着开会,设计方案,做ppt,静不下心开代码,今天补上吧
TxnManager
- 类成员
MemSessionPtr<TxnAccess> m_accessMgr:事务缓存(OCC优化),主要维护着事务的读写集m_rowSet,每个访问的sentinel在这个集合中都会有一个access对象,记录这对这个记录的操作,是事务的核心数据结构.
还有一些事务的属性,如事务id,提交csn,隔离级别,事务状态(启动,结束,提交等). 还有内存管理的一些工具类成员. - 函数
这个里面封装了很多事务操作的函数.
- RowLookup.查找指定行数据,依赖的相关函数有AccessLookup.
- 控制事务执行的函数,StartTransaction,Commit(主要是调用occ验证事务冲突),CommitInternal(真正的提交操作,通过occ验证后,调用m_occManager的WriteChanges将操作写入到sentinel,意味着从私有变为共有,其他事务对这个操作的结果可见)
- 乐观插入的实现:ExecuteOptimisticInsert,这个是mot的一个重点,在之前的文章有介绍
- DDL的操作,如表,索引等的创建和删除:CreateTable,DropTable,CreateIndex
- 事务的回滚实现,如RollbackDDLs,RollbackSecondaryIndexInsert,RollbackInsert
网友评论