[CP] fix the incorrect logic to mark session id unused
This commit is contained in:

committed by
ob-robot

parent
e297a501e4
commit
44b6f772e1
@ -119,12 +119,6 @@ int ObSMConnectionCallback::init(ObSqlSockSession& sess, ObSMConnection& conn)
|
||||
} else {
|
||||
LOG_INFO("sm conn init succ", K(conn.sessid_), K(sess.client_addr_));
|
||||
}
|
||||
if (OB_SUCCESS != ret && OB_SUCCESS == conn.ret_) {
|
||||
int tmp_ret = OB_SUCCESS;
|
||||
if (OB_SUCCESS != (tmp_ret = GCTX.session_mgr_->mark_sessid_unused(conn.sessid_))) {
|
||||
LOG_ERROR("fail to mark sessid unused", K(tmp_ret), K(conn.sessid_));
|
||||
}
|
||||
}
|
||||
|
||||
//如果当前function发生错误,应该在当前function中进行mark_sessid_unused
|
||||
if (OB_SUCCESS == ret && OB_SUCCESS == conn.ret_) {
|
||||
@ -149,9 +143,10 @@ void ObSMConnectionCallback::destroy(ObSMConnection& conn)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
bool is_need_clear = false;
|
||||
sql::ObDisconnectState disconnect_state;
|
||||
sql::ObDisconnectState disconnect_state = sql::ObDisconnectState::DIS_INIT;
|
||||
ObCurTraceId::TraceId trace_id;
|
||||
if (conn.is_sess_alloc_ && !conn.is_sess_free_) {
|
||||
if (conn.is_sess_alloc_) {
|
||||
if (!conn.is_sess_free_) {
|
||||
{
|
||||
int tmp_ret = OB_SUCCESS;
|
||||
sql::ObSQLSessionInfo *sess_info = NULL;
|
||||
@ -195,8 +190,8 @@ void ObSMConnectionCallback::destroy(ObSMConnection& conn)
|
||||
LOG_WARN("free session fail and related session id can not be reused", K(ret), K(ctx));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//if session is not alloc, session id should be mark unused here
|
||||
if (OB_UNLIKELY(OB_FAIL(sql::ObSQLSessionMgr::is_need_clear_sessid(&conn, is_need_clear)))) {
|
||||
LOG_ERROR("fail to jugde need clear", K(ret));
|
||||
} else if (is_need_clear) {
|
||||
|
@ -116,12 +116,6 @@ int ObSMHandler::on_connect(easy_connection_t *c)
|
||||
LOG_INFO("new mysql sessid created", K(easy_connection_str(c)), K(sessid), K(crt_id_ret));
|
||||
}
|
||||
}
|
||||
|
||||
if (EASY_ERROR == eret && OB_SUCCESS == crt_id_ret) {
|
||||
if (OB_SUCCESS != (tmp_ret = gctx_.session_mgr_->mark_sessid_unused(sessid))) {
|
||||
LOG_ERROR_RET(tmp_ret, "fail to mark sessid unused", K(tmp_ret), K(sessid));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -179,7 +173,7 @@ int ObSMHandler::on_close(easy_connection_t *c)
|
||||
int ret = OB_SUCCESS;
|
||||
bool is_need_clear = false;
|
||||
ObSMConnection *conn = NULL;
|
||||
sql::ObDisconnectState disconnect_state;
|
||||
sql::ObDisconnectState disconnect_state = sql::ObDisconnectState::DIS_INIT;
|
||||
ObCurTraceId::TraceId trace_id;
|
||||
if (OB_ISNULL(c) || OB_ISNULL(gctx_.session_mgr_)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
@ -192,7 +186,8 @@ int ObSMHandler::on_close(easy_connection_t *c)
|
||||
LOG_ERROR("conn is NULL", K(ret));
|
||||
} else {
|
||||
//free session
|
||||
if (conn->is_sess_alloc_ && !conn->is_sess_free_) {
|
||||
if (conn->is_sess_alloc_) {
|
||||
if (!conn->is_sess_free_) {
|
||||
{
|
||||
int tmp_ret = OB_SUCCESS;
|
||||
sql::ObSQLSessionInfo *sess_info = NULL;
|
||||
@ -236,8 +231,8 @@ int ObSMHandler::on_close(easy_connection_t *c)
|
||||
LOG_WARN("free session fail and related session id can not be reused", K(ret), K(ctx), "sessid", conn->sessid_);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//if session is not alloc, session id should be mark unused here
|
||||
if (OB_UNLIKELY(OB_FAIL(sql::ObSQLSessionMgr::is_need_clear_sessid(conn, is_need_clear)))) {
|
||||
LOG_ERROR("fail to jugde need clear", K(ret));
|
||||
} else if (is_need_clear) {
|
||||
|
Reference in New Issue
Block a user