diff options
author | Chris Mumford <cmumford@google.com> | 2019-05-30 09:56:33 -0700 |
---|---|---|
committer | Chris Mumford <cmumford@google.com> | 2019-05-30 09:56:34 -0700 |
commit | 4cb80b7ddce6ff6089b15d8cfebf746fc1572477 (patch) | |
tree | 8922e8209eefec5906acfbf7f902ec8f7f60e85f /db | |
parent | 72a38ff7f206b3924ac009a12a1838d6a0bdab03 (diff) | |
parent | 63d5315e1c224e52da8ec68d118c5b73ba2a63fc (diff) | |
download | leveldb-4cb80b7ddce6ff6089b15d8cfebf746fc1572477.tar.gz |
Merge pull request #386 from ivanabc:master
PiperOrigin-RevId: 250702492
Diffstat (limited to 'db')
-rw-r--r-- | db/db_impl.cc | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/db/db_impl.cc b/db/db_impl.cc index 94b5d4c..7695d0b 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -229,12 +229,19 @@ void DBImpl::DeleteObsoleteFiles() { return; } + const uint64_t log_number = versions_->LogNumber(); + const uint64_t prev_log_number = versions_->PrevLogNumber(); + const uint64_t manifest_file_number = versions_->ManifestFileNumber(); + // Make a set of all of the live files std::set<uint64_t> live = pending_outputs_; versions_->AddLiveFiles(&live); std::vector<std::string> filenames; env_->GetChildren(dbname_, &filenames); // Ignoring errors on purpose + + // Unlock while deleting obsolete files + mutex_.Unlock(); uint64_t number; FileType type; for (size_t i = 0; i < filenames.size(); i++) { @@ -242,13 +249,12 @@ void DBImpl::DeleteObsoleteFiles() { bool keep = true; switch (type) { case kLogFile: - keep = ((number >= versions_->LogNumber()) || - (number == versions_->PrevLogNumber())); + keep = ((number >= log_number) || (number == prev_log_number)); break; case kDescriptorFile: // Keep my manifest file, and any newer incarnations' // (in case there is a race that allows other incarnations) - keep = (number >= versions_->ManifestFileNumber()); + keep = (number >= manifest_file_number); break; case kTableFile: keep = (live.find(number) != live.end()); @@ -275,6 +281,7 @@ void DBImpl::DeleteObsoleteFiles() { } } } + mutex_.Lock(); } Status DBImpl::Recover(VersionEdit* edit, bool* save_manifest) { |