From b27c6c973099645a7fb13f32fdfb6f12c89a8130 Mon Sep 17 00:00:00 2001 From: HaHaJeff Date: Tue, 8 Nov 2022 09:40:28 +0000 Subject: [PATCH] fixed return OB_NOT_INIT after remove_ls in ObLogService --- src/logservice/ob_log_service.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/logservice/ob_log_service.cpp b/src/logservice/ob_log_service.cpp index db28cfcd2..cfb227167 100644 --- a/src/logservice/ob_log_service.cpp +++ b/src/logservice/ob_log_service.cpp @@ -325,8 +325,14 @@ int ObLogService::remove_ls(const ObLSID &id, CLOG_LOG(WARN, "failed to remove from replay_service", K(ret), K(id)); // NB: remove palf_handle lastly. } else { - log_handler.destroy(); - restore_handler.destroy(); + // NB: can not execute destroy, otherwise, each interface in log_handler or restore_handler + // may return OB_NOT_INIT. + // TODO by runlin: create_ls don't init ObLogHandler and ObLogRestoreHandler. + // + // In normal case(for gc), stop has been executed, this stop has no effect. + // In abnormal case(create ls failed, need remove ls directlly), there is no possibility for dead lock. + log_handler.stop(); + restore_handler.stop(); if (OB_FAIL(palf_env_->remove(id.id()))) { CLOG_LOG(WARN, "failed to remove from palf_env_", K(ret), K(id)); } else {