diff --git a/src/rootserver/backup/ob_backup_data_scheduler.cpp b/src/rootserver/backup/ob_backup_data_scheduler.cpp index de86e05536..01a76c6c4e 100644 --- a/src/rootserver/backup/ob_backup_data_scheduler.cpp +++ b/src/rootserver/backup/ob_backup_data_scheduler.cpp @@ -848,7 +848,6 @@ int ObBackupDataScheduler::handle_execute_over( } else { // first get task from __all_backup_log_stream_task ObBackupLSTaskAttr ls_attr; - ObSqlString extra_condition; ObMySQLTransaction trans; ObLSID ls_id(task->get_ls_id()); if (OB_FAIL(trans.start(sql_proxy_, gen_meta_tenant_id(task->get_tenant_id())))) { diff --git a/src/rootserver/backup/ob_backup_data_set_task_mgr.cpp b/src/rootserver/backup/ob_backup_data_set_task_mgr.cpp index 182d756173..a789e034e1 100644 --- a/src/rootserver/backup/ob_backup_data_set_task_mgr.cpp +++ b/src/rootserver/backup/ob_backup_data_set_task_mgr.cpp @@ -494,14 +494,6 @@ int ObBackupSetTaskMgr::backup_user_meta_() ROOTSERVICE_EVENT_ADD("backup_data", "before_backup_data"); share::SCN consistent_scn; bool need_change_meta_turn = false; - - // let consistent_scn be the biggest max_tablet_checkpoint_scn_ of all the ls. - consistent_scn.set_min(); - ARRAY_FOREACH(ls_task, i) { - const ObBackupLSTaskAttr &task = ls_task.at(i); - consistent_scn = MAX(consistent_scn, task.max_tablet_checkpoint_scn_); - } - if (OB_FAIL(check_need_change_meta_turn_(ls_task, need_change_meta_turn))) { LOG_WARN("failed to check need change meta turn", K(ret), K(ls_task)); } else if (need_change_meta_turn) { @@ -509,6 +501,8 @@ int ObBackupSetTaskMgr::backup_user_meta_() if (OB_FAIL(change_meta_turn_(sys_ls_task))) { LOG_WARN("failed to change meta turn", K(ret)); } + } else if (OB_FAIL(calc_consistent_scn_(ls_task, consistent_scn))) { + LOG_WARN("failed to calc consistent scn", K(ret), K(ls_task)); } else if (OB_FAIL(merge_ls_meta_infos_(ls_task))) { LOG_WARN("fail to merge ls meta infos", K(ret), K(ls_task)); } else if (OB_FAIL(merge_tablet_to_ls_info_(consistent_scn, ls_task))) { @@ -544,6 +538,21 @@ int ObBackupSetTaskMgr::backup_user_meta_() return ret; } +int ObBackupSetTaskMgr::calc_consistent_scn_(ObIArray &ls_tasks, share::SCN &consistent_scn) +{ + int ret = OB_SUCCESS; + consistent_scn.set_min(); + // let consistent_scn be the biggest max_tablet_checkpoint_scn_ of all the ls and the cur gts. + if (OB_FAIL(ObBackupDataScheduler::get_backup_scn(*sql_proxy_, job_attr_->tenant_id_, true, consistent_scn))) { + LOG_WARN("failed to get backup scn", K(ret), "tenant_id", job_attr_->tenant_id_); + } + ARRAY_FOREACH(ls_tasks, i) { + const ObBackupLSTaskAttr &task = ls_tasks.at(i); + consistent_scn = MAX(consistent_scn, task.max_tablet_checkpoint_scn_); + } + return ret; +} + int ObBackupSetTaskMgr::check_need_change_meta_turn_(ObIArray &ls_tasks, bool &need_change_turn) { // if deleting ls when backup user meta, the deleted ls may not has ls meta backup. diff --git a/src/rootserver/backup/ob_backup_data_set_task_mgr.h b/src/rootserver/backup/ob_backup_data_set_task_mgr.h index 7b153eaca7..25c0f1bc89 100644 --- a/src/rootserver/backup/ob_backup_data_set_task_mgr.h +++ b/src/rootserver/backup/ob_backup_data_set_task_mgr.h @@ -57,6 +57,7 @@ private: int backup_sys_meta_(); int do_backup_meta_(ObIArray &ls_task, int64_t &finish_cnt); int backup_user_meta_(); + int calc_consistent_scn_(ObIArray &ls_tasks, share::SCN &consistent_scn); int check_need_change_meta_turn_(ObIArray &ls_tasks, bool &need_change_turn); int change_meta_turn_(const share::ObBackupLSTaskAttr &sys_ls_task); int get_backup_user_meta_task_(ObIArray &ls_task); diff --git a/src/rootserver/backup/ob_backup_task_scheduler.cpp b/src/rootserver/backup/ob_backup_task_scheduler.cpp index 7492700bc7..d23d3f94ab 100644 --- a/src/rootserver/backup/ob_backup_task_scheduler.cpp +++ b/src/rootserver/backup/ob_backup_task_scheduler.cpp @@ -1264,7 +1264,7 @@ int ObBackupTaskScheduler::check_tenant_status_normal_(bool &is_normal) LOG_WARN("fail to get schema guard", K(ret), K(tenant_id_)); } else if (OB_FAIL(guard.get_tenant_info(tenant_id_, tenant_info))) { LOG_WARN("fail to get tenant info", K(ret), K(tenant_id_)); - } else if (tenant_info->is_normal()) { + } else if (OB_NOT_NULL(tenant_info) && tenant_info->is_normal()) { is_normal = true; } return ret;