diff --git a/src/storage/backup/ob_backup_task.cpp b/src/storage/backup/ob_backup_task.cpp index 2e80571f00..801f637065 100644 --- a/src/storage/backup/ob_backup_task.cpp +++ b/src/storage/backup/ob_backup_task.cpp @@ -98,6 +98,8 @@ static int advance_checkpoint_by_flush(const uint64_t tenant_id, const share::Ob } } else if (OB_FAIL(ls->get_ls_meta_package(ls_meta_package))) { LOG_WARN("failed to get ls meta package", K(ret), K(tenant_id), K(ls_id)); + } else if (OB_FAIL(ls_meta_package.ls_meta_.check_valid_for_backup())) { + LOG_WARN("failed to check valid for backup", K(ret), K(ls_meta_package)); } else { const int64_t clog_checkpoint_ts = ls_meta_package.ls_meta_.get_clog_checkpoint_ts(); if (clog_checkpoint_ts >= start_scn) { @@ -2032,7 +2034,7 @@ int ObPrefetchBackupInfoTask::process() } else if (OB_SUCCESS != ls_backup_ctx_->get_result_code()) { LOG_INFO("backup already failed, do nothing"); } else if (OB_FAIL(inner_process_())) { - LOG_WARN("failed to process", K(ret)); + LOG_WARN("failed to process", K(ret), K_(param)); } else { LOG_INFO("prefetch backup info process", K_(backup_data_type)); } @@ -3799,6 +3801,8 @@ int ObLSBackupPrepareTask::may_need_advance_checkpoint_() LOG_WARN("log stream not exist", K(ret), K(ls_id)); } else if (OB_FAIL(ls->get_ls_meta_package(cur_ls_meta))) { LOG_WARN("failed to get ls meta package", K(ret), K(tenant_id), K(ls_id)); + } else if (OB_FAIL(cur_ls_meta.ls_meta_.check_valid_for_backup())) { + LOG_WARN("failed to check valid for backup", K(ret), K(cur_ls_meta)); } else if (backup_clog_checkpoint_ts <= cur_ls_meta.ls_meta_.get_clog_checkpoint_ts()) { LOG_INFO("no need advance checkpoint", K_(param)); } else if (OB_FAIL(advance_checkpoint_by_flush(tenant_id, ls_id, backup_clog_checkpoint_ts, ls))) { diff --git a/src/storage/backup/ob_backup_utils.cpp b/src/storage/backup/ob_backup_utils.cpp index 9f6f220e91..6ed8d219d9 100644 --- a/src/storage/backup/ob_backup_utils.cpp +++ b/src/storage/backup/ob_backup_utils.cpp @@ -1608,7 +1608,11 @@ int ObBackupTabletProvider::get_tablet_handle_(const uint64_t tenant_id, const s if (OB_INVALID_ID == tenant_id || !ls_id.is_valid() || !tablet_id.is_valid()) { ret = OB_INVALID_ARGUMENT; LOG_WARN("get invalid args", K(ret), K(tenant_id), K(ls_id), K(tablet_id)); + } else if (OB_ISNULL(ls_backup_ctx_)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("ls backup ctx should not be null", K(ret)); } else { + const int64_t rebuild_seq = ls_backup_ctx_->rebuild_seq_; MTL_SWITCH(tenant_id) { ObLS *ls = NULL; ObLSHandle ls_handle; @@ -1622,8 +1626,12 @@ int ObBackupTabletProvider::get_tablet_handle_(const uint64_t tenant_id, const s } else if (OB_ISNULL(ls = ls_handle.get_ls())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("LS is null", K(ret)); + } else if (OB_FAIL(ObBackupUtils::check_ls_valid_for_backup(tenant_id, ls_id, rebuild_seq))) { + LOG_WARN("failed to check ls valid for backup", K(ret), K(tenant_id), K(ls_id), K(rebuild_seq)); } else if (OB_FAIL(ls->get_tablet(tablet_id, tablet_handle, timeout_us))) { LOG_WARN("failed to get tablet handle", K(ret), K(tenant_id), K(ls_id), K(tablet_id)); + } else if (OB_FAIL(ObBackupUtils::check_ls_valid_for_backup(tenant_id, ls_id, rebuild_seq))) { + LOG_WARN("failed to check ls valid for backup", K(ret), K(tenant_id), K(ls_id), K(rebuild_seq)); } } } diff --git a/src/storage/ls/ob_ls_meta.cpp b/src/storage/ls/ob_ls_meta.cpp index 3ea914776c..80c77f0320 100644 --- a/src/storage/ls/ob_ls_meta.cpp +++ b/src/storage/ls/ob_ls_meta.cpp @@ -480,7 +480,7 @@ int ObLSMeta::set_ls_rebuild() return ret; } -int ObLSMeta::check_valid_for_backup() +int ObLSMeta::check_valid_for_backup() const { int ret = OB_SUCCESS; ObSpinLockTimeGuard guard(lock_); diff --git a/src/storage/ls/ob_ls_meta.h b/src/storage/ls/ob_ls_meta.h index 8251f2dd4b..5df382cab0 100644 --- a/src/storage/ls/ob_ls_meta.h +++ b/src/storage/ls/ob_ls_meta.h @@ -74,7 +74,7 @@ public: const ObLSMeta &src_ls_meta); //for ha rebuild update ls meta int set_ls_rebuild(); - int check_valid_for_backup(); + int check_valid_for_backup() const; int64_t get_tablet_change_checkpoint_ts() const; int set_tablet_change_checkpoint_ts(int64_t tablet_change_checkpoint_ts); int update_id_meta(const int64_t service_type,