[to #54249319] fix: alter param_id_ type from int16_t to uint16_t

This commit is contained in:
haohao022
2024-01-17 09:42:53 +00:00
committed by ob-robot
parent 004042cb70
commit 37f26e7e4a
4 changed files with 41 additions and 27 deletions

View File

@ -46,7 +46,7 @@ ObMPStmtSendLongData::ObMPStmtSendLongData(const ObGlobalContext &gctx)
exec_start_timestamp_(0),
exec_end_timestamp_(0),
stmt_id_(0),
param_id_(-1),
param_id_(OB_MAX_PARAM_ID),
buffer_len_(0),
buffer_(),
need_disconnect_(false)
@ -71,18 +71,22 @@ int ObMPStmtSendLongData::before_process()
const char* pos = pkt.get_cdata();
// stmt_id
ObMySQLUtil::get_int4(pos, stmt_id_);
ObMySQLUtil::get_int2(pos, param_id_);
if (stmt_id_ < 1 || param_id_ < 0) {
ObMySQLUtil::get_uint2(pos, param_id_);
if (OB_SUCC(ret) && stmt_id_ < 1) {
ret = OB_ERR_PARAM_INVALID;
LOG_WARN("send long data get error info.", K(stmt_id_), K(param_id_));
} else {
buffer_len_ = pkt.get_clen()-7;
buffer_.assign_ptr(pos, static_cast<ObString::obstr_size_t>(buffer_len_));
LOG_INFO("get info success in send long data protocol.",
K(stmt_id_), K(param_id_), K(buffer_len_), K(buffer_));
LOG_WARN("send_long_data receive unexpected stmt_id_", K(ret), K(stmt_id_), K(param_id_));
} else if (param_id_ >= OB_PARAM_ID_OVERFLOW_RISK_THRESHOLD) {
LOG_WARN("param_id_ has the risk of overflow", K(ret), K(stmt_id_), K(param_id_));
}
LOG_INFO("send long data get param",K(stmt_id_), K(param_id_),
K(buffer_len_), K(buffer_.length()), K(buffer_));
if (OB_SUCC(ret)) {
buffer_len_ = pkt.get_clen() - 7;
buffer_.assign_ptr(pos, static_cast<ObString::obstr_size_t>(buffer_len_));
LOG_INFO("resolve send_long_data protocol packet successfully",
K(stmt_id_), K(param_id_), K(buffer_len_));
LOG_DEBUG("send_long_data packet content", K(buffer_));
}
LOG_INFO("resolve send_long_data protocol packet",
K(ret), K(stmt_id_), K(param_id_), K(buffer_len_), K(buffer_.length()));
}
return ret;
}
@ -343,6 +347,8 @@ int ObMPStmtSendLongData::store_piece(ObSQLSessionInfo &session)
LOG_WARN("add piece buffer fail.", K(ret), K(stmt_id_));
} else {
// send long data do not response.
LOG_INFO("store piece successfully", K(ret), K(session.get_sessid()),
K(stmt_id_), K(param_id_));
}
}
return ret;

View File

@ -74,7 +74,7 @@ private:
int64_t exec_start_timestamp_;
int64_t exec_end_timestamp_;
int32_t stmt_id_;
int16_t param_id_;
uint16_t param_id_;
uint64_t buffer_len_;
common::ObString buffer_;
bool need_disconnect_;

View File

@ -45,7 +45,7 @@ ObMPStmtSendPieceData::ObMPStmtSendPieceData(const ObGlobalContext &gctx)
exec_start_timestamp_(0),
exec_end_timestamp_(0),
stmt_id_(0),
param_id_(-1),
param_id_(OB_MAX_PARAM_ID),
buffer_len_(0),
buffer_(),
piece_mode_(ObInvalidPiece),
@ -78,19 +78,23 @@ int ObMPStmtSendPieceData::before_process()
ObMySQLUtil::get_int1(pos, piece_mode_);
int8_t is_null = 0;
ObMySQLUtil::get_int1(pos, is_null);
1 == is_null ? is_null_ = true : is_null_ = false;
is_null_ = (1 == is_null);
ObMySQLUtil::get_int8(pos, buffer_len_);
if (stmt_id_ < 1 || param_id_ < 0 || buffer_len_ < 0) {
if (stmt_id_ < 1 || buffer_len_ < 0) {
ret = OB_ERR_PARAM_INVALID;
LOG_WARN("send long data get error info.", K(stmt_id_), K(param_id_), K(buffer_len_));
} else {
LOG_WARN("send_piece receive unexpected params", K(ret), K(stmt_id_), K(buffer_len_));
} else if (param_id_ >= OB_PARAM_ID_OVERFLOW_RISK_THRESHOLD) {
LOG_WARN("param_id_ has the risk of overflow", K(ret), K(stmt_id_), K(param_id_));
}
if (OB_SUCC(ret)) {
buffer_.assign_ptr(pos, static_cast<ObString::obstr_size_t>(buffer_len_));
pos += buffer_len_;
LOG_DEBUG("get info success in send long data protocol.",
K(stmt_id_), K(param_id_));
LOG_INFO("resolve send_piece protocol packet successfully",
K(ret), K(stmt_id_), K(param_id_), K(buffer_len_));
LOG_DEBUG("send_piece packet content", K(buffer_));
}
LOG_DEBUG("send long data get param",K(stmt_id_), K(param_id_),
K(piece_mode_), K(buffer_len_), K(buffer_.length()));
LOG_INFO("resolve send_piece protocol packet",
K(ret), K(stmt_id_), K(param_id_), K(buffer_len_), K(piece_mode_), K(is_null_));
}
return ret;
}
@ -331,6 +335,8 @@ int ObMPStmtSendPieceData::store_piece(ObSQLSessionInfo &session)
&buffer_))) {
LOG_WARN("add piece buffer fail.", K(ret), K(stmt_id_));
} else {
LOG_INFO("store piece successfully", K(ret), K(session.get_sessid()),
K(stmt_id_), K(param_id_));
if (is_null_) {
OZ (piece->get_is_null_map().add_member(piece->get_position()));
}
@ -384,7 +390,7 @@ int ObPiece::piece_init(ObSQLSessionInfo &session,
OB_ALLOCATE_MEMORY_FAILED, sizeof(ObPieceBufferArray));
OX (MEMSET(buf, 0, sizeof(ObPieceBufferArray)));
OV (OB_NOT_NULL(buf_array = new (buf) ObPieceBufferArray(alloc)));
OZ (buf_array->reserve(OB_MAX_PIECE_COUNT));
OZ (buf_array->reserve(OB_MAX_PIECE_BUFFER_COUNT));
if (OB_SUCC(ret)) {
set_buffer_array(buf_array);
} else {
@ -697,7 +703,7 @@ int ObPieceCache::make_piece_buffer(ObIAllocator *allocator,
OX (MEMSET(piece_mem, 0, sizeof(ObPieceBuffer)));
OV (OB_NOT_NULL(piece_buffer = new (piece_mem) ObPieceBuffer(allocator, mode)));
CK (OB_NOT_NULL(piece_buffer));
OX (piece_buffer->set_piece_buffer(buf));
OZ (piece_buffer->set_piece_buffer(buf));
LOG_DEBUG("make piece buffer.", K(ret), K(mode), K(buf->length()));
return ret;
}

View File

@ -148,7 +148,9 @@ private:
ObIAllocator *allocator_;
};
#define OB_MAX_PIECE_COUNT 1024
#define OB_MAX_PIECE_BUFFER_COUNT 1024
#define OB_MAX_PARAM_ID UINT16_MAX
#define OB_PARAM_ID_OVERFLOW_RISK_THRESHOLD (OB_MAX_PARAM_ID - 4096) // imprecise estimate
typedef common::ObFixedArray<ObPieceBuffer, common::ObIAllocator> ObPieceBufferArray;
class ObPiece
@ -156,7 +158,7 @@ class ObPiece
public:
ObPiece()
: stmt_id_(0),
param_id_(-1),
param_id_(OB_MAX_PARAM_ID),
pos_(0),
buffer_array_(NULL),
is_null_map_(),
@ -173,7 +175,7 @@ public:
entity_ = nullptr;
}
stmt_id_ = 0;
param_id_ = -1;
param_id_ = OB_MAX_PARAM_ID;
pos_ = 0;
err_ret_ = OB_SUCCESS;
}