From de1dd4ca190619ddef8517fb0667a894c00ae02b Mon Sep 17 00:00:00 2001 From: Soli Date: Fri, 26 May 2023 16:40:50 -0700 Subject: [PATCH] Tweak on IsTrivialMove() (#11467) Summary: `output_level_` and `number_levels_` are not changing in iteration of `inputs_` files. Moving the check out of `for` loop could slightly improve performance. It is easier to review when ignore whitespace changes. Pull Request resolved: https://github.com/facebook/rocksdb/pull/11467 Reviewed By: cbi42 Differential Revision: D46155962 Pulled By: ajkr fbshipit-source-id: 45ec80b13152b3bed7305e6f707cb9b187d5f315 --- .gitignore | 3 ++- db/compaction/compaction.cc | 35 +++++++++++++++++------------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 9b4ac1591..8dd7e8296 100644 --- a/.gitignore +++ b/.gitignore @@ -95,4 +95,5 @@ fuzz/crash-* cmake-build-* third-party/folly/ -.cache \ No newline at end of file +.cache +*.sublime-* diff --git a/db/compaction/compaction.cc b/db/compaction/compaction.cc index 1832f1303..e3e084e89 100644 --- a/db/compaction/compaction.cc +++ b/db/compaction/compaction.cc @@ -486,26 +486,25 @@ bool Compaction::IsTrivialMove() const { // assert inputs_.size() == 1 - std::unique_ptr partitioner = CreateSstPartitioner(); - - for (const auto& file : inputs_.front().files) { - std::vector file_grand_parents; - if (output_level_ + 1 >= number_levels_) { - continue; - } - input_vstorage_->GetOverlappingInputs(output_level_ + 1, &file->smallest, - &file->largest, &file_grand_parents); - const auto compaction_size = - file->fd.GetFileSize() + TotalFileSize(file_grand_parents); - if (compaction_size > max_compaction_bytes_) { - return false; - } - - if (partitioner.get() != nullptr) { - if (!partitioner->CanDoTrivialMove(file->smallest.user_key(), - file->largest.user_key())) { + if (output_level_ + 1 < number_levels_) { + std::unique_ptr partitioner = CreateSstPartitioner(); + for (const auto& file : inputs_.front().files) { + std::vector file_grand_parents; + input_vstorage_->GetOverlappingInputs(output_level_ + 1, &file->smallest, + &file->largest, + &file_grand_parents); + const auto compaction_size = + file->fd.GetFileSize() + TotalFileSize(file_grand_parents); + if (compaction_size > max_compaction_bytes_) { return false; } + + if (partitioner.get() != nullptr) { + if (!partitioner->CanDoTrivialMove(file->smallest.user_key(), + file->largest.user_key())) { + return false; + } + } } }