From e472494db5b1f7fd53b78a360bf30d4c98c4f4ea Mon Sep 17 00:00:00 2001 From: godyangfight Date: Thu, 5 Dec 2024 07:18:45 +0000 Subject: [PATCH] Fix ls in rebuild status report readable scn bug. --- src/objit/src/ob_llvm_di_helper.cpp | 18 +++++------ src/observer/ob_service.cpp | 46 +++++++++++++++++++++++------ 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/objit/src/ob_llvm_di_helper.cpp b/src/objit/src/ob_llvm_di_helper.cpp index 0f00cf3e3..eb819b951 100644 --- a/src/objit/src/ob_llvm_di_helper.cpp +++ b/src/objit/src/ob_llvm_di_helper.cpp @@ -31,9 +31,9 @@ using namespace common; namespace jit { -uint64_t ObLLVMDIType::get_size_bits() -{ - return OB_ISNULL(v_) ? 0 : v_->getSizeInBits(); +uint64_t ObLLVMDIType::get_size_bits() +{ + return OB_ISNULL(v_) ? 0 : v_->getSizeInBits(); } uint64_t ObLLVMDIType::get_align_bits() @@ -164,9 +164,9 @@ int ObLLVMDIHelper::create_local_variable(const ObString &name, uint32_t arg_no, arg_no, file, line, type.get_v(), true) : jc_->dbuilder_.createAutoVariable(sp, StringRef(name.ptr(), name.length()), file, line, type.get_v(), true); - if (OB_ISNULL(var_ptr)) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("failed to create local variable", K(name), K(ret)); + if (OB_ISNULL(var_ptr)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to create local variable", K(name), K(ret)); } else { variable.set_v(var_ptr); } @@ -218,9 +218,9 @@ int ObLLVMDIHelper::finalize() int ObLLVMDIHelper::create_pointer_type(ObLLVMDIType &pointee_type, ObLLVMDIType &pointer_type) { - int ret = OB_SUCCESS; - DIType *pte_type = pointee_type.get_v(); - DIType *ptr_type = NULL; + int ret = OB_SUCCESS; + DIType *pte_type = pointee_type.get_v(); + DIType *ptr_type = NULL; if (OB_ISNULL(jc_)) { ret = OB_NOT_INIT; LOG_WARN("jc is NULL", K(ret)); diff --git a/src/observer/ob_service.cpp b/src/observer/ob_service.cpp index 2fff9d9ac..e461965c4 100644 --- a/src/observer/ob_service.cpp +++ b/src/observer/ob_service.cpp @@ -3719,6 +3719,7 @@ int ObService::get_ls_replayed_scn( ObLSHandle ls_handle; ObLS *ls = nullptr; share::SCN offline_scn; + ObMigrationStatus migration_status = ObMigrationStatus::OB_MIGRATION_STATUS_MAX; if (OB_ISNULL(ls_svr)) { ret = OB_INVALID_ARGUMENT; LOG_WARN("pointer is null", KR(ret), KP(ls_svr)); @@ -3727,17 +3728,44 @@ int ObService::get_ls_replayed_scn( } else if (OB_ISNULL(ls = ls_handle.get_ls())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("log stream is null", KR(ret), K(arg), K(ls_handle)); - } else if (OB_FAIL(ls->get_max_decided_scn(cur_readable_scn))) { - LOG_WARN("failed to get_max_decided_scn", KR(ret), K(arg), KPC(ls)); - } else if (arg.is_all_replica()) { - if (OB_ISNULL(ls->get_ls_recovery_stat_handler())) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("failed to get ls recovery stat", KR(ret), K(arg)); - } else if (OB_FAIL(ls->get_ls_recovery_stat_handler() - ->get_all_replica_min_readable_scn(cur_readable_scn))) { - LOG_WARN("failed to get all replica min readable_scn", KR(ret), K(arg)); + } else if (OB_FAIL(ls->get_migration_status(migration_status))) { + LOG_WARN("failed to get migration status", K(ret), KPC(ls)); + } else if (ObMigrationStatus::OB_MIGRATION_STATUS_NONE != migration_status) { + cur_readable_scn = SCN::base_scn(); + LOG_INFO("ls migration status is not none, report base scn as readable scn", K(migration_status), "ls_id", ls->get_ls_id()); + if (arg.is_all_replica()) { + ret = OB_EAGAIN; + LOG_WARN("leader get all replica min readable scn, but leader migration status is not none, need retry", + K(ret), K(arg), K(migration_status), "ls_id", ls->get_ls_id()); + } + } else { + if (OB_FAIL(ls->get_max_decided_scn(cur_readable_scn))) { + LOG_WARN("failed to get_max_decided_scn", KR(ret), K(arg), KPC(ls)); + } else if (arg.is_all_replica()) { + if (OB_ISNULL(ls->get_ls_recovery_stat_handler())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get ls recovery stat", KR(ret), K(arg)); + } else if (OB_FAIL(ls->get_ls_recovery_stat_handler() + ->get_all_replica_min_readable_scn(cur_readable_scn))) { + LOG_WARN("failed to get all replica min readable_scn", KR(ret), K(arg)); + } + } + + if (FAILEDx(ls->get_migration_status(migration_status))) { + LOG_WARN("failed to get migration status", K(ret), KPC(ls)); + } else if (ObMigrationStatus::OB_MIGRATION_STATUS_NONE != migration_status) { + const SCN original_readable_scn = cur_readable_scn; + cur_readable_scn = SCN::base_scn(); + LOG_INFO("ls migration status is not none, report base scn as readable scn", K(migration_status), + "ls_id", ls->get_ls_id(), K(original_readable_scn)); + if (arg.is_all_replica()) { + ret = OB_EAGAIN; + LOG_WARN("leader get all replica min readable scn, but leader migration status is not none, need retry", + K(ret), K(arg), K(migration_status), "ls_id", ls->get_ls_id()); + } } } + if (OB_SUCC(ret) && ERRSIM_GET_LS_READABLE_SCN_OLD) { const int64_t current_time = ObTimeUtility::current_time() - GCONF.internal_sql_execute_timeout;