mirror of
https://github.com/google/leveldb.git
synced 2024-12-28 04:00:09 +08:00
Merge pull request #386 from ivanabc:master
PiperOrigin-RevId: 250702492
This commit is contained in:
commit
4cb80b7ddc
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user