Skip to content

Commit 570ba5a

Browse files
committed
Avoid retrying to read property block from a table when it does not exist.
Summary: Avoid retrying to read property block from a table when it does not exist in updating stats for compensating deletion entries. In addition, ReadTableProperties() now returns Status::NotFound instead of Status::Corruption when table properties does not exist in the file. Test Plan: make db_test -j32 export ROCKSDB_TESTS=CompactionDeleteionTrigger ./db_test Reviewers: ljin, sdong Reviewed By: sdong Subscribers: leveldb Differential Revision: https://reviews.facebook.net/D21867
1 parent 625b9ef commit 570ba5a

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

db/version_edit.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ struct FileMetaData {
8181
uint64_t num_deletions; // the number of deletion entries.
8282
uint64_t raw_key_size; // total uncompressed key size.
8383
uint64_t raw_value_size; // total uncompressed value size.
84+
bool init_stats_from_file; // true if the data-entry stats of this file
85+
// has initialized from file.
8486

8587
FileMetaData()
8688
: refs(0),
@@ -90,7 +92,8 @@ struct FileMetaData {
9092
num_entries(0),
9193
num_deletions(0),
9294
raw_key_size(0),
93-
raw_value_size(0) {}
95+
raw_value_size(0),
96+
init_stats_from_file(false) {}
9497
};
9598

9699
// A compressed copy of file meta data that just contain

db/version_set.cc

+5-1
Original file line numberDiff line numberDiff line change
@@ -879,12 +879,16 @@ void Version::PrepareApply(std::vector<uint64_t>& size_being_compacted) {
879879
}
880880

881881
bool Version::MaybeInitializeFileMetaData(FileMetaData* file_meta) {
882-
if (file_meta->num_entries > 0) {
882+
if (file_meta->init_stats_from_file) {
883883
return false;
884884
}
885885
std::shared_ptr<const TableProperties> tp;
886886
Status s = GetTableProperties(&tp, file_meta);
887+
file_meta->init_stats_from_file = true;
887888
if (!s.ok()) {
889+
Log(vset_->options_->info_log,
890+
"Unable to load table properties for file %" PRIu64 " --- %s\n",
891+
file_meta->fd.GetNumber(), s.ToString().c_str());
888892
return false;
889893
}
890894
if (tp.get() == nullptr) return false;

table/meta_blocks.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,7 @@ Status ReadTableProperties(RandomAccessFile* file, uint64_t file_size,
253253
s = ReadProperties(meta_iter->value(), file, footer, env, info_log,
254254
properties);
255255
} else {
256-
s = Status::Corruption("Unable to read the property block.");
257-
Log(WARN_LEVEL, info_log, "Cannot find Properties block from file.");
256+
s = Status::NotFound();
258257
}
259258

260259
return s;

0 commit comments

Comments
 (0)