From e5bfe02e4da40ed8bd7e08a8371c146a6d550354 Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 16 Mar 2023 03:41:09 +0000 Subject: [PATCH] [tablelock] Fix a bug that select __all_virutal_obj_lock will return error code if the LS is offline --- .../virtual_table/ob_all_virtual_obj_lock.cpp | 14 +++++++++++++- src/storage/tablelock/ob_lock_memtable_mgr.cpp | 5 +++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/observer/virtual_table/ob_all_virtual_obj_lock.cpp b/src/observer/virtual_table/ob_all_virtual_obj_lock.cpp index 20df2faea7..a3a4c3c004 100644 --- a/src/observer/virtual_table/ob_all_virtual_obj_lock.cpp +++ b/src/observer/virtual_table/ob_all_virtual_obj_lock.cpp @@ -129,7 +129,13 @@ int ObAllVirtualObjLock::get_next_obj_lock_or_iter_tx(ObLockID &lock_id) } else { obj_lock_iter_.reset(); if (OB_FAIL(ls_->get_lock_id_iter(obj_lock_iter_))) { - SERVER_LOG(WARN, "fail to get obj lock iter", K(ret)); + if (OB_ENTRY_NOT_EXIST == ret) { + SERVER_LOG(WARN, + "fail to get obj lock iter, try to get next ls", + K(ret), K(ls_->get_ls_id())); + ret = OB_SUCCESS; // continue + } + SERVER_LOG(WARN, "fail to get obj lock iter", K(ret), K(ls_->get_ls_id())); } } } else { @@ -161,6 +167,12 @@ int ObAllVirtualObjLock::get_next_lock_op(transaction::tablelock::ObTableLockOp } else { lock_op_iter_.reset(); if (OB_FAIL(ls_->get_lock_op_iter(lock_id, lock_op_iter_))) { + if (OB_ENTRY_NOT_EXIST == ret) { + SERVER_LOG(WARN, + "fail to get lock op iter, try to get next lock_id", + K(ret), K(lock_id)); + ret = OB_SUCCESS; // continue + } SERVER_LOG(WARN, "fail to get lock op iter", K(ret), K(lock_id)); } } diff --git a/src/storage/tablelock/ob_lock_memtable_mgr.cpp b/src/storage/tablelock/ob_lock_memtable_mgr.cpp index 0f17a0b046..9e324141f0 100644 --- a/src/storage/tablelock/ob_lock_memtable_mgr.cpp +++ b/src/storage/tablelock/ob_lock_memtable_mgr.cpp @@ -192,7 +192,7 @@ int ObLockMemtableMgr::release_head_memtable_(memtable::ObIMemtable *imemtable, int ret = OB_SUCCESS; int tmp_ret = OB_SUCCESS; - LOG_INFO("lock memtable mgr release head memtable", KP(imemtable)); + LOG_INFO("lock memtable mgr release head memtable", KP(imemtable), K(force)); ObLockMemtable *memtable = static_cast(imemtable); if (get_memtable_count_() > 0 && force) { // for force @@ -203,7 +203,8 @@ int ObLockMemtableMgr::release_head_memtable_(memtable::ObIMemtable *imemtable, LOG_WARN("unregister from common checkpoint failed", K(tmp_ret), K_(ls_id), K(memtable)); } release_head_memtable(); - FLOG_INFO("succeed to release head lock table memtable", K(ret), K_(ls_id), KP(imemtable)); + FLOG_INFO("succeed to release head lock table memtable", K(ret), + K_(ls_id), KP(imemtable), K(memtable_head_), K(memtable_tail_)); } } else if (!force) { // just for flush -- GitLab