diff --git a/db/db_sst_test.cc b/db/db_sst_test.cc index 46dbd0d40..5cfbd6675 100644 --- a/db/db_sst_test.cc +++ b/db/db_sst_test.cc @@ -703,26 +703,19 @@ TEST_F(DBSSTTest, DBWithMaxSpaceAllowedRandomized) { // When bg_error_ is set we will verify that the DB size is greater // than the limit. - std::vector max_space_limits_mbs = {1, 2, 4, 8, 10}; - decltype(max_space_limits_mbs)::value_type limit_mb_cb; - bool bg_error_set = false; - uint64_t total_sst_files_size = 0; + std::vector max_space_limits_mbs = {1, 10}; + std::atomic bg_error_set(false); - std::atomic estimate_multiplier(1); - int reached_max_space_on_flush = 0; - int reached_max_space_on_compaction = 0; + std::atomic reached_max_space_on_flush(0); + std::atomic reached_max_space_on_compaction(0); rocksdb::SyncPoint::GetInstance()->SetCallBack( "DBImpl::FlushMemTableToOutputFile:MaxAllowedSpaceReached", [&](void* arg) { Status* bg_error = static_cast(arg); bg_error_set = true; - GetAllSSTFiles(&total_sst_files_size); reached_max_space_on_flush++; - // low limit for size calculated using sst files - ASSERT_GE(total_sst_files_size, limit_mb_cb * 1024 * 1024); // clear error to ensure compaction callback is called *bg_error = Status::OK(); - estimate_multiplier++; // used in the main loop assert }); rocksdb::SyncPoint::GetInstance()->SetCallBack( @@ -735,15 +728,11 @@ TEST_F(DBSSTTest, DBWithMaxSpaceAllowedRandomized) { "CompactionJob::FinishCompactionOutputFile:MaxAllowedSpaceReached", [&](void* /*arg*/) { bg_error_set = true; - GetAllSSTFiles(&total_sst_files_size); reached_max_space_on_compaction++; }); for (auto limit_mb : max_space_limits_mbs) { bg_error_set = false; - total_sst_files_size = 0; - estimate_multiplier = 1; - limit_mb_cb = limit_mb; rocksdb::SyncPoint::GetInstance()->ClearTrace(); rocksdb::SyncPoint::GetInstance()->EnableProcessing(); std::shared_ptr sst_file_manager(NewSstFileManager(env_)); @@ -757,21 +746,17 @@ TEST_F(DBSSTTest, DBWithMaxSpaceAllowedRandomized) { sfm->SetMaxAllowedSpaceUsage(limit_mb * 1024 * 1024); - int keys_written = 0; - uint64_t estimated_db_size = 0; + // It is easy to detect if the test is stuck in a loop. No need for + // complex termination logic. while (true) { auto s = Put(RandomString(&rnd, 10), RandomString(&rnd, 50)); if (!s.ok()) { break; } - keys_written++; - // Check the estimated db size vs the db limit just to make sure we - // dont run into an infinite loop - estimated_db_size = keys_written * 60; // ~60 bytes per key - ASSERT_LT(estimated_db_size, - estimate_multiplier * limit_mb * 1024 * 1024 * 2); } ASSERT_TRUE(bg_error_set); + uint64_t total_sst_files_size = 0; + GetAllSSTFiles(&total_sst_files_size); ASSERT_GE(total_sst_files_size, limit_mb * 1024 * 1024); rocksdb::SyncPoint::GetInstance()->DisableProcessing(); }