From 81139d609e1dec60b3228637c2c95dbecf3c0969 Mon Sep 17 00:00:00 2001 From: obdev Date: Tue, 7 Feb 2023 18:03:59 +0800 Subject: [PATCH] fix free ObTenantSrs core --- src/observer/omt/ob_tenant_srs.cpp | 14 ++++++++++++++ src/observer/omt/ob_tenant_srs.h | 1 + src/observer/omt/ob_tenant_srs_mgr.cpp | 18 ++++++++---------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/observer/omt/ob_tenant_srs.cpp b/src/observer/omt/ob_tenant_srs.cpp index 8c4cc1037f..af3d09c457 100644 --- a/src/observer/omt/ob_tenant_srs.cpp +++ b/src/observer/omt/ob_tenant_srs.cpp @@ -309,6 +309,20 @@ void ObTenantSrs::TenantSrsUpdatePeriodicTask::runTimerTask() } } +int ObTenantSrs::cancle_update_task() +{ + int ret = OB_SUCCESS; + bool is_exist = true; + if (OB_FAIL(TG_TASK_EXIST(lib::TGDefIDs::SRS_MGR, srs_update_periodic_task_, is_exist))) { + LOG_WARN("failed to check tenant srs update task", K(ret), K(tenant_id_)); + } else if (is_exist) { + if (OB_FAIL(TG_CANCEL_R(lib::TGDefIDs::SRS_MGR, srs_update_periodic_task_))) { + LOG_WARN("failed to cancel tenant srs update task", K(ret), K(tenant_id_)); + } + } + return ret; +} + int ObSrsCacheSnapShot::get_srs_item(uint64_t srid, const ObSrsItem *&srs_item) { int ret = OB_SUCCESS; diff --git a/src/observer/omt/ob_tenant_srs.h b/src/observer/omt/ob_tenant_srs.h index cd125bd593..1bcf290bc8 100644 --- a/src/observer/omt/ob_tenant_srs.h +++ b/src/observer/omt/ob_tenant_srs.h @@ -150,6 +150,7 @@ public: void recycle_old_snapshots(); void recycle_last_snapshots(); uint32_t get_snapshots_size(); + int cancle_update_task(); private: typedef common::PageArena ObCGeoModuleArena; diff --git a/src/observer/omt/ob_tenant_srs_mgr.cpp b/src/observer/omt/ob_tenant_srs_mgr.cpp index 2c749624cc..10c473a3dd 100644 --- a/src/observer/omt/ob_tenant_srs_mgr.cpp +++ b/src/observer/omt/ob_tenant_srs_mgr.cpp @@ -168,14 +168,8 @@ int ObTenantSrsMgr::delete_nonexist_tenants_srs() ret = OB_ERR_NULL_VALUE; LOG_WARN("tenant srs in recycle list is null", K(ret)); } else { - bool is_exist = true; - ObTenantSrs::TenantSrsUpdatePeriodicTask &task = tenant_srs->get_update_srs_task(); - if (OB_FAIL(TG_TASK_EXIST(lib::TGDefIDs::SRS_MGR, task, is_exist))) { - LOG_WARN("failed to check tenant srs update task", K(ret), K(tenant_srs->tenant_id())); - } else if (is_exist) { - if (OB_FAIL(TG_CANCEL_R(lib::TGDefIDs::SRS_MGR, task))) { - LOG_WARN("failed to cancel tenant srs update task", K(ret), K(tenant_srs->tenant_id())); - } + if (OB_FAIL(tenant_srs->cancle_update_task())) { + LOG_WARN("failed to cancle tenant srs update task", K(ret), K(tenant_srs->tenant_id())); } else { tenant_srs->recycle_old_snapshots(); tenant_srs->recycle_last_snapshots(); @@ -277,8 +271,12 @@ int ObTenantSrsMgr::add_tenant_srs(const uint64_t tenant_id) LOG_WARN("failed to set new tenant srs", K(ret), K(tenant_id)); } if (OB_FAIL(ret)) { - new_tenant_srs->~ObTenantSrs(); - allocator_.free(new_tenant_srs); + if (OB_FAIL(new_tenant_srs->cancle_update_task())) { + LOG_WARN("failed to cancle update srs task", K(ret), K(tenant_id)); + } else { + new_tenant_srs->~ObTenantSrs(); + allocator_.free(new_tenant_srs); + } } } }