Fix ls in rebuild status report readable scn bug.

This commit is contained in:
godyangfight 2024-12-05 07:18:45 +00:00 committed by ob-robot
parent c508a8efa2
commit e472494db5
2 changed files with 46 additions and 18 deletions

View File

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

View File

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