@@ -109,6 +109,21 @@ butil::Status Backup::Init() {
109109 std::cout << " safe point ts check ok" << std::endl;
110110 DINGO_LOG (INFO) << " safe point ts check ok" ;
111111
112+ // Get the job list to see whether there is a merge split being executed, etc.
113+ if (FLAGS_br_backup_enable_get_job_list_check) {
114+ status = GetJobListCheck ();
115+ if (!status.ok ()) {
116+ DINGO_LOG (ERROR) << Utils::FormatStatusError (status);
117+ return status;
118+ }
119+ std::cout << " br_backup_enable_get_job_list_check is true, get job list check ok" << std::endl;
120+ DINGO_LOG (INFO) << " br_backup_enable_get_job_list_check is true, get job list check ok" ;
121+
122+ } else {
123+ std::cout << " br_backup_enable_get_job_list_check is false, skip get job list check" << std::endl;
124+ DINGO_LOG (INFO) << " br_backup_enable_get_job_list_check is false, skip get job list check" ;
125+ }
126+
112127 backup_task_id_ = dingodb::UUIDGenerator::GenerateUUID ();
113128
114129 auto lambda_exit_function = [this , &status]() {
@@ -1270,4 +1285,53 @@ butil::Status Backup::DoFinish() {
12701285 return butil::Status::OK ();
12711286}
12721287
1288+ butil::Status Backup::GetJobListCheck () {
1289+ dingodb::pb::coordinator::GetJobListRequest request;
1290+ dingodb::pb::coordinator::GetJobListResponse response;
1291+
1292+ request.mutable_request_info ()->set_request_id (br::Helper::GetRandInt ());
1293+
1294+ DINGO_LOG_IF (INFO, FLAGS_br_log_switch_backup_detail_detail) << request.DebugString ();
1295+
1296+ butil::Status status = br::InteractionManager::GetInstance ().GetCoordinatorInteraction ()->SendRequest (
1297+ " CoordinatorService" , " GetJobList" , request, response);
1298+ if (!status.ok ()) {
1299+ std::string s = fmt::format (" Fail to get job list, status={}" , Utils::FormatStatusError (status));
1300+ DINGO_LOG (ERROR) << s;
1301+ return status;
1302+ }
1303+
1304+ if (response.error ().errcode () != dingodb::pb::error::OK) {
1305+ std::string s = fmt::format (" Fail to get job list, error={}" , Utils::FormatResponseError (response));
1306+ DINGO_LOG (ERROR) << s;
1307+ return butil::Status (dingodb::pb::error::EINTERNAL, s);
1308+ }
1309+
1310+ DINGO_LOG_IF (INFO, FLAGS_br_log_switch_backup_detail_detail) << response.DebugString ();
1311+
1312+ for (const auto & job : response.job_list ()) {
1313+ for (const auto & task : job.tasks ()) {
1314+ for (const auto & store_operation : task.store_operations ()) {
1315+ for (const auto & region_cmd : store_operation.region_cmds ()) {
1316+ if (region_cmd.region_cmd_type () == dingodb::pb::coordinator::RegionCmdType::CMD_SPLIT ||
1317+ region_cmd.region_cmd_type () == dingodb::pb::coordinator::RegionCmdType::CMD_MERGE ||
1318+ region_cmd.region_cmd_type () == dingodb::pb::coordinator::RegionCmdType::CMD_CHANGE_PEER ||
1319+ region_cmd.region_cmd_type () == dingodb::pb::coordinator::RegionCmdType::CMD_TRANSFER_LEADER) {
1320+ std::string s = fmt::format (" exist job list, region_cmd_type={}({})" ,
1321+ dingodb::pb::coordinator::RegionCmdType_Name (region_cmd.region_cmd_type ()),
1322+ static_cast <int >(region_cmd.region_cmd_type ()));
1323+ DINGO_LOG (ERROR) << s;
1324+ status = butil::Status (dingodb::pb::error::EBACKUP_DINGO_STORE_JOB_LIST_EXIST, s);
1325+ goto _err;
1326+ }
1327+ }
1328+ }
1329+ }
1330+ }
1331+
1332+ _err:
1333+
1334+ return status;
1335+ }
1336+
12731337} // namespace br
0 commit comments