sql nio support sql disconnect reason log
This commit is contained in:
@ -145,25 +145,29 @@ static void sm_conn_unlock_tenant(ObSMConnection& conn)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sm_conn_log_close(ObSMConnection& conn, int ret)
|
|
||||||
{
|
|
||||||
LOG_INFO("connection close",
|
|
||||||
"sessid", conn.sessid_,
|
|
||||||
"proxy_sessid", conn.proxy_sessid_,
|
|
||||||
"tenant_id", conn.tenant_id_,
|
|
||||||
"server_id", GCTX.server_id_,
|
|
||||||
"from_proxy", conn.is_proxy_,
|
|
||||||
"from_java_client", conn.is_java_client_,
|
|
||||||
"c/s protocol", get_cs_protocol_type_name(conn.get_cs_protocol_type()),
|
|
||||||
"is_need_clear_sessid_", conn.is_need_clear_sessid_,
|
|
||||||
K(ret));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ObSMConnectionCallback::destroy(ObSMConnection& conn)
|
void ObSMConnectionCallback::destroy(ObSMConnection& conn)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
bool is_need_clear = false;
|
bool is_need_clear = false;
|
||||||
|
sql::ObDisconnectState disconnect_state;
|
||||||
|
ObCurTraceId::TraceId trace_id;
|
||||||
if (conn.is_sess_alloc_ && !conn.is_sess_free_) {
|
if (conn.is_sess_alloc_ && !conn.is_sess_free_) {
|
||||||
|
{
|
||||||
|
int tmp_ret = OB_SUCCESS;
|
||||||
|
sql::ObSQLSessionInfo *sess_info = NULL;
|
||||||
|
sql::ObSessionGetterGuard guard(*GCTX.session_mgr_, conn.sessid_);
|
||||||
|
if (OB_UNLIKELY(OB_SUCCESS != (tmp_ret = guard.get_session(sess_info)))) {
|
||||||
|
LOG_WARN_RET(tmp_ret, "fail to get session", K(tmp_ret), K(conn.sessid_),
|
||||||
|
"proxy_sessid", conn.proxy_sessid_);
|
||||||
|
} else if (OB_ISNULL(sess_info)) {
|
||||||
|
tmp_ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN_RET(tmp_ret, "session info is NULL", K(tmp_ret), K(conn.sessid_),
|
||||||
|
"proxy_sessid", conn.proxy_sessid_);
|
||||||
|
} else {
|
||||||
|
disconnect_state = sess_info->get_disconnect_state();
|
||||||
|
trace_id = sess_info->get_current_trace_id();
|
||||||
|
}
|
||||||
|
}
|
||||||
sql::ObFreeSessionCtx ctx;
|
sql::ObFreeSessionCtx ctx;
|
||||||
ctx.tenant_id_ = conn.tenant_id_;
|
ctx.tenant_id_ = conn.tenant_id_;
|
||||||
ctx.sessid_ = conn.sessid_;
|
ctx.sessid_ = conn.sessid_;
|
||||||
@ -201,15 +205,28 @@ void ObSMConnectionCallback::destroy(ObSMConnection& conn)
|
|||||||
} else if (is_need_clear) {
|
} else if (is_need_clear) {
|
||||||
GCTX.session_mgr_->mark_sessid_unused(conn.sessid_);
|
GCTX.session_mgr_->mark_sessid_unused(conn.sessid_);
|
||||||
}
|
}
|
||||||
|
|
||||||
sm_conn_unlock_tenant(conn);
|
sm_conn_unlock_tenant(conn);
|
||||||
sm_conn_log_close(conn, ret);
|
share::ObTaskController::get().allow_next_syslog();
|
||||||
|
LOG_INFO("connection close",
|
||||||
|
"sessid", conn.sessid_,
|
||||||
|
"proxy_sessid", conn.proxy_sessid_,
|
||||||
|
"tenant_id", conn.tenant_id_,
|
||||||
|
"server_id", GCTX.server_id_,
|
||||||
|
"from_proxy", conn.is_proxy_,
|
||||||
|
"from_java_client", conn.is_java_client_,
|
||||||
|
"c/s protocol", get_cs_protocol_type_name(conn.get_cs_protocol_type()),
|
||||||
|
"is_need_clear_sessid_", conn.is_need_clear_sessid_,
|
||||||
|
K(ret),
|
||||||
|
K(trace_id),
|
||||||
|
K(conn.pkt_rec_wrapper_),
|
||||||
|
K(disconnect_state));
|
||||||
conn.~ObSMConnection();
|
conn.~ObSMConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObSMConnectionCallback::on_disconnect(observer::ObSMConnection& conn)
|
int ObSMConnectionCallback::on_disconnect(observer::ObSMConnection& conn)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
|
||||||
if (conn.is_sess_alloc_
|
if (conn.is_sess_alloc_
|
||||||
&& !conn.is_sess_free_
|
&& !conn.is_sess_free_
|
||||||
&& ObSMConnection::INITIAL_SESSID != conn.sessid_) {
|
&& ObSMConnection::INITIAL_SESSID != conn.sessid_) {
|
||||||
@ -228,7 +245,7 @@ int ObSMConnectionCallback::on_disconnect(observer::ObSMConnection& conn)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG_INFO("kill and revert session", K(conn.sessid_),
|
LOG_INFO("kill and revert session", K(conn.sessid_),
|
||||||
"proxy_sessid", conn.proxy_sessid_, "server_id", GCTX.server_id_, K(ret));
|
"proxy_sessid", conn.proxy_sessid_, "server_id", GCTX.server_id_, K(ret));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -148,10 +148,6 @@ int ObSMHandler::on_disconnect(easy_connection_t *c)
|
|||||||
eret = EASY_ERROR;
|
eret = EASY_ERROR;
|
||||||
LOG_ERROR_RET(OB_ERR_UNEXPECTED, "conn is null", K(eret));
|
LOG_ERROR_RET(OB_ERR_UNEXPECTED, "conn is null", K(eret));
|
||||||
} else {
|
} else {
|
||||||
// get reason for disconnect.
|
|
||||||
sql::ObDisconnectState dis_state;
|
|
||||||
// get trace_id for disconnect.
|
|
||||||
ObCurTraceId::TraceId trace_id;
|
|
||||||
//set session shadow
|
//set session shadow
|
||||||
if (conn->is_sess_alloc_
|
if (conn->is_sess_alloc_
|
||||||
&& !conn->is_sess_free_
|
&& !conn->is_sess_free_
|
||||||
@ -166,23 +162,13 @@ int ObSMHandler::on_disconnect(easy_connection_t *c)
|
|||||||
LOG_WARN_RET(tmp_ret, "session info is NULL", K(tmp_ret), K(conn->sessid_),
|
LOG_WARN_RET(tmp_ret, "session info is NULL", K(tmp_ret), K(conn->sessid_),
|
||||||
"proxy_sessid", conn->proxy_sessid_);
|
"proxy_sessid", conn->proxy_sessid_);
|
||||||
} else {
|
} else {
|
||||||
// tcp disconnect
|
|
||||||
if (EASY_CONN_CLOSE_BY_PEER == c->status) {
|
|
||||||
if(sql::DIS_INIT == sess_info->get_disconnect_state()) {
|
|
||||||
sess_info->set_disconnect_state(sql::CLIENT_FORCE_DISCONNECT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sess_info->set_session_state(sql::SESSION_KILLED);
|
sess_info->set_session_state(sql::SESSION_KILLED);
|
||||||
sess_info->set_shadow(true);
|
sess_info->set_shadow(true);
|
||||||
dis_state = sess_info->get_disconnect_state();
|
|
||||||
trace_id = sess_info->get_current_trace_id();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
share::ObTaskController::get().allow_next_syslog();
|
|
||||||
LOG_INFO("kill and revert session", K(conn->sessid_),
|
LOG_INFO("kill and revert session", K(conn->sessid_),
|
||||||
"proxy_sessid", conn->proxy_sessid_, "server_id", GCTX.server_id_,
|
"proxy_sessid", conn->proxy_sessid_, "server_id", GCTX.server_id_,
|
||||||
K(tmp_ret), K(eret), K(dis_state), K(trace_id),
|
K(tmp_ret), K(eret));
|
||||||
K(conn->get_cs_protocol_type()), K(conn->pkt_rec_wrapper_));
|
|
||||||
}
|
}
|
||||||
return eret;
|
return eret;
|
||||||
}
|
}
|
||||||
@ -193,6 +179,8 @@ int ObSMHandler::on_close(easy_connection_t *c)
|
|||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
bool is_need_clear = false;
|
bool is_need_clear = false;
|
||||||
ObSMConnection *conn = NULL;
|
ObSMConnection *conn = NULL;
|
||||||
|
sql::ObDisconnectState disconnect_state;
|
||||||
|
ObCurTraceId::TraceId trace_id;
|
||||||
if (OB_ISNULL(c) || OB_ISNULL(gctx_.session_mgr_)) {
|
if (OB_ISNULL(c) || OB_ISNULL(gctx_.session_mgr_)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_ERROR("easy_connection_t or session_mgr is null",
|
LOG_ERROR("easy_connection_t or session_mgr is null",
|
||||||
@ -205,6 +193,22 @@ int ObSMHandler::on_close(easy_connection_t *c)
|
|||||||
} else {
|
} else {
|
||||||
//free session
|
//free session
|
||||||
if (conn->is_sess_alloc_ && !conn->is_sess_free_) {
|
if (conn->is_sess_alloc_ && !conn->is_sess_free_) {
|
||||||
|
{
|
||||||
|
int tmp_ret = OB_SUCCESS;
|
||||||
|
sql::ObSQLSessionInfo *sess_info = NULL;
|
||||||
|
sql::ObSessionGetterGuard guard(*gctx_.session_mgr_, conn->sessid_);
|
||||||
|
if (OB_UNLIKELY(OB_SUCCESS != (tmp_ret = guard.get_session(sess_info)))) {
|
||||||
|
LOG_WARN_RET(tmp_ret, "fail to get session", K(tmp_ret), K(conn->sessid_),
|
||||||
|
"proxy_sessid", conn->proxy_sessid_);
|
||||||
|
} else if (OB_ISNULL(sess_info)) {
|
||||||
|
tmp_ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN_RET(tmp_ret, "session info is NULL", K(tmp_ret), K(conn->sessid_),
|
||||||
|
"proxy_sessid", conn->proxy_sessid_);
|
||||||
|
} else {
|
||||||
|
disconnect_state = sess_info->get_disconnect_state();
|
||||||
|
trace_id = sess_info->get_current_trace_id();
|
||||||
|
}
|
||||||
|
}
|
||||||
sql::ObFreeSessionCtx ctx;
|
sql::ObFreeSessionCtx ctx;
|
||||||
ctx.tenant_id_ = conn->tenant_id_;
|
ctx.tenant_id_ = conn->tenant_id_;
|
||||||
ctx.sessid_ = conn->sessid_;
|
ctx.sessid_ = conn->sessid_;
|
||||||
@ -258,7 +262,7 @@ int ObSMHandler::on_close(easy_connection_t *c)
|
|||||||
LOG_INFO("unlock session of tenant", K(conn->sessid_),
|
LOG_INFO("unlock session of tenant", K(conn->sessid_),
|
||||||
"proxy_sessid", conn->proxy_sessid_, K(conn->tenant_id_));
|
"proxy_sessid", conn->proxy_sessid_, K(conn->tenant_id_));
|
||||||
}
|
}
|
||||||
|
share::ObTaskController::get().allow_next_syslog();
|
||||||
LOG_INFO("connection close",
|
LOG_INFO("connection close",
|
||||||
K(easy_connection_str(c)),
|
K(easy_connection_str(c)),
|
||||||
"sessid", conn->sessid_,
|
"sessid", conn->sessid_,
|
||||||
@ -269,7 +273,10 @@ int ObSMHandler::on_close(easy_connection_t *c)
|
|||||||
"from_java_client", conn->is_java_client_,
|
"from_java_client", conn->is_java_client_,
|
||||||
"c/s protocol", get_cs_protocol_type_name(conn->get_cs_protocol_type()),
|
"c/s protocol", get_cs_protocol_type_name(conn->get_cs_protocol_type()),
|
||||||
"is_need_clear_sessid_", conn->is_need_clear_sessid_,
|
"is_need_clear_sessid_", conn->is_need_clear_sessid_,
|
||||||
K(ret));
|
K(ret),
|
||||||
|
K(trace_id),
|
||||||
|
K(conn->pkt_rec_wrapper_),
|
||||||
|
K(disconnect_state));
|
||||||
conn->~ObSMConnection();
|
conn->~ObSMConnection();
|
||||||
conn = nullptr;
|
conn = nullptr;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1354,7 +1354,7 @@ protected:
|
|||||||
cur_query_len_(0),
|
cur_query_len_(0),
|
||||||
cur_statement_id_(0),
|
cur_statement_id_(0),
|
||||||
last_active_time_(0),
|
last_active_time_(0),
|
||||||
dis_state_(DIS_INIT),
|
dis_state_(CLIENT_FORCE_DISCONNECT),
|
||||||
state_(SESSION_SLEEP),
|
state_(SESSION_SLEEP),
|
||||||
is_interactive_(false),
|
is_interactive_(false),
|
||||||
sock_desc_(),
|
sock_desc_(),
|
||||||
@ -1389,7 +1389,7 @@ protected:
|
|||||||
cur_query_len_ = 0;
|
cur_query_len_ = 0;
|
||||||
cur_statement_id_ = 0;
|
cur_statement_id_ = 0;
|
||||||
last_active_time_ = 0;
|
last_active_time_ = 0;
|
||||||
dis_state_ = DIS_INIT;
|
dis_state_ = CLIENT_FORCE_DISCONNECT;
|
||||||
state_ = SESSION_SLEEP;
|
state_ = SESSION_SLEEP;
|
||||||
is_interactive_ = false;
|
is_interactive_ = false;
|
||||||
sock_desc_.clear_sql_session_info();
|
sock_desc_.clear_sql_session_info();
|
||||||
|
|||||||
@ -577,6 +577,7 @@ int ObSQLSessionMgr::kill_session(ObSQLSessionInfo &session)
|
|||||||
}
|
}
|
||||||
|
|
||||||
session.update_last_active_time();
|
session.update_last_active_time();
|
||||||
|
session.set_disconnect_state(NORMAL_KILL_SESSION);
|
||||||
rpc::ObSqlSockDesc &sock_desc = session.get_sock_desc();
|
rpc::ObSqlSockDesc &sock_desc = session.get_sock_desc();
|
||||||
if (OB_LIKELY(NULL != sock_desc.sock_desc_)) {
|
if (OB_LIKELY(NULL != sock_desc.sock_desc_)) {
|
||||||
SQL_REQ_OP.disconnect_by_sql_sock_desc(sock_desc);
|
SQL_REQ_OP.disconnect_by_sql_sock_desc(sock_desc);
|
||||||
|
|||||||
Reference in New Issue
Block a user