in platform/consensus/recovery/recovery.cpp [121:154]
void Recovery::GetLastFile() {
std::string dir = std::filesystem::path(file_path_).parent_path();
last_ckpt_ = -1;
int m_time_s = 0;
for (const auto& entry : std::filesystem::directory_iterator(dir)) {
std::string dir = std::filesystem::path(entry.path()).parent_path();
std::string file_name = std::filesystem::path(entry.path()).stem();
std::string ext = std::filesystem::path(entry.path()).extension();
if (ext != ".log") continue;
int pos = file_name.rfind("_");
int64_t ckpt = std::stoll(file_name.substr(pos + 1));
int max_seq_pos = file_name.rfind("_", pos - 1);
int min_seq_pos = file_name.rfind("_", max_seq_pos - 1);
int time_pos = file_name.rfind("_", min_seq_pos - 1);
int64_t min_seq = std::stoll(
file_name.substr(min_seq_pos + 1, max_seq_pos - min_seq_pos - 1));
int64_t time_s =
std::stoll(file_name.substr(time_pos + 1, min_seq_pos - time_pos - 1));
if (min_seq == -1) {
if (last_ckpt_ == -1 || m_time_s < time_s) {
file_path_ = entry.path();
last_ckpt_ = ckpt;
m_time_s = time_s;
LOG(ERROR) << "get last path:" << file_name << " min:" << min_seq;
}
}
}
if (last_ckpt_ == -1) {
last_ckpt_ = 0;
file_path_ = GenerateFile(last_ckpt_, -1, -1);
}
}