split memory of array in detect callback from 500 tenant

This commit is contained in:
obdev
2023-06-08 03:43:19 +00:00
committed by ob-robot
parent 934ddce888
commit 72b3c1ff76
5 changed files with 22 additions and 18 deletions

View File

@ -60,8 +60,8 @@ int ObMockResource::free_cnt = 0;
class ObMockDetectCB : public ObIDetectCallback
{
public:
ObMockDetectCB(const ObArray<ObPeerTaskState> &peer_states, ObMockResource *resource)
: ObIDetectCallback(peer_states), resouce_(resource) {}
ObMockDetectCB(uint64_t tenant_id, const ObArray<ObPeerTaskState> &peer_states, ObMockResource *resource)
: ObIDetectCallback(tenant_id, peer_states), resouce_(resource) {}
int do_callback() override
{
int ret = OB_SUCCESS;

View File

@ -21,10 +21,11 @@ namespace common {
const int64_t DM_INTERRUPT_MSG_MAX_LENGTH = 128;
ObIDetectCallback::ObIDetectCallback(const ObArray<ObPeerTaskState> &peer_states)
ObIDetectCallback::ObIDetectCallback(uint64_t tenant_id, const ObArray<ObPeerTaskState> &peer_states)
: ref_count_(0)
{
int ret = OB_SUCCESS;
peer_states_.set_attr(ObMemAttr(tenant_id, "DmCbStArr"));
if (OB_FAIL(peer_states_.assign(peer_states))) {
alloc_succ_ = false;
ret = OB_ALLOCATE_MEMORY_FAILED;
@ -157,13 +158,16 @@ int ObDmInterruptQcCall::mock_sqc_finish_msg(sql::ObPxSqcMeta &sqc)
return ret;
}
ObQcDetectCB::ObQcDetectCB(const ObArray<ObPeerTaskState> &peer_states, const ObInterruptibleTaskID &tid, sql::ObDfo &dfo,
ObQcDetectCB::ObQcDetectCB(uint64_t tenant_id,
const ObArray<ObPeerTaskState> &peer_states,
const ObInterruptibleTaskID &tid, sql::ObDfo &dfo,
const ObArray<sql::dtl::ObDtlChannel *> &dtl_channels)
: ObIDetectCallback(peer_states), tid_(tid), dfo_(dfo)
: ObIDetectCallback(tenant_id, peer_states), tid_(tid), dfo_(dfo)
{
// if ObIDetectCallback constructed succ
if (alloc_succ_) {
int ret = OB_SUCCESS;
dtl_channels_.set_attr(ObMemAttr(tenant_id, "DmCbDtlArr"));
if (OB_FAIL(dtl_channels_.assign(dtl_channels))) {
alloc_succ_ = false;
ret = OB_ALLOCATE_MEMORY_FAILED;

View File

@ -70,7 +70,7 @@ class ObIDetectCallback
{
public:
// constructor for pass peer_states from derived class
explicit ObIDetectCallback(const ObArray<ObPeerTaskState> &peer_states);
explicit ObIDetectCallback(uint64_t tenant_id, const ObArray<ObPeerTaskState> &peer_states);
virtual void destroy()
{
peer_states_.reset();
@ -106,7 +106,7 @@ protected:
class ObQcDetectCB : public ObIDetectCallback
{
public:
ObQcDetectCB(const ObArray<ObPeerTaskState> &peer_states, const ObInterruptibleTaskID &tid, sql::ObDfo &dfo,
ObQcDetectCB(uint64_t tenant_id, const ObArray<ObPeerTaskState> &peer_states, const ObInterruptibleTaskID &tid, sql::ObDfo &dfo,
const ObArray<sql::dtl::ObDtlChannel *> &dtl_channels);
void destroy() override;
int do_callback() override;
@ -124,8 +124,8 @@ private:
class ObSqcDetectCB : public ObIDetectCallback
{
public:
ObSqcDetectCB(const ObArray<ObPeerTaskState> &peer_states, const ObInterruptibleTaskID &tid)
: ObIDetectCallback(peer_states), tid_(tid) {}
ObSqcDetectCB(uint64_t tenant_id, const ObArray<ObPeerTaskState> &peer_states, const ObInterruptibleTaskID &tid)
: ObIDetectCallback(tenant_id, peer_states), tid_(tid) {}
int do_callback() override;
int64_t get_detect_callback_type() const override { return (int64_t)DetectCallBackType::SQC_DETECT_CB; }
@ -136,8 +136,8 @@ private:
class ObSingleDfoDetectCB : public ObIDetectCallback
{
public:
ObSingleDfoDetectCB(const ObArray<ObPeerTaskState> &peer_states, const sql::dtl::ObDTLIntermResultKey &key)
: ObIDetectCallback(peer_states), key_(key) {}
ObSingleDfoDetectCB(uint64_t tenant_id, const ObArray<ObPeerTaskState> &peer_states, const sql::dtl::ObDTLIntermResultKey &key)
: ObIDetectCallback(tenant_id, peer_states), key_(key) {}
int do_callback() override;
int64_t get_detect_callback_type() const override { return (int64_t)DetectCallBackType::SINGLE_DFO_DETECT_CB; }
@ -148,8 +148,8 @@ private:
class ObTempTableDetectCB : public ObIDetectCallback
{
public:
ObTempTableDetectCB(const ObArray<ObPeerTaskState> &peer_states, const sql::dtl::ObDTLIntermResultKey &key)
: ObIDetectCallback(peer_states), key_(key) {}
ObTempTableDetectCB(uint64_t tenant_id, const ObArray<ObPeerTaskState> &peer_states, const sql::dtl::ObDTLIntermResultKey &key)
: ObIDetectCallback(tenant_id, peer_states), key_(key) {}
int do_callback() override;
int64_t get_detect_callback_type() const override { return (int64_t)DetectCallBackType::TEMP_TABLE_DETECT_CB; }
@ -160,8 +160,8 @@ private:
class ObP2PDataHubDetectCB : public ObIDetectCallback
{
public:
ObP2PDataHubDetectCB(const ObArray<ObPeerTaskState> &peer_states, const sql::ObP2PDhKey &key)
: ObIDetectCallback(peer_states), key_(key) {}
ObP2PDataHubDetectCB(uint64_t tenant_id, const ObArray<ObPeerTaskState> &peer_states, const sql::ObP2PDhKey &key)
: ObIDetectCallback(tenant_id, peer_states), key_(key) {}
int do_callback() override;
int64_t get_detect_callback_type() const override { return (int64_t)DetectCallBackType::P2P_DATAHUB_DETECT_CB; }

View File

@ -182,7 +182,7 @@ public:
ObIAllocator &allocator = get_mem_context()->get_malloc_allocator();
void *buf = allocator.alloc(sizeof(T));
if (OB_NOT_NULL(buf)) {
ptr = new(buf) T(args...);
ptr = new(buf) T(detectable_id.tenant_id_, args...);
if (!ptr->alloc_succ()) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LIB_LOG(WARN, "[DM] failed to new cb ", K(ptr));

View File

@ -96,8 +96,8 @@ int ObMockResource::free_cnt = 0;
class ObMockDetectCB : public ObIDetectCallback
{
public:
ObMockDetectCB(const ObArray<ObPeerTaskState> &peer_states, ObMockResource *resource)
: ObIDetectCallback(peer_states), resouce_(resource) {}
ObMockDetectCB(uint64_t tenant_id, const ObArray<ObPeerTaskState> &peer_states, ObMockResource *resource)
: ObIDetectCallback(tenant_id, peer_states), resouce_(resource) {}
int do_callback() override
{
int ret = OB_SUCCESS;