mirror of https://github.com/facebook/rocksdb.git
More checks around num_entries vs. num_deletions (#12600)
Summary: We've seen an internal crash test+sanitizer failure seemingly caused by underflow on `current_num_non_deletions_` which would happen if num_entries < num_deletions. (T186407810) This change adds an additional check (fail earlier?) and coerces read table properties to satisfy the invariant that is supposed to be provided by https://github.com/facebook/rocksdb/pull/4841 but could be violated by older files, due to https://github.com/facebook/rocksdb/pull/4016. Pull Request resolved: https://github.com/facebook/rocksdb/pull/12600 Test Plan: existing tests Reviewed By: ajkr Differential Revision: D56796191 Pulled By: pdillinger fbshipit-source-id: 6d22cc40eb74974c42b311293ee2775c6af95afc
This commit is contained in:
parent
b312dbe920
commit
a178d15baf
|
@ -3130,6 +3130,10 @@ bool Version::MaybeInitializeFileMetaData(const ReadOptions& read_options,
|
|||
file_meta->raw_value_size = tp->raw_value_size;
|
||||
file_meta->raw_key_size = tp->raw_key_size;
|
||||
file_meta->num_range_deletions = tp->num_range_deletions;
|
||||
// Ensure new invariants on old files
|
||||
file_meta->num_deletions =
|
||||
std::max(tp->num_deletions, tp->num_range_deletions);
|
||||
file_meta->num_entries = std::max(tp->num_entries, tp->num_deletions);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -3141,6 +3145,7 @@ void VersionStorageInfo::UpdateAccumulatedStats(FileMetaData* file_meta) {
|
|||
accumulated_file_size_ += file_meta->fd.GetFileSize();
|
||||
accumulated_raw_key_size_ += file_meta->raw_key_size;
|
||||
accumulated_raw_value_size_ += file_meta->raw_value_size;
|
||||
assert(file_meta->num_entries >= file_meta->num_deletions);
|
||||
accumulated_num_non_deletions_ +=
|
||||
file_meta->num_entries - file_meta->num_deletions;
|
||||
accumulated_num_deletions_ += file_meta->num_deletions;
|
||||
|
|
Loading…
Reference in New Issue