diff --git a/db/version_edit.h b/db/version_edit.h index ee54cb664..58edfed45 100644 --- a/db/version_edit.h +++ b/db/version_edit.h @@ -81,6 +81,8 @@ struct FileMetaData { uint64_t num_deletions; // the number of deletion entries. uint64_t raw_key_size; // total uncompressed key size. uint64_t raw_value_size; // total uncompressed value size. + bool init_stats_from_file; // true if the data-entry stats of this file + // has initialized from file. FileMetaData() : refs(0), @@ -90,7 +92,8 @@ struct FileMetaData { num_entries(0), num_deletions(0), raw_key_size(0), - raw_value_size(0) {} + raw_value_size(0), + init_stats_from_file(false) {} }; // A compressed copy of file meta data that just contain diff --git a/db/version_set.cc b/db/version_set.cc index 5e61de6c9..3a1545853 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -879,12 +879,16 @@ void Version::PrepareApply(std::vector& size_being_compacted) { } bool Version::MaybeInitializeFileMetaData(FileMetaData* file_meta) { - if (file_meta->num_entries > 0) { + if (file_meta->init_stats_from_file) { return false; } std::shared_ptr tp; Status s = GetTableProperties(&tp, file_meta); + file_meta->init_stats_from_file = true; if (!s.ok()) { + Log(vset_->options_->info_log, + "Unable to load table properties for file %" PRIu64 " --- %s\n", + file_meta->fd.GetNumber(), s.ToString().c_str()); return false; } if (tp.get() == nullptr) return false; diff --git a/table/meta_blocks.cc b/table/meta_blocks.cc index 407154015..a95f4c119 100644 --- a/table/meta_blocks.cc +++ b/table/meta_blocks.cc @@ -253,8 +253,7 @@ Status ReadTableProperties(RandomAccessFile* file, uint64_t file_size, s = ReadProperties(meta_iter->value(), file, footer, env, info_log, properties); } else { - s = Status::Corruption("Unable to read the property block."); - Log(WARN_LEVEL, info_log, "Cannot find Properties block from file."); + s = Status::NotFound(); } return s;