From 8f1861462b27727dfc5b2c4687112108e6ba88eb Mon Sep 17 00:00:00 2001 From: leveldb Team Date: Tue, 12 Jan 2021 21:08:52 +0000 Subject: [PATCH] Sync MANIFEST before closing in db_impl when creating a new DB. Add logging with debugging information when failing to load a version set. PiperOrigin-RevId: 351432332 --- db/db_impl.cc | 5 +++++ db/version_set.cc | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/db/db_impl.cc b/db/db_impl.cc index 59b834f..1a4e459 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -197,6 +197,9 @@ Status DBImpl::NewDB() { new_db.EncodeTo(&record); s = log.AddRecord(record); if (s.ok()) { + s = file->Sync(); + } + if (s.ok()) { s = file->Close(); } } @@ -301,6 +304,8 @@ Status DBImpl::Recover(VersionEdit* edit, bool* save_manifest) { if (!env_->FileExists(CurrentFileName(dbname_))) { if (options_.create_if_missing) { + Log(options_.info_log, "Creating DB %s since it was missing.", + dbname_.c_str()); s = NewDB(); if (!s.ok()) { return s; diff --git a/db/version_set.cc b/db/version_set.cc index a459587..1963353 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -898,6 +898,7 @@ Status VersionSet::Recover(bool* save_manifest) { uint64_t log_number = 0; uint64_t prev_log_number = 0; Builder builder(this, current_); + int read_records = 0; { LogReporter reporter; @@ -907,6 +908,7 @@ Status VersionSet::Recover(bool* save_manifest) { Slice record; std::string scratch; while (reader.ReadRecord(&record, &scratch) && s.ok()) { + ++read_records; VersionEdit edit; s = edit.DecodeFrom(record); if (s.ok()) { @@ -981,6 +983,10 @@ Status VersionSet::Recover(bool* save_manifest) { } else { *save_manifest = true; } + } else { + std::string error = s.ToString(); + Log(options_->info_log, "Error recovering version set with %d records: %s", + read_records, error.c_str()); } return s;