美文网首页
openGauss源码#session与transaction

openGauss源码#session与transaction

作者: upup果 | 来源:发表于2021-01-05 08:35 被阅读0次

    今天简单介绍下openGauss的MOT中,session与transantion的关系.一个session,对应着一个用户连接,比如说一个JDBC的connection.通常,在一个session周期内,同时只能执行一个事务,只有当前的事务执行完,才能处理下一个事务,如果存在多个用户连接,即session,就会有多个并发的事务.一个session中所有的事务,都是用同一个TxnManager(负责管理事务执行的类),每完成一个事务,TxnManger就会调用CleanUp函数,清空m_roeSet数据结构.下一次来新的事务时,TxnManger就像是刚初始化一样,之前事务的一切痕迹都没有了.TxnManager中有一个内部ID,在执行CleanUp时,会自增1,可以知道一共执行过多少个事务.MOT是NUMA内存感知的,他的所有内存都是统一NUMA节点分配的,TxnManager在初始化时依赖于Session的上下文,所以他们的关系是很密切的.下面是部分源码的注释.

    if (!u_sess->mot_cxt.txn_manager) {
        bool attachCleanFunc =
            (MOTCurrThreadId == INVALID_THREAD_ID ? true : !g_instance.attr.attr_common.enable_thread_pool);
        // 确保引擎是已经初始化过的
        if (m_engine == nullptr) {
            elog(ERROR, "initTxnManager: MOT engine is not initialized");
            return nullptr;
        }
        // 创建新的session上下文,engine中有一个sessionManager负责上下文的创建
        MOT::SessionContext* session_ctx =
            MOT::GetSessionManager()->CreateSessionContext(IS_PGXC_COORDINATOR, 0, nullptr, connection_id);
        if (session_ctx == nullptr) {
            MOT_REPORT_ERROR(MOT_ERROR_INTERNAL, "Session Initialization", "Failed to create session context");
            ereport(FATAL, (errmsg("Session startup: failed to create session context.")));
            return nullptr;
        }
        //记录session信息
        RecordSessionDetails();
        if (attachCleanFunc) {
            // 上下文未被使用时会被清理
            if (!g_instance.attr.attr_common.enable_thread_pool) {
                on_proc_exit(DestroyTxn, PointerGetDatum(session_ctx));
                ScheduleSessionCleanup();
            } else {
                on_proc_exit(MOTCleanupThread, PointerGetDatum(nullptr));
                MOT_LOG_DEBUG("Registered current thread for proc-exit callback for thread %p", (void*)pthread_self());
            }
        }
        //将新的TxnManager传给MOT用户的session
        u_sess->mot_cxt.txn_manager = session_ctx->GetTxnManager();

    相关文章

      网友评论

          本文标题:openGauss源码#session与transaction

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