| 276 | } |
| 277 | |
| 278 | int CheckPointManager::LoadFromCheckPointFileList(const string &datadir, EventData *header, MasterInfo *masterinfo, |
| 279 | EventDataInfo *headerdatainfo) { |
| 280 | EventFileManager eventfilemanager(option_, datadir); |
| 281 | int ret = eventfilemanager.OpenOldestFile(); |
| 282 | if (ret) { |
| 283 | return ret; |
| 284 | } |
| 285 | EventData curheader, curfooter; |
| 286 | string curfilename; |
| 287 | while (1) { |
| 288 | EventData eventdata; |
| 289 | EventDataInfo eventdatainfo; |
| 290 | ret = eventfilemanager.ReadData(&eventdata, &eventdatainfo); |
| 291 | if (ret == OK) { |
| 292 | if (eventdata.gtid().empty()) { |
| 293 | if (eventdatainfo.file_name() != curfilename) { |
| 294 | curheader = eventdata; |
| 295 | //header |
| 296 | LogVerbose("%s get header", __func__); |
| 297 | if (curfooter.event_data_file().empty()) { |
| 298 | //first file |
| 299 | event_storage_->SwitchNewFile(curheader, false, NULL); |
| 300 | LogVerbose("%s switch first file %s to %s,", __func__, curheader.event_data_file().c_str(), |
| 301 | eventdatainfo.file_name().c_str()); |
| 302 | } |
| 303 | } else { |
| 304 | LogVerbose("%s get footer", __func__); |
| 305 | curfooter = eventdata; |
| 306 | event_storage_->SwitchNewFile(curfooter, true, headerdatainfo); |
| 307 | LogVerbose("%s switch file %s to new file %s, add footer", __func__, |
| 308 | curfooter.event_data_file().c_str(), headerdatainfo->file_name().c_str()); |
| 309 | } |
| 310 | curfilename = eventdatainfo.file_name(); |
| 311 | } else { |
| 312 | int ret = event_storage_->AddEvent(eventdata.gtid(), eventdata, false); |
| 313 | if (ret) { |
| 314 | return ret; |
| 315 | } |
| 316 | } |
| 317 | } else if (ret == DATA_EMPTY) { |
| 318 | *header = curfooter; |
| 319 | |
| 320 | ret = CheckPointManager::GetMasterInfoFromHeader(curfooter, masterinfo); |
| 321 | if (ret == OK) { |
| 322 | LogVerbose("%s get master info, master ip %s version %lu", __func__, |
| 323 | Utils::GetIP(masterinfo->svr_id()).c_str(), masterinfo->version()); |
| 324 | } else { |
| 325 | ColorLogWarning("%s parse header fail", __func__); |
| 326 | } |
| 327 | break; |
| 328 | } else { |
| 329 | break; |
| 330 | } |
| 331 | } |
| 332 | ColorLogInfo("%s load backup checkpoint done from %s, header instanceid %lu file_name %s master varion %lu", |
| 333 | __func__, datadir.c_str(), header->instance_id(), headerdatainfo->file_name().c_str(), |
| 334 | masterinfo->version()); |
| 335 | return ret; |
nothing calls this directly
no test coverage detected