美文网首页程序员
openGauss源码#事务之txn_access.h文件:当前

openGauss源码#事务之txn_access.h文件:当前

作者: upup果 | 来源:发表于2020-12-19 09:43 被阅读0次
    • TxnAccess:缓存管理器
      -- 成员变量
      访问集 Access** m_accessesSetBuff,
      存储在访问集数组中的行数m_rowCnt,
      在访问集数组中分配的access数m_allocatedAc,初始访问集数组大小m_accessSetSize=500
      TxnManager* m_txnManager 和TxnInsertAction* m_insertManager.
      被访问的最后一行访问项Access* m_lastAcc
      按行地址维护有序的访问指针TxnOrderedSet_t* m_rowsSet
      用于表缓存管理的 std::unordered_map<Table, uint32_t> m_tableStat
      Row* m_rowZero = nullptr,用于读已提交的隔离级别
      DummyTable m_dummyTable:用户事务的行缓存
      -- 函数
      Init:参数为TxnManager
      ,首先为m_accessesSetBuff申请空间,然后初始化虚拟表,创建rowZero.然后创建m_rowsSet,创建并初始化m_insertManager.
      AccessSet的清空,重分配,收缩等方法.
      TxnAccess::CreateNewAccess(Table* table, AccessType type):创建一个新的access,如果访问类型不是INS,调用虚表创建一个新的row,并把这个row赋给access的m_localRow,然后初始化m_modifiedColumns.如果是插入就设m_localRow为null.
      Access* TxnAccess::GetNewRowAccess(const Row* row, AccessType type, RC& rc):获取access的指针并重置.如果访问类型不是INS,m_localRow为null的话先new一个row给m_localRow,初始化m_modifiedColumns.调用传入参数row的GetRow方法,将参数row复制给m_localRow.并把ID等信息也复制,设置为已提交.如果是插入就把参数row赋值给m_localInsertRow,并设置其为未提交.
      Access* RowLookup(void* const currentKey):在m_rowsSet中寻找,找到则返回,并执行SetLastAccess,否则就返回nullptr.
      RC AccessLookup(const AccessType type, Sentinel* const originalSentinel, Row& r_local_Row):使用sentinel作为键在缓存m_rowsSet中搜索一行.根据返回Access的访问类型,返回结果.
      Row* TxnAccess::MapRowtoLocalTable(const AccessType type, Sentinel
      const& originalSentinel, RC& rc):获取一个Access(GetNewRowAccess),设置Last Access.Access的m_origSentinel设置为传入的sentinel的主sentinel.将其添加到m_rowsSet中,返回m_localRow.
      Row* TxnAccess::AddInsertToLocalAccess(Sentinel* org_sentinel, Row* org_row, RC& rc, bool isUpgrade):在本地缓存中添加一个“插入行”行访问条目

    相关文章

      网友评论

        本文标题:openGauss源码#事务之txn_access.h文件:当前

        本文链接:https://www.haomeiwen.com/subject/fhtrgktx.html