fix connection resource cleanup task bug

This commit is contained in:
st0
2022-03-01 16:00:51 +08:00
committed by LINxiansheng
parent 32f2910552
commit 1f694d6b96
2 changed files with 15 additions and 8 deletions

View File

@ -70,7 +70,7 @@ int ObConnectResourceMgr::init(ObMultiVersionSchemaService& schema_service)
} else { } else {
schema_service_ = &schema_service; schema_service_ = &schema_service;
inited_ = true; inited_ = true;
const int64_t delay = 3600000000; const int64_t delay = ConnResourceCleanUpTask::SLEEP_USECONDS;
const bool repeat = false; const bool repeat = false;
if (OB_FAIL(TG_SCHEDULE(lib::TGDefIDs::ServerGTimer, cleanup_task_, delay, repeat))) { if (OB_FAIL(TG_SCHEDULE(lib::TGDefIDs::ServerGTimer, cleanup_task_, delay, repeat))) {
LOG_WARN("schedual connect resource mgr failed", K(ret)); LOG_WARN("schedual connect resource mgr failed", K(ret));
@ -240,7 +240,7 @@ int ObConnectResourceMgr::increase_user_connections_count(const uint64_t max_use
return ret; return ret;
} }
// max_connectionsmax connections per hour. // max_connections: max connections per hour.
// max_user_connections: max concurrent connections. // max_user_connections: max concurrent connections.
// 0 means no limit. // 0 means no limit.
int ObConnectResourceMgr::on_user_connect(const uint64_t tenant_id, const uint64_t user_id, const ObPrivSet& priv, int ObConnectResourceMgr::on_user_connect(const uint64_t tenant_id, const uint64_t user_id, const ObPrivSet& priv,
@ -339,7 +339,12 @@ bool ObConnectResourceMgr::CleanUpConnResourceFunc::operator()(ObTenantUserKey k
} else if (is_user_) { } else if (is_user_) {
const ObUserInfo* user_info = NULL; const ObUserInfo* user_info = NULL;
if (OB_FAIL(schema_guard_.get_user_info(key.id_, user_info))) { if (OB_FAIL(schema_guard_.get_user_info(key.id_, user_info))) {
LOG_ERROR("get user info failed", K(ret), K(key.id_)); if (OB_TENANT_NOT_EXIST != ret) {
LOG_ERROR("get user info failed", K(ret), K(key.id_));
} else {
ret = OB_SUCCESS;
conn_res_map_.del(key);
}
} else if (OB_ISNULL(user_info)) { } else if (OB_ISNULL(user_info)) {
conn_res_map_.del(key); conn_res_map_.del(key);
} }
@ -358,15 +363,17 @@ bool ObConnectResourceMgr::CleanUpConnResourceFunc::operator()(ObTenantUserKey k
void ObConnectResourceMgr::ConnResourceCleanUpTask::runTimerTask() void ObConnectResourceMgr::ConnResourceCleanUpTask::runTimerTask()
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
ObSchemaGetterGuard sys_schema_guard; ObSchemaGetterGuard schema_guard;
if (OB_ISNULL(conn_res_mgr_.schema_service_)) { if (OB_ISNULL(conn_res_mgr_.schema_service_)) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_ERROR("schema service is null", K(ret)); LOG_ERROR("schema service is null", K(ret));
} else if (OB_FAIL(conn_res_mgr_.schema_service_->get_tenant_schema_guard(OB_SYS_TENANT_ID, sys_schema_guard))) { } else if (OB_FAIL(conn_res_mgr_.schema_service_->get_schema_guard(schema_guard))) {
LOG_WARN("get sys tenant schema guard failed", K(ret)); LOG_WARN("get sys tenant schema guard failed", K(ret));
} else { } else {
CleanUpConnResourceFunc user_func(sys_schema_guard, conn_res_mgr_.user_res_map_, true); LOG_INFO("clean up connection resource", K(schema_guard.get_tenant_id()),
CleanUpConnResourceFunc tenant_func(sys_schema_guard, conn_res_mgr_.user_res_map_, false); K(conn_res_mgr_.user_res_map_.size()), K(conn_res_mgr_.tenant_res_map_.size()));
CleanUpConnResourceFunc user_func(schema_guard, conn_res_mgr_.user_res_map_, true);
CleanUpConnResourceFunc tenant_func(schema_guard, conn_res_mgr_.tenant_res_map_, false);
if (OB_FAIL(conn_res_mgr_.user_res_map_.for_each(user_func))) { if (OB_FAIL(conn_res_mgr_.user_res_map_.for_each(user_func))) {
LOG_WARN("cleanup dropped user failed", K(ret)); LOG_WARN("cleanup dropped user failed", K(ret));
} else if (OB_FAIL(conn_res_mgr_.tenant_res_map_.for_each(tenant_func))) { } else if (OB_FAIL(conn_res_mgr_.tenant_res_map_.for_each(tenant_func))) {

View File

@ -134,7 +134,7 @@ private:
void runTimerTask(void) override; void runTimerTask(void) override;
ObConnectResourceMgr& conn_res_mgr_; ObConnectResourceMgr& conn_res_mgr_;
const uint64_t SLEEP_USECONDS = 3600000000; // one hour static const uint64_t SLEEP_USECONDS = 3600000000; // one hour
}; };
friend class ConnResourceCleanUpTask; friend class ConnResourceCleanUpTask;
friend class CleanUpUserResourceFunc; friend class CleanUpUserResourceFunc;