DeleteFile should schedule Flush or Compaction

Summary:
More info here: https://github.com/facebook/rocksdb/issues/89
If flush fails because of ENOSPC, we have a deadlock problem. This is a quick fix that will continue the normal operation when user deletes the file and frees up the space on the device.

We need to address the issue more broadly with bg_error_ cleanup.

Test Plan: make check

Reviewers: dhruba, haobo, ljin

Reviewed By: ljin

CC: leveldb

Differential Revision: https://reviews.facebook.net/D16275
main
Igor Canadi 11 years ago
parent 2bf1151a25
commit 6ed450a58c
  1. 6
      db/db_impl.cc

@ -3623,6 +3623,12 @@ Status DBImpl::DeleteFile(std::string name) {
LogFlush(options_.info_log); LogFlush(options_.info_log);
// remove files outside the db-lock // remove files outside the db-lock
PurgeObsoleteFiles(deletion_state); PurgeObsoleteFiles(deletion_state);
{
MutexLock l(&mutex_);
// schedule flush if file deletion means we freed the space for flushes to
// continue
MaybeScheduleFlushOrCompaction();
}
return status; return status;
} }

Loading…
Cancel
Save