diff --git a/src/rootserver/ob_recovery_ls_service.cpp b/src/rootserver/ob_recovery_ls_service.cpp index bb149ebba2..64b44d90dc 100755 --- a/src/rootserver/ob_recovery_ls_service.cpp +++ b/src/rootserver/ob_recovery_ls_service.cpp @@ -147,18 +147,12 @@ void ObRecoveryLSService::do_work() LOG_WARN("not init", K(ret), K(inited_), KP(proxy_)); } else { ObLSRecoveryStatOperator ls_recovery; - palf::PalfBufferIterator iterator; - palf::PalfHandleGuard palf_handle_guard; + palf::PalfBufferIterator iterator;//can not use without palf_guard int tmp_ret = OB_SUCCESS; int64_t idle_time_us = 100 * 1000L; SCN start_scn; last_report_ts_ = OB_INVALID_TIMESTAMP; uint64_t thread_idx = get_thread_idx(); - if (0 != thread_idx) { - if (OB_FAIL(init_palf_handle_guard_(palf_handle_guard))) { - LOG_WARN("failed to init palf handle guard", KR(ret)); - } - } while (!has_set_stop() && OB_SUCC(ret)) { ObCurTraceId::init(GCONF.self_addr_); ObTenantInfoLoader *tenant_info_loader = MTL(ObTenantInfoLoader*); @@ -200,7 +194,10 @@ void ObRecoveryLSService::do_work() } } else { DEBUG_SYNC(STOP_RECOVERY_LS_THREAD1); - if (!start_scn.is_valid()) { + palf::PalfHandleGuard palf_handle_guard; + if (OB_FAIL(init_palf_handle_guard_(palf_handle_guard))) { + LOG_WARN("failed to init palf handle guard", KR(ret)); + } else if (!start_scn.is_valid()) { ObLSRecoveryStat ls_recovery_stat; if (OB_FAIL(ls_recovery.get_ls_recovery_stat(tenant_id_, SYS_LS, false, ls_recovery_stat, *proxy_))) { diff --git a/src/rootserver/ob_tenant_thread_helper.cpp b/src/rootserver/ob_tenant_thread_helper.cpp index 26dcfab1a8..60d9b11546 100755 --- a/src/rootserver/ob_tenant_thread_helper.cpp +++ b/src/rootserver/ob_tenant_thread_helper.cpp @@ -85,13 +85,18 @@ int ObTenantThreadHelper::start() return ret; } +ERRSIM_POINT_DEF(ERRSIM_SKIP_TENANT_THREAD_STOP); void ObTenantThreadHelper::stop() { + int ret = OB_SUCCESS; LOG_INFO("[TENANT THREAD] thread stop start", K(tg_id_), K(thread_name_)); - if (-1 != tg_id_) { + ret = ERRSIM_SKIP_TENANT_THREAD_STOP; + if (OB_UNLIKELY(ERRSIM_SKIP_TENANT_THREAD_STOP)) { + LOG_ERROR("[TENANT THREAD] skip tenant thread stop"); + } else if (-1 != tg_id_) { TG_REENTRANT_LOGICAL_STOP(tg_id_); } - LOG_INFO("[TENANT THREAD] thread stop finish", K(tg_id_), K(thread_name_)); + LOG_INFO("[TENANT THREAD] thread stop finish", K(tg_id_), K(thread_name_), KR(ret)); } void ObTenantThreadHelper::wait()