提交 a782bb98 编写于 作者: I Igor Canadi

Fix log_number in LogAndApply

上级 8b169e94
......@@ -1693,7 +1693,17 @@ Status VersionSet::LogAndApply(ColumnFamilyData* column_family_data,
delete column_family_data;
}
} else {
column_family_data->SetLogNumber(batch_edits.back()->log_number_);
uint64_t max_log_number_in_batch = 0;
for (auto& e : batch_edits) {
if (e->has_log_number_) {
max_log_number_in_batch =
std::max(max_log_number_in_batch, e->log_number_);
}
}
if (max_log_number_in_batch != 0) {
assert(column_family_data->GetLogNumber() < max_log_number_in_batch);
column_family_data->SetLogNumber(max_log_number_in_batch);
}
AppendVersion(column_family_data, v);
}
......@@ -1746,10 +1756,8 @@ void VersionSet::LogAndApplyHelper(ColumnFamilyData* cfd, Builder* builder,
if (edit->has_log_number_) {
assert(edit->log_number_ >= cfd->GetLogNumber());
} else {
edit->SetLogNumber(cfd->GetLogNumber());
assert(edit->log_number_ < next_file_number_);
}
assert(edit->log_number_ < next_file_number_);
if (!edit->has_prev_log_number_) {
edit->SetPrevLogNumber(prev_log_number_);
......@@ -1923,6 +1931,10 @@ Status VersionSet::Recover(
if (cfd != nullptr) {
if (edit.has_log_number_) {
if (cfd->GetLogNumber() > edit.log_number_) {
s = Status::Corruption(
"Log Numbers in MANIFEST are not always increasing");
}
cfd->SetLogNumber(edit.log_number_);
have_log_number = true;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册