[4.x] Fix memory leak problem for disaster recovery

This commit is contained in:
obdev 2023-04-15 14:45:05 +00:00 committed by ob-robot
parent 1b85aee04b
commit 616a19901b
3 changed files with 9 additions and 4 deletions

View File

@ -114,11 +114,11 @@ int ObDRTaskQueue::init(
|| (ObDRTaskPriority::LOW_PRI != priority && ObDRTaskPriority::HIGH_PRI != priority)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", KR(ret), K(bucket_num), KP(rpc_proxy), KP(server_mgr), K(priority));
} else if (OB_FAIL(task_map_.create(bucket_num, "DRTaskQ"))) {
} else if (OB_FAIL(task_map_.create(bucket_num, "DRTaskMap"))) {
LOG_WARN("fail to create task map", KR(ret), K(bucket_num));
} else if (OB_FAIL(task_alloc_.init(
ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE,
ObMemAttr(common::OB_SERVER_TENANT_ID, "DRTaskQ")))) {
ObMemAttr(common::OB_SERVER_TENANT_ID, "DRTaskAlloc")))) {
LOG_WARN("fail to init task allocator", KR(ret));
} else {
config_ = &config;
@ -680,6 +680,9 @@ void ObDRTaskMgr::stop()
{
loaded_ = false;
stopped_ = true;
for (int64_t i = 0; i < static_cast<int64_t>(ObDRTaskPriority::MAX_PRI); ++i) {
queues_[i].reuse();
}
ObRsReentrantThread::stop();
disaster_recovery_task_table_updater_.stop();
ObThreadCondGuard guard(cond_);
@ -690,7 +693,7 @@ void ObDRTaskMgr::stop()
void ObDRTaskMgr::wait()
{
ObRsReentrantThread::wait();
disaster_recovery_task_table_updater_.wait();
disaster_recovery_task_table_updater_.wait();
}
int ObDRTaskMgr::check_inner_stat_() const
@ -1063,7 +1066,7 @@ int ObDRTaskMgr::load_task_to_schedule_list_()
} else {
// clear schedule_list and wait_list in two queues
for (int64_t i = 0; i < static_cast<int64_t>(ObDRTaskPriority::MAX_PRI); ++i) {
queues_[i].reset();
queues_[i].reuse();
}
clear_reach_concurrency_limit();
for (int64_t i = 0; OB_SUCC(ret) && i < tenant_id_array.count(); ++i) {

View File

@ -455,6 +455,7 @@ class ObString;
ACT(BEFORE_ARCHIVE_ADD_LS_TASK,)\
ACT(AFTER_UPDATE_INDEX_STATUS,)\
ACT(BEFORE_MIGRATION_DISABLE_VOTE,)\
ACT(MEMBERLIST_CHANGE_MEMBER,)\
ACT(MAX_DEBUG_SYNC_POINT,)
DECLARE_ENUM(ObDebugSyncPoint, debug_sync_point, OB_DEBUG_SYNC_POINT_DEF);

View File

@ -1116,6 +1116,7 @@ int ObStartCompleteMigrationTask::change_member_list_()
{
int ret = OB_SUCCESS;
ObLS *ls = nullptr;
DEBUG_SYNC(MEMBERLIST_CHANGE_MEMBER);
const int64_t start_ts = ObTimeUtility::current_time();
if (!is_inited_) {