diff --git a/src/storage/meta_mem/ob_tenant_meta_mem_mgr.cpp b/src/storage/meta_mem/ob_tenant_meta_mem_mgr.cpp index c4bf17f20b..e63c5e465c 100644 --- a/src/storage/meta_mem/ob_tenant_meta_mem_mgr.cpp +++ b/src/storage/meta_mem/ob_tenant_meta_mem_mgr.cpp @@ -723,6 +723,8 @@ int ObTenantMetaMemMgr::gc_tablet(ObTablet *tablet) LOG_WARN("unexpected null tablet pointer", K(ret), K(key), K(ptr_handle)); } else if (OB_FAIL(tablet_ptr->remove_tablet_from_old_version_chain(tablet))) { LOG_WARN("fail to remove tablet from old version chain", K(ret), K(key), KPC(tablet)); + } else { + tablet->reset_memtable(); } } if (OB_SUCC(ret) && OB_FAIL(push_tablet_into_gc_queue(tablet))) { diff --git a/src/storage/tablet/ob_tablet.h b/src/storage/tablet/ob_tablet.h index e7a41d4690..6356fa7556 100644 --- a/src/storage/tablet/ob_tablet.h +++ b/src/storage/tablet/ob_tablet.h @@ -388,6 +388,7 @@ public: // 2. If a tablet may be being accessed, shouldn't call this function. int rebuild_memtables(const share::SCN scn); + void reset_memtable(); // ATTENTION!!! The following two interfaces only release memtable from memtable manager. int release_memtables(const share::SCN scn); // force release all memtables @@ -809,7 +810,6 @@ private: bool exist_memtable_with_end_scn(const ObITable *table, const share::SCN &end_scn); int assign_memtables(memtable::ObIMemtable * const *memtables, const int64_t memtable_count); int assign_ddl_kvs(ObDDLKV * const *ddl_kvs, const int64_t ddl_kv_count); - void reset_memtable(); int pull_ddl_memtables(ObArenaAllocator &allocator, ObDDLKV **&ddl_kvs_addr, int64_t &ddl_kv_count); void reset_ddl_memtables(); int wait_release_memtables_();