提交 318e2623 编写于 作者: O obdev 提交者: ob-robot

[CP] add MTL_WAIT for tenant_session_mgr

上级 dca11e26
......@@ -552,7 +552,7 @@ int ObMultiTenant::init(ObAddr myaddr,
MTL_BIND2(server_obj_pool_mtl_new<ObTableScanIterator>, nullptr, nullptr, nullptr, nullptr, server_obj_pool_mtl_destroy<ObTableScanIterator>);
MTL_BIND2(mtl_new_default, ObTenantDirectLoadMgr::mtl_init, nullptr, nullptr, nullptr, mtl_destroy_default);
MTL_BIND2(ObDetectManager::mtl_new, ObDetectManager::mtl_init, nullptr, nullptr, nullptr, ObDetectManager::mtl_destroy);
MTL_BIND2(ObTenantSQLSessionMgr::mtl_new, ObTenantSQLSessionMgr::mtl_init, nullptr, nullptr, nullptr, ObTenantSQLSessionMgr::mtl_destroy);
MTL_BIND2(ObTenantSQLSessionMgr::mtl_new, ObTenantSQLSessionMgr::mtl_init, nullptr, nullptr, ObTenantSQLSessionMgr::mtl_wait, ObTenantSQLSessionMgr::mtl_destroy);
MTL_BIND2(mtl_new_default, ObDTLIntermResultManager::mtl_init, ObDTLIntermResultManager::mtl_start,
ObDTLIntermResultManager::mtl_stop, ObDTLIntermResultManager::mtl_wait, ObDTLIntermResultManager::mtl_destroy);
if (GCONF._enable_new_sql_nio && GCONF._enable_tenant_sql_net_thread) {
......
......@@ -96,7 +96,7 @@ int64_t ObTenantSQLSessionMgr::SessionPool::count() const
}
ObTenantSQLSessionMgr::ObTenantSQLSessionMgr(const int64_t tenant_id)
: tenant_id_(tenant_id),
: tenant_id_(tenant_id), count_(0),
session_allocator_(lib::ObMemAttr(tenant_id, "SQLSessionInfo"), MTL_CPU_COUNT(), 4)
{}
......@@ -137,6 +137,16 @@ int ObTenantSQLSessionMgr::mtl_init(ObTenantSQLSessionMgr *&t_session_mgr)
return ret;
}
void ObTenantSQLSessionMgr::mtl_wait(ObTenantSQLSessionMgr *&t_session_mgr)
{
while (t_session_mgr->count() != 0) {
LOG_WARN_RET(OB_NEED_RETRY, "tenant session mgr should be empty",
K(t_session_mgr->count()));
usleep(1000 * 1000);
}
LOG_INFO("success to wait tenant session mgr");
}
void ObTenantSQLSessionMgr::mtl_destroy(ObTenantSQLSessionMgr *&t_session_mgr)
{
if (nullptr != t_session_mgr) {
......@@ -155,6 +165,7 @@ ObSQLSessionInfo *ObTenantSQLSessionMgr::alloc_session()
OX (session = op_instance_alloc_args(&session_allocator_,
ObSQLSessionInfo,
tenant_id_));
OX (ATOMIC_FAA(&count_, 1));
}
OV (OB_NOT_NULL(session));
OX (session->set_tenant_session_mgr(this));
......@@ -183,6 +194,7 @@ void ObTenantSQLSessionMgr::free_session(ObSQLSessionInfo *session)
}
if (OB_NOT_NULL(session)) {
OX (op_free(session));
OX (ATOMIC_FAA(&count_, -1));
OX (session = NULL);
}
}
......@@ -201,6 +213,7 @@ void ObTenantSQLSessionMgr::clean_session_pool()
OX (session_pool_.pop_session(session));
if (OB_NOT_NULL(session)) {
OX (op_free(session));
OX (ATOMIC_FAA(&count_, -1));
OX (session = NULL);
}
}
......
......@@ -378,10 +378,12 @@ public:
void destroy();
static int mtl_new(ObTenantSQLSessionMgr *&tenant_session_mgr);
static int mtl_init(ObTenantSQLSessionMgr *&tenant_session_mgr);
static void mtl_wait(ObTenantSQLSessionMgr *&tenant_session_mgr);
static void mtl_destroy(ObTenantSQLSessionMgr *&tenant_session_mgr);
ObSQLSessionInfo *alloc_session();
void free_session(ObSQLSessionInfo *session);
void clean_session_pool();
int64_t count() const { return ATOMIC_LOAD(&count_); }
private:
class SessionPool
{
......@@ -404,6 +406,7 @@ private:
private:
const int64_t tenant_id_;
SessionPool session_pool_;
int64_t count_;
ObFixedClassAllocator<ObSQLSessionInfo> session_allocator_;
DISALLOW_COPY_AND_ASSIGN(ObTenantSQLSessionMgr);
}; // end of class ObSQLSessionMgr
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册