[cp]fix for comprocess info/kill hung bug

This commit is contained in:
lucky-sinx
2025-02-07 11:18:39 +00:00
committed by ob-robot
parent 3a1131854b
commit 3dd3faecc9
2 changed files with 35 additions and 16 deletions

View File

@ -191,6 +191,7 @@ cal_version(const uint64_t major, const uint64_t minor, const uint64_t major_pat
#define LAST_BARRIER_DATA_VERSION DATA_VERSION_4_2_1_0
#define PROXY_VERSION_4_2_3_0 (oceanbase::common::cal_version(4, 2, 3, 0))
#define PROXY_VERSION_4_3_0_0 (oceanbase::common::cal_version(4, 3, 0, 0))
#define PROXY_VERSION_4_3_3_0 (oceanbase::common::cal_version(4, 3, 3, 0))
class VersionUtil

View File

@ -193,26 +193,44 @@ int ObSrvMySQLXlator::translate(rpc::ObRequest &req, ObReqProcessor *&processor)
processor = p;
}
} else if (pkt.get_cmd() == obmysql::COM_PROCESS_INFO) {
char *buf = (&co_ep_rpcp_buf)->obmp_query_buffer_;
ObMPProcessInfo *p = new (buf) ObMPProcessInfo(gctx_);
if (OB_ISNULL(p)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
} else if (OB_FAIL(p->init())) {
SERVER_LOG(ERROR, "Init ObMPProcessInfo fail", K(ret));
p->~ObMPProcessInfo();
ObSMConnection *conn = reinterpret_cast<ObSMConnection* >(
SQL_REQ_OP.get_sql_session(&req));
if (OB_ISNULL(conn)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(conn), K(ret));
} else if (conn->is_proxy_ && conn->proxy_version_ < PROXY_VERSION_4_3_0_0) {
NEW_MYSQL_PROCESSOR(ObMPDefault, gctx_);
} else {
processor = p;
char *buf = (&co_ep_rpcp_buf)->obmp_query_buffer_;
ObMPProcessInfo *p = new (buf) ObMPProcessInfo(gctx_);
if (OB_ISNULL(p)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
} else if (OB_FAIL(p->init())) {
SERVER_LOG(ERROR, "Init ObMPProcessInfo fail", K(ret));
p->~ObMPProcessInfo();
} else {
processor = p;
}
}
} else if (pkt.get_cmd() == obmysql::COM_PROCESS_KILL) {
char *buf = (&co_ep_rpcp_buf)->obmp_query_buffer_;
ObMPProcessKill *p = new (buf) ObMPProcessKill(gctx_);
if (OB_ISNULL(p)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
} else if (OB_FAIL(p->init())) {
SERVER_LOG(ERROR, "Init ObMPProcessKill fail", K(ret));
p->~ObMPProcessKill();
ObSMConnection *conn = reinterpret_cast<ObSMConnection* >(
SQL_REQ_OP.get_sql_session(&req));
if (OB_ISNULL(conn)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(conn), K(ret));
} else if (conn->is_proxy_ && conn->proxy_version_ < PROXY_VERSION_4_3_0_0) {
NEW_MYSQL_PROCESSOR(ObMPDefault, gctx_);
} else {
processor = p;
char *buf = (&co_ep_rpcp_buf)->obmp_query_buffer_;
ObMPProcessKill *p = new (buf) ObMPProcessKill(gctx_);
if (OB_ISNULL(p)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
} else if (OB_FAIL(p->init())) {
SERVER_LOG(ERROR, "Init ObMPProcessKill fail", K(ret));
p->~ObMPProcessKill();
} else {
processor = p;
}
}
} else {
switch (pkt.get_cmd()) {