diff --git a/db/db_impl.cc b/db/db_impl.cc index 9b91baf0c..747175c0f 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -1736,6 +1736,9 @@ Status DBImpl::ReFitLevel(ColumnFamilyData* cfd, int level, int target_level) { to_level = FindMinimumEmptyLevelFitting(cfd, mutable_cf_options, level); } + printf("level %d, to_level %d\n", level, to_level); + assert(to_level <= level); + Status status; auto* vstorage = cfd->current()->storage_info(); if (to_level > level) { diff --git a/db/db_test.cc b/db/db_test.cc index f5b55fe97..d5613b397 100644 --- a/db/db_test.cc +++ b/db/db_test.cc @@ -13238,6 +13238,57 @@ TEST_F(DBTest, FlushesInParallelWithCompactRange) { rocksdb::SyncPoint::GetInstance()->DisableProcessing(); } } +TEST_F(DBTest, TrivialMoveTargetLevel) { + int32_t trivial_move = 0; + int32_t non_trivial_move = 0; +/* + rocksdb::SyncPoint::GetInstance()->SetCallBack( + "DBImpl::BackgroundCompaction:TrivialMove", + [&](void* arg) { trivial_move++;printf("trivial\n"); }); + rocksdb::SyncPoint::GetInstance()->SetCallBack( + "DBImpl::BackgroundCompaction:NonTrivial", + [&](void* arg) { non_trivial_move++;printf("non-trivial\n"); }); + rocksdb::SyncPoint::GetInstance()->EnableProcessing(); +*/ + Options options = CurrentOptions(); + options.disable_auto_compactions = true; + options.write_buffer_size = 10 * 1024 * 1024; + options.num_levels = 5; + + DestroyAndReopen(options); + int32_t value_size = 10 * 1024; // 10 KB + + // Add 2 non-overlapping files + Random rnd(301); + std::map values; + for (int32_t i = 0; i <= 100; i++) { + values[i] = RandomString(&rnd, value_size); + ASSERT_OK(Put(Key(i), values[i])); + } + ASSERT_OK(Flush()); + + for (int32_t i = 300; i <= 700; i++) { + values[i] = RandomString(&rnd, value_size); + ASSERT_OK(Put(Key(i), values[i])); + } + ASSERT_OK(Flush()); + + ASSERT_EQ("2", FilesPerLevel(0)); + printf("Compact\n"); + db_->CompactRange(db_->DefaultColumnFamily(), nullptr, nullptr, true, 1, 0); + printf("Done\n"); + ASSERT_EQ("0,0,0,2", FilesPerLevel(0)); + + ASSERT_EQ(trivial_move, 3); + ASSERT_EQ(non_trivial_move, 0); + + for (int32_t i = 0; i <= 100; i++) { + ASSERT_EQ(Get(Key(i)), values[i]); + } + for (int32_t i = 300; i <= 700; i++) { + ASSERT_EQ(Get(Key(i)), values[i]); + } +} } // namespace rocksdb diff --git a/util/compaction_job_stats_impl.cc b/util/compaction_job_stats_impl.cc index 4933a15cc..b55b112a0 100644 --- a/util/compaction_job_stats_impl.cc +++ b/util/compaction_job_stats_impl.cc @@ -29,9 +29,6 @@ void CompactionJobStats::Reset() { num_records_replaced = 0; is_manual_compaction = 0; - - smallest_output_key_prefix[0] = 0; - largest_output_key_prefix[0] = 0; } #else