summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleveldb Team <no-reply@google.com>2021-01-12 21:08:52 +0000
committerVictor Costan <costan@google.com>2021-01-12 21:58:08 +0000
commit8f1861462b27727dfc5b2c4687112108e6ba88eb (patch)
tree976dc12809988be413adeab1f4be8a474e0aafc7
parent8cce47e450b365347769959c53b8836ef0216df9 (diff)
downloadleveldb-8f1861462b27727dfc5b2c4687112108e6ba88eb.tar.gz
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
-rw-r--r--db/db_impl.cc5
-rw-r--r--db/version_set.cc6
2 files changed, 11 insertions, 0 deletions
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;