Move the file copy out of the mutex.

Summary:
We now release the mutex before copying the files in the case
of the trivial move. This path does not use the compaction job.

Test Plan: DBTest.LevelCompactionThirdPath

Reviewers: yhchiang, igor, sdong

Reviewed By: sdong

Subscribers: dhruba, leveldb

Differential Revision: https://reviews.facebook.net/D30381
This commit is contained in:
Venkatesh Radhakrishnan 2014-12-16 16:57:22 -08:00
parent 153f4f0719
commit 7661e5a76e
4 changed files with 9 additions and 29 deletions

View File

@ -3,6 +3,10 @@
### Unreleased Features ### Unreleased Features
* Changed the LRU caching algorithm so that referenced blocks (by iterators) are never evicted * Changed the LRU caching algorithm so that referenced blocks (by iterators) are never evicted
* By default we now optimize the compilation for the compilation platform (using -march=native). If you want to build portable binary, use 'PORTABLE=1' before the make command. * By default we now optimize the compilation for the compilation platform (using -march=native). If you want to build portable binary, use 'PORTABLE=1' before the make command.
* We now allow level-compaction to place files in different paths by
specifying them in db_paths along with the target_size.
Lower numbered levels will be placed earlier in the db_paths and higher
numbered levels will be placed later in the db_paths vector.
### 3.9.0 (12/8/2014) ### 3.9.0 (12/8/2014)
@ -17,10 +21,6 @@
* New API LinkFile added to Env. If you implement your own Env class, an * New API LinkFile added to Env. If you implement your own Env class, an
implementation of the API LinkFile will have to be provided. implementation of the API LinkFile will have to be provided.
* MemTableRep takes MemTableAllocator instead of Arena * MemTableRep takes MemTableAllocator instead of Arena
* We now allow level-compaction to place files in different paths by
specifying them in db_paths along with the target_size.
Lower numbered levels will be placed earlier in the db_paths and higher
numbered levels will be placed later in the db_paths vector.
### Improvements ### Improvements
* RocksDBLite library now becomes smaller and will be compiled with -fno-exceptions flag. * RocksDBLite library now becomes smaller and will be compiled with -fno-exceptions flag.

View File

@ -140,6 +140,7 @@ bool Compaction::IsTrivialMove() const {
num_input_levels() == 2 && num_input_levels() == 2 &&
num_input_files(0) == 1 && num_input_files(0) == 1 &&
num_input_files(1) == 0 && num_input_files(1) == 0 &&
input(0, 0)->fd.GetPathId() == GetOutputPathId() &&
TotalFileSize(grandparents_) <= max_grandparent_overlap_bytes_); TotalFileSize(grandparents_) <= max_grandparent_overlap_bytes_);
} }

View File

@ -119,7 +119,7 @@ class Compaction {
// moving a single input file to the next level (no merging or splitting) // moving a single input file to the next level (no merging or splitting)
bool IsTrivialMove() const; bool IsTrivialMove() const;
// If true, then the comaction can be done by simply deleting input files. // If true, then the compaction can be done by simply deleting input files.
bool IsDeletionCompaction() const { bool IsDeletionCompaction() const {
return deletion_compaction_; return deletion_compaction_;
} }

View File

@ -2060,31 +2060,10 @@ Status DBImpl::BackgroundCompaction(bool* madeProgress, JobContext* job_context,
// Move file to next level // Move file to next level
assert(c->num_input_files(0) == 1); assert(c->num_input_files(0) == 1);
FileMetaData* f = c->input(0, 0); FileMetaData* f = c->input(0, 0);
FileMetaData ftemp;
uint64_t fdnum = f->fd.GetNumber();
uint32_t fdpath = f->fd.GetPathId();
c->edit()->DeleteFile(c->level(), f->fd.GetNumber()); c->edit()->DeleteFile(c->level(), f->fd.GetNumber());
// Need to move file if file is to be stored in a new path c->edit()->AddFile(c->level() + 1, f->fd.GetNumber(), f->fd.GetPathId(),
if (c->GetOutputPathId() != f->fd.GetPathId()) { f->fd.GetFileSize(), f->smallest, f->largest,
fdnum = versions_->NewFileNumber(); f->smallest_seqno, f->largest_seqno);
std::string source = TableFileName(db_options_.db_paths,
f->fd.GetNumber(), f->fd.GetPathId());
std::string destination =
TableFileName(db_options_.db_paths, fdnum, c->GetOutputPathId());
Status s = CopyFile(env_, source, destination, 0);
if (s.ok()) {
fdpath = c->GetOutputPathId();
} else {
fdnum = f->fd.GetNumber();
if (!s.IsShutdownInProgress()) {
Log(InfoLogLevel::WARN_LEVEL, db_options_.info_log,
"Compaction error: %s", s.ToString().c_str());
}
}
}
c->edit()->AddFile(c->level() + 1, fdnum, fdpath, f->fd.GetFileSize(),
f->smallest, f->largest, f->smallest_seqno,
f->largest_seqno);
status = versions_->LogAndApply(c->column_family_data(), status = versions_->LogAndApply(c->column_family_data(),
*c->mutable_cf_options(), *c->mutable_cf_options(),
c->edit(), &mutex_, db_directory_.get()); c->edit(), &mutex_, db_directory_.get());