Reduce compaction iterator status checks

Summary:
seems it's expensive to check status since the underlying merge iterator checks status of all its children. so only do it when it's really necessary to get the status before invoking Next(), i.e., when we're advancing to get the first key in the next file.
Closes https://github.com/facebook/rocksdb/pull/1691

Differential Revision: D4343446

Pulled By: siying

fbshipit-source-id: 70ab315
main
Andrew Kryczka 8 years ago committed by Facebook Github Bot
parent bd6cf7b51d
commit fbff4628a9
  1. 8
      db/compaction_job.cc

@ -853,9 +853,6 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
} }
} }
Status input_status = input->status();
c_iter->Next();
// Close output file if it is big enough // Close output file if it is big enough
// TODO(aekmekji): determine if file should be closed earlier than this // TODO(aekmekji): determine if file should be closed earlier than this
// during subcompactions (i.e. if output size, estimated by input size, is // during subcompactions (i.e. if output size, estimated by input size, is
@ -864,6 +861,9 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
if (sub_compact->compaction->output_level() != 0 && if (sub_compact->compaction->output_level() != 0 &&
sub_compact->current_output_file_size >= sub_compact->current_output_file_size >=
sub_compact->compaction->max_output_file_size()) { sub_compact->compaction->max_output_file_size()) {
Status input_status = input->status();
c_iter->Next();
const Slice* next_key = nullptr; const Slice* next_key = nullptr;
if (c_iter->Valid()) { if (c_iter->Valid()) {
next_key = &c_iter->key(); next_key = &c_iter->key();
@ -879,6 +879,8 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
// files. // files.
sub_compact->compression_dict = std::move(compression_dict); sub_compact->compression_dict = std::move(compression_dict);
} }
} else {
c_iter->Next();
} }
} }

Loading…
Cancel
Save