Fix log_number in LogAndApply
This commit is contained in:
parent
8b169e949a
commit
a782bb989e
@ -1693,7 +1693,17 @@ Status VersionSet::LogAndApply(ColumnFamilyData* column_family_data,
|
|||||||
delete column_family_data;
|
delete column_family_data;
|
||||||
}
|
}
|
||||||
} else {
|
} 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);
|
AppendVersion(column_family_data, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1746,10 +1756,8 @@ void VersionSet::LogAndApplyHelper(ColumnFamilyData* cfd, Builder* builder,
|
|||||||
|
|
||||||
if (edit->has_log_number_) {
|
if (edit->has_log_number_) {
|
||||||
assert(edit->log_number_ >= cfd->GetLogNumber());
|
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_) {
|
if (!edit->has_prev_log_number_) {
|
||||||
edit->SetPrevLogNumber(prev_log_number_);
|
edit->SetPrevLogNumber(prev_log_number_);
|
||||||
@ -1923,6 +1931,10 @@ Status VersionSet::Recover(
|
|||||||
|
|
||||||
if (cfd != nullptr) {
|
if (cfd != nullptr) {
|
||||||
if (edit.has_log_number_) {
|
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_);
|
cfd->SetLogNumber(edit.log_number_);
|
||||||
have_log_number = true;
|
have_log_number = true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user