Skip to content

Commit

Permalink
Fix memleak when DB::DeleteFile()
Browse files Browse the repository at this point in the history
Summary:
Because the corresponding read_first_record_cache_ item wasn't
erased, memory leaked.
Closes facebook#1712

Differential Revision: D4363654

Pulled By: ajkr

fbshipit-source-id: 7da1adcfc8c380e4ffe05b8769fc2221ad17a225
  • Loading branch information
xiaosuo authored and facebook-github-bot committed Jan 12, 2018
1 parent 9c2f64e commit 0a7ba0e
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 2 deletions.
3 changes: 1 addition & 2 deletions db/db_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2047,8 +2047,7 @@ Status DBImpl::DeleteFile(std::string name) {
name.c_str());
return Status::NotSupported("Delete only supported for archived logs");
}
status =
env_->DeleteFile(immutable_db_options_.wal_dir + "/" + name.c_str());
status = wal_manager_.DeleteFile(name, number);
if (!status.ok()) {
ROCKS_LOG_ERROR(immutable_db_options_.info_log,
"DeleteFile %s failed -- %s.\n", name.c_str(),
Expand Down
9 changes: 9 additions & 0 deletions db/wal_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,15 @@ namespace rocksdb {

#ifndef ROCKSDB_LITE

Status WalManager::DeleteFile(const std::string& fname, uint64_t number) {
auto s = env_->DeleteFile(db_options_.wal_dir + "/" + fname);
if (s.ok()) {
MutexLock l(&read_first_record_cache_mutex_);
read_first_record_cache_.erase(number);
}
return s;
}

Status WalManager::GetSortedWalFiles(VectorLogPtr& files) {
// First get sorted files in db dir, then get sorted files from archived
// dir, to avoid a race condition where a log file is moved to archived
Expand Down
2 changes: 2 additions & 0 deletions db/wal_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ class WalManager {

void ArchiveWALFile(const std::string& fname, uint64_t number);

Status DeleteFile(const std::string& fname, uint64_t number);

Status TEST_ReadFirstRecord(const WalFileType type, const uint64_t number,
SequenceNumber* sequence) {
return ReadFirstRecord(type, number, sequence);
Expand Down

0 comments on commit 0a7ba0e

Please sign in to comment.