[CP] fix the session-id leak when Login authentication failed and free_session does not set session-id unused

This commit is contained in:
496148326@qq.com
2023-06-22 03:12:32 +00:00
committed by ob-robot
parent a9a358af8b
commit 18882148c8

View File

@ -297,6 +297,7 @@ int ObMPBase::free_session()
ret = OB_ERR_UNEXPECTED;
LOG_ERROR("session manager is null", K(ret));
} else {
bool is_need_clear = false;
ObFreeSessionCtx ctx;
ctx.tenant_id_ = conn->tenant_id_;
ctx.sessid_ = conn->sessid_;
@ -307,6 +308,15 @@ int ObMPBase::free_session()
} else {
LOG_INFO("free session successfully", K(ctx));
conn->is_sess_free_ = true;
if (OB_UNLIKELY(OB_FAIL(sql::ObSQLSessionMgr::is_need_clear_sessid(conn, is_need_clear)))) {
LOG_ERROR("fail to jugde need clear", K(ret), "sessid", conn->sessid_, "server_id", GCTX.server_id_);
} else if (is_need_clear) {
if (OB_FAIL(GCTX.session_mgr_->mark_sessid_unused(conn->sessid_))) {
LOG_WARN("mark session id unused failed", K(ret), "sessid", conn->sessid_);
} else {
LOG_INFO("mark session id unused", "sessid", conn->sessid_);
}
}
}
}
return ret;