From c399d8117990e3df06046dc51f917d48bef1f6e5 Mon Sep 17 00:00:00 2001 From: Tyshawn Date: Tue, 29 Aug 2023 07:48:02 +0000 Subject: [PATCH] [BUG.FIX] reduce macro id set memory footprints by using without no lock mode. --- src/storage/blocksstable/ob_block_manager.cpp | 25 ++++++++++--------- src/storage/blocksstable/ob_block_manager.h | 24 +++++++++--------- .../blocksstable/test_block_manager.cpp | 2 +- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/storage/blocksstable/ob_block_manager.cpp b/src/storage/blocksstable/ob_block_manager.cpp index 32068fa0fa..e6933e54db 100644 --- a/src/storage/blocksstable/ob_block_manager.cpp +++ b/src/storage/blocksstable/ob_block_manager.cpp @@ -927,7 +927,7 @@ int ObBlockManager::do_sweep(MacroBlkIdMap &mark_info) void ObBlockManager::mark_and_sweep() { int ret = OB_SUCCESS; - ObHashSet macro_id_set; + ObHashSet macro_id_set; MacroBlkIdMap mark_info; ObMacroBlockMarkerStatus tmp_status; bool skip_mark = false; @@ -946,7 +946,8 @@ void ObBlockManager::mark_and_sweep() } else { if (OB_FAIL(mark_info.init(ObModIds::OB_STORAGE_FILE_BLOCK_REF, OB_SERVER_TENANT_ID))) { LOG_WARN("fail to init mark info, ", K(ret)); - } else if (OB_FAIL(macro_id_set.create(MAX(2, block_map_.count())))) { + } else if (OB_FAIL(macro_id_set.create(MAX(2, block_map_.count()), "BlkIdSetBkt", "BlkIdSetNode", + OB_SERVER_TENANT_ID))) { LOG_WARN("fail to create macro id set", K(ret)); } else { GetPendingFreeBlockFunctor pending_free_functor(mark_info, tmp_status.hold_count_); @@ -999,7 +1000,7 @@ void ObBlockManager::mark_and_sweep() int ObBlockManager::mark_macro_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status) { int ret = OB_SUCCESS; @@ -1038,7 +1039,7 @@ int ObBlockManager::mark_macro_blocks( int ObBlockManager::mark_held_shared_block( const MacroBlockId ¯o_id, MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status) { int ret = OB_SUCCESS; @@ -1062,7 +1063,7 @@ int ObBlockManager::mark_held_shared_block( int ObBlockManager::mark_tenant_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status) { int ret = OB_SUCCESS; @@ -1106,7 +1107,7 @@ int ObBlockManager::mark_tenant_blocks( int ObBlockManager::mark_sstable_blocks( MacroBlkIdMap &mark_info, ObTabletHandle &handle, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status) { int ret = OB_SUCCESS; @@ -1227,7 +1228,7 @@ int ObBlockManager::mark_sstable_blocks( int ObBlockManager::mark_tablet_meta_blocks( MacroBlkIdMap &mark_info, storage::ObTabletHandle &handle, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status) { int ret = OB_SUCCESS; @@ -1258,7 +1259,7 @@ int ObBlockManager::mark_tablet_meta_blocks( int ObBlockManager::mark_sstable_meta_block( const blocksstable::ObSSTable &sstable, MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status) { int ret = OB_SUCCESS; @@ -1286,7 +1287,7 @@ int ObBlockManager::mark_sstable_meta_block( int ObBlockManager::mark_tenant_ckpt_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObTenantCheckpointSlogHandler &hdl, ObMacroBlockMarkerStatus &tmp_status) { @@ -1308,7 +1309,7 @@ int ObBlockManager::mark_tenant_ckpt_blocks( int ObBlockManager::mark_tmp_file_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status) { int ret = OB_SUCCESS; @@ -1329,7 +1330,7 @@ int ObBlockManager::mark_tmp_file_blocks( int ObBlockManager::mark_server_meta_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status) { int ret = OB_SUCCESS; @@ -1356,7 +1357,7 @@ bool ObBlockManager::continue_mark() int ObBlockManager::update_mark_info( const ObIArray ¯o_block_list, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, MacroBlkIdMap &mark_info) { int ret = OB_SUCCESS; diff --git a/src/storage/blocksstable/ob_block_manager.h b/src/storage/blocksstable/ob_block_manager.h index fbe4c49364..2cc5d454f5 100644 --- a/src/storage/blocksstable/ob_block_manager.h +++ b/src/storage/blocksstable/ob_block_manager.h @@ -274,7 +274,7 @@ private: { public: GetOldestHoldBlockFunctor( - common::hash::ObHashSet &id_set, + common::hash::ObHashSet &id_set, ObSimpleMacroBlockInfo &info) : ret_code_(common::OB_SUCCESS), macro_id_set_(id_set), @@ -285,7 +285,7 @@ private: int get_ret_code() const { return ret_code_; } private: int ret_code_; - common::hash::ObHashSet ¯o_id_set_; + common::hash::ObHashSet ¯o_id_set_; ObSimpleMacroBlockInfo &oldest_hold_block_info_; }; @@ -332,51 +332,51 @@ private: bool is_bad_block(const MacroBlockId ¯o_block_id); int mark_macro_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status); int mark_held_shared_block( const MacroBlockId ¯o_id, MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status); int mark_tenant_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status); int mark_sstable_blocks( MacroBlkIdMap &mark_info, storage::ObTabletHandle &handle, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status); int mark_sstable_meta_block( const blocksstable::ObSSTable &sstable, MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status); int mark_tablet_meta_blocks( MacroBlkIdMap &mark_info, storage::ObTabletHandle &handle, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status); int mark_tenant_ckpt_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, storage::ObTenantCheckpointSlogHandler &hdl, ObMacroBlockMarkerStatus &tmp_status); int mark_tmp_file_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status); int mark_server_meta_blocks( MacroBlkIdMap &mark_info, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, ObMacroBlockMarkerStatus &tmp_status); bool continue_mark(); int do_sweep(MacroBlkIdMap &mark_info); int update_mark_info( const common::ObIArray ¯o_block_list, - common::hash::ObHashSet ¯o_id_set, + common::hash::ObHashSet ¯o_id_set, MacroBlkIdMap &mark_info); int update_mark_info( const MacroBlockId ¯o_id, diff --git a/unittest/storage/blocksstable/test_block_manager.cpp b/unittest/storage/blocksstable/test_block_manager.cpp index f5e7f6c14c..11d5084c83 100644 --- a/unittest/storage/blocksstable/test_block_manager.cpp +++ b/unittest/storage/blocksstable/test_block_manager.cpp @@ -165,7 +165,7 @@ TEST_F(TestBlockManager, test_mark_and_sweep) ret = mark_info.init(ObModIds::OB_STORAGE_FILE_BLOCK_REF, OB_SERVER_TENANT_ID); ASSERT_EQ(OB_SUCCESS, ret); - common::hash::ObHashSet macro_id_set; + common::hash::ObHashSet macro_id_set; ret = macro_id_set.create(MAX(2, OB_SERVER_BLOCK_MGR.block_map_.count())); ASSERT_EQ(OB_SUCCESS, ret); int64_t safe_ts = ObTimeUtility::current_time();