bugfix: get_store cause deadlock

This commit is contained in:
ND501 2023-11-14 08:40:40 +00:00 committed by ob-robot
parent 998e8d1a1a
commit f30d7b163a
4 changed files with 9 additions and 33 deletions

View File

@ -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));

View File

@ -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_; // <block id, tmp macro block>

View File

@ -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;

View File

@ -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();