From f30d7b163acf92fc03f480815bee5ab4351b3e8c Mon Sep 17 00:00:00 2001 From: ND501 Date: Tue, 14 Nov 2023 08:40:40 +0000 Subject: [PATCH] bugfix: get_store cause deadlock --- .../blocksstable/ob_tmp_file_cache.cpp | 10 +++---- src/storage/blocksstable/ob_tmp_file_cache.h | 4 ++- .../blocksstable/ob_tmp_file_store.cpp | 26 +------------------ src/storage/blocksstable/ob_tmp_file_store.h | 2 -- 4 files changed, 9 insertions(+), 33 deletions(-) diff --git a/src/storage/blocksstable/ob_tmp_file_cache.cpp b/src/storage/blocksstable/ob_tmp_file_cache.cpp index c06f4bad9..4767177ba 100644 --- a/src/storage/blocksstable/ob_tmp_file_cache.cpp +++ b/src/storage/blocksstable/ob_tmp_file_cache.cpp @@ -796,9 +796,9 @@ void ObTmpTenantMemBlockManager::ObIOWaitInfoHandle::reset() } } -ObTmpTenantMemBlockManager::ObTmpTenantMemBlockManager() - : wait_info_queue_(), - wait_handles_map_(), +ObTmpTenantMemBlockManager::ObTmpTenantMemBlockManager(ObTmpTenantFileStore &tenant_store) + : tenant_store_(tenant_store), + wait_info_queue_(), t_mblk_map_(), dir_to_blk_map_(), blk_nums_threshold_(0), @@ -1512,8 +1512,8 @@ int ObTmpTenantMemBlockManager::exec_wait() const int64_t washing_count = ATOMIC_LOAD(&washing_count_); int64_t block_cache_num = -1; int64_t page_cache_num = -1; - OB_TMP_FILE_STORE.get_block_cache_num(tenant_id_, block_cache_num); - OB_TMP_FILE_STORE.get_page_cache_num(tenant_id_, page_cache_num); + block_cache_num = tenant_store_.get_block_cache_num(); + page_cache_num = tenant_store_.get_page_cache_num(); ObTaskController::get().allow_next_syslog(); STORAGE_LOG(INFO, "succeed to do one round of tmp block io", K(ret), K(loop_nums), K(wait_io_cnt), K(washing_count), K(block_cache_num), K(page_cache_num)); diff --git a/src/storage/blocksstable/ob_tmp_file_cache.h b/src/storage/blocksstable/ob_tmp_file_cache.h index e6ce8584a..2cd4ffa9c 100644 --- a/src/storage/blocksstable/ob_tmp_file_cache.h +++ b/src/storage/blocksstable/ob_tmp_file_cache.h @@ -30,6 +30,7 @@ class ObTmpFileIOHandle; class ObTmpMacroBlock; class ObTmpFileExtent; class ObMacroBlockHandle; +class ObTmpTenantFileStore; class ObTmpPageCacheKey final : public common::ObIKVCacheKey { @@ -321,7 +322,7 @@ public: IOWaitInfo *wait_info_; }; - ObTmpTenantMemBlockManager(); + explicit ObTmpTenantMemBlockManager(ObTmpTenantFileStore &tenant_store); ~ObTmpTenantMemBlockManager(); int init(const uint64_t tenant_id, common::ObConcurrentFIFOAllocator &allocator, @@ -424,6 +425,7 @@ private: const int64_t page_nums, ObTmpMacroBlock *&t_mblk); int get_block_and_set_washing(int64_t block_id, ObTmpMacroBlock *&m_blk); + ObTmpTenantFileStore &tenant_store_; ObSpLinkQueue wait_info_queue_; WaitHandleMap wait_handles_map_; TmpMacroBlockMap t_mblk_map_; // diff --git a/src/storage/blocksstable/ob_tmp_file_store.cpp b/src/storage/blocksstable/ob_tmp_file_store.cpp index 8def75a34..a78c846a5 100644 --- a/src/storage/blocksstable/ob_tmp_file_store.cpp +++ b/src/storage/blocksstable/ob_tmp_file_store.cpp @@ -902,7 +902,7 @@ ObTmpTenantFileStore::ObTmpTenantFileStore() allocator_(), io_allocator_(), tmp_block_manager_(), - tmp_mem_block_manager_() + tmp_mem_block_manager_(*this) { } @@ -1717,30 +1717,6 @@ int ObTmpFileStore::dec_page_cache_num(const uint64_t tenant_id, const int64_t n return ret; } -int ObTmpFileStore::get_page_cache_num(const uint64_t tenant_id, int64_t &num) -{ - int ret = OB_SUCCESS; - ObTmpTenantFileStoreHandle store_handle; - if (OB_FAIL(get_store(tenant_id, store_handle))) { - STORAGE_LOG(WARN, "fail to get tmp tenant file store", K(ret), K(tenant_id)); - } else { - num = store_handle.get_tenant_store()->get_page_cache_num(); - } - return ret; -} - -int ObTmpFileStore::get_block_cache_num(const uint64_t tenant_id, int64_t &num) -{ - int ret = OB_SUCCESS; - ObTmpTenantFileStoreHandle store_handle; - if (OB_FAIL(get_store(tenant_id, store_handle))) { - STORAGE_LOG(WARN, "fail to get tmp tenant file store", K(ret), K(tenant_id)); - } else { - num = store_handle.get_tenant_store()->get_block_cache_num(); - } - return ret; -} - int ObTmpFileStore::free(const uint64_t tenant_id, ObTmpFileExtent *extent) { int ret = OB_SUCCESS; diff --git a/src/storage/blocksstable/ob_tmp_file_store.h b/src/storage/blocksstable/ob_tmp_file_store.h index 7c2a97824..7420acb9b 100644 --- a/src/storage/blocksstable/ob_tmp_file_store.h +++ b/src/storage/blocksstable/ob_tmp_file_store.h @@ -355,8 +355,6 @@ public: int dec_page_cache_num(const uint64_t tenant_id, const int64_t num); int inc_block_cache_num(const uint64_t tenant_id, const int64_t num); int dec_block_cache_num(const uint64_t tenant_id, const int64_t num); - int get_page_cache_num(const uint64_t tenant_id, int64_t &num); - int get_block_cache_num(const uint64_t tenant_id, int64_t &num); private: ObTmpFileStore(); ~ObTmpFileStore();