diff --git a/db/compaction_picker_test.cc b/db/compaction_picker_test.cc index 4a5bc7bed..5fb3db0a9 100644 --- a/db/compaction_picker_test.cc +++ b/db/compaction_picker_test.cc @@ -952,7 +952,7 @@ TEST_F(CompactionPickerTest, NotScheduleL1IfL0WithHigherPri3) { TEST_F(CompactionPickerTest, EstimateCompactionBytesNeeded1) { int num_levels = ioptions_.num_levels; ioptions_.level_compaction_dynamic_level_bytes = false; - mutable_cf_options_.level0_file_num_compaction_trigger = 3; + mutable_cf_options_.level0_file_num_compaction_trigger = 4; mutable_cf_options_.max_bytes_for_level_base = 1000; mutable_cf_options_.max_bytes_for_level_multiplier = 10; NewVersionStorage(num_levels, kCompactionStyleLevel); diff --git a/db/db_properties_test.cc b/db/db_properties_test.cc index 210ae1508..de1a637c8 100644 --- a/db/db_properties_test.cc +++ b/db/db_properties_test.cc @@ -913,7 +913,7 @@ TEST_F(DBPropertiesTest, EstimatePendingCompBytes) { Flush(); ASSERT_TRUE(dbfull()->GetIntProperty( "rocksdb.estimate-pending-compaction-bytes", &int_num)); - ASSERT_EQ(int_num, 0U); + ASSERT_GT(int_num, 0U); ASSERT_OK(dbfull()->Put(writeOpt, "k3", big_value)); Flush(); diff --git a/db/version_set.cc b/db/version_set.cc index 3b7f57a16..8936c32f8 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -1230,15 +1230,18 @@ void VersionStorageInfo::EstimateCompactionBytesNeeded( // accumulated bytes. uint64_t bytes_compact_to_next_level = 0; + uint64_t level_size = 0; + for (auto* f : files_[0]) { + level_size += f->fd.GetFileSize(); + } // Level 0 bool level0_compact_triggered = false; - if (static_cast(files_[0].size()) > - mutable_cf_options.level0_file_num_compaction_trigger) { + if (static_cast(files_[0].size()) >= + mutable_cf_options.level0_file_num_compaction_trigger || + level_size >= mutable_cf_options.max_bytes_for_level_base) { level0_compact_triggered = true; - for (auto* f : files_[0]) { - bytes_compact_to_next_level += f->fd.GetFileSize(); - } - estimated_compaction_needed_bytes_ = bytes_compact_to_next_level; + estimated_compaction_needed_bytes_ = level_size; + bytes_compact_to_next_level = level_size; } else { estimated_compaction_needed_bytes_ = 0; } @@ -1246,7 +1249,7 @@ void VersionStorageInfo::EstimateCompactionBytesNeeded( // Level 1 and up. uint64_t bytes_next_level = 0; for (int level = base_level(); level <= MaxInputLevel(); level++) { - uint64_t level_size = 0; + level_size = 0; if (bytes_next_level > 0) { #ifndef NDEBUG uint64_t level_size2 = 0;