]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
Reduce compaction iterator status checks
authorAndrew Kryczka <andrewkr@fb.com>
Sat, 17 Dec 2016 01:31:15 +0000 (17:31 -0800)
committerIslam AbdelRahman <tec@fb.com>
Mon, 19 Dec 2016 22:26:55 +0000 (14:26 -0800)
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

db/compaction_job.cc

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