fix core of GET_TSI
This commit is contained in:
@ -42,12 +42,9 @@ ObReqTimeInfo::~ObReqTimeInfo()
|
||||
void ObGlobalReqTimeService::check_req_timeinfo()
|
||||
{
|
||||
#if !defined(NDEBUG)
|
||||
observer::ObReqTimeInfo *req_timeinfo = GET_TSI_MULT(
|
||||
observer::ObReqTimeInfo,
|
||||
observer::ObReqTimeInfo::REQ_TIMEINFO_IDENTIFIER);
|
||||
OB_ASSERT(req_timeinfo != NULL);
|
||||
observer::ObReqTimeInfo &req_timeinfo = observer::ObReqTimeInfo::get_thread_local_instance();
|
||||
|
||||
OB_ASSERT(req_timeinfo->reentrant_cnt_ > 0);
|
||||
OB_ASSERT(req_timeinfo.reentrant_cnt_ > 0);
|
||||
#endif
|
||||
}
|
||||
} // end namespace server
|
||||
|
||||
@ -31,7 +31,11 @@ struct ObReqTimeInfo: public common::ObDLinkBase<ObReqTimeInfo>
|
||||
|
||||
ObReqTimeInfo();
|
||||
~ObReqTimeInfo();
|
||||
|
||||
static ObReqTimeInfo &get_thread_local_instance()
|
||||
{
|
||||
thread_local ObReqTimeInfo req_timeinfo;
|
||||
return req_timeinfo;
|
||||
}
|
||||
void update_start_time()
|
||||
{
|
||||
if (0 == reentrant_cnt_) {
|
||||
@ -135,18 +139,14 @@ struct ObReqTimeGuard
|
||||
{
|
||||
ObReqTimeGuard()
|
||||
{
|
||||
ObReqTimeInfo *req_timeinfo = GET_TSI_MULT(ObReqTimeInfo,
|
||||
ObReqTimeInfo::REQ_TIMEINFO_IDENTIFIER);
|
||||
OB_ASSERT(NULL != req_timeinfo);
|
||||
req_timeinfo->update_start_time();
|
||||
ObReqTimeInfo &req_timeinfo = observer::ObReqTimeInfo::get_thread_local_instance();
|
||||
req_timeinfo.update_start_time();
|
||||
}
|
||||
|
||||
~ObReqTimeGuard()
|
||||
{
|
||||
ObReqTimeInfo *req_timeinfo = GET_TSI_MULT(ObReqTimeInfo,
|
||||
ObReqTimeInfo::REQ_TIMEINFO_IDENTIFIER);
|
||||
OB_ASSERT(NULL != req_timeinfo);
|
||||
req_timeinfo->update_end_time();
|
||||
ObReqTimeInfo &req_timeinfo = observer::ObReqTimeInfo::get_thread_local_instance();
|
||||
req_timeinfo.update_end_time();
|
||||
}
|
||||
};
|
||||
} // end namespace observer
|
||||
|
||||
@ -1113,24 +1113,25 @@ inline const char *get_vectorized_row_str(ObEvalCtx &eval_ctx,
|
||||
int64_t index)
|
||||
{
|
||||
char *buffer = NULL;
|
||||
int64_t pos = 0;
|
||||
CStringBufMgr *mgr = GET_TSI(CStringBufMgr);
|
||||
mgr->inc_level();
|
||||
CStringBufMgr::BufNode *node = mgr->acquire();
|
||||
if (OB_ISNULL(node)) {
|
||||
int64_t str_len = 0;
|
||||
CStringBufMgr &mgr = CStringBufMgr::get_thread_local_instance();
|
||||
mgr.inc_level();
|
||||
buffer = mgr.acquire();
|
||||
if (OB_ISNULL(buffer)) {
|
||||
LIB_LOG_RET(ERROR, OB_ALLOCATE_MEMORY_FAILED, "buffer is NULL");
|
||||
} else {
|
||||
buffer = node->buf_;
|
||||
databuff_printf(buffer, CStringBufMgr::BUF_SIZE, pos, "vectorized_rows(%ld)=", index);
|
||||
pos += to_string(ROWEXPR2STR(eval_ctx, exprs), buffer + pos, CStringBufMgr::BUF_SIZE - pos - 1);
|
||||
if (pos >= 0 && pos < CStringBufMgr::BUF_SIZE) {
|
||||
buffer[pos] = '\0';
|
||||
int64_t pos = mgr.get_pos();
|
||||
const int64_t buf_len = CStringBufMgr::BUF_SIZE - pos;
|
||||
databuff_printf(buffer, buf_len, str_len, "vectorized_rows(%ld)=", index);
|
||||
str_len += to_string(ROWEXPR2STR(eval_ctx, exprs), buffer + str_len, buf_len - str_len - 1);
|
||||
if (str_len >= 0 && str_len < buf_len) {
|
||||
buffer[str_len] = '\0';
|
||||
} else {
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
}
|
||||
mgr->try_clear_list();
|
||||
mgr->dec_level();
|
||||
mgr.try_clear_list();
|
||||
mgr.dec_level();
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
@ -352,18 +352,14 @@ private:
|
||||
// Always called in the ObResultSet constructor
|
||||
void update_start_time() const
|
||||
{
|
||||
oceanbase::observer::ObReqTimeInfo *req_timeinfo = GET_TSI_MULT(observer::ObReqTimeInfo,
|
||||
observer::ObReqTimeInfo::REQ_TIMEINFO_IDENTIFIER);
|
||||
OB_ASSERT(NULL != req_timeinfo);
|
||||
req_timeinfo->update_start_time();
|
||||
oceanbase::observer::ObReqTimeInfo &req_timeinfo = observer::ObReqTimeInfo::get_thread_local_instance();
|
||||
req_timeinfo.update_start_time();
|
||||
}
|
||||
// Always called at the end of the ObResultSet destructor
|
||||
void update_end_time() const
|
||||
{
|
||||
oceanbase::observer::ObReqTimeInfo *req_timeinfo = GET_TSI_MULT(observer::ObReqTimeInfo,
|
||||
observer::ObReqTimeInfo::REQ_TIMEINFO_IDENTIFIER);
|
||||
OB_ASSERT(NULL != req_timeinfo);
|
||||
req_timeinfo->update_end_time();
|
||||
oceanbase::observer::ObReqTimeInfo &req_timeinfo = observer::ObReqTimeInfo::get_thread_local_instance();
|
||||
req_timeinfo.update_end_time();
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user