diff --git a/db/db_test.cc b/db/db_test.cc index a22a42b3c..e21d9d3f4 100644 --- a/db/db_test.cc +++ b/db/db_test.cc @@ -7217,25 +7217,26 @@ TEST_F(DBTest, ShuttingDownNotBlockStalledWrites) { Reopen(options); Random rnd(403); - ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack( - "BackgroundCallCompaction:1", - [&](void* /* arg */) { env_->SleepForMicroseconds(2 * 1000 * 1000); }); - - ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency( - {{"DBImpl::DelayWrite:Wait", - "DBTest::ShuttingDownNotBlockStalledWrites"}}); - - ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing(); - for (int i = 0; i < 20; i++) { - for (int j = 0; j < 100; j++) { - std::string value = rnd.RandomString(1000); - ASSERT_OK(Put("key_" + std::to_string(j), value)); - } - Flush(); + ASSERT_OK(Put("key_" + std::to_string(i), rnd.RandomString(10))); + ASSERT_OK(Flush()); } ASSERT_EQ(GetSstFileCount(dbname_), 20); + // We need !disable_auto_compactions for writes to stall but also want to + // delay compaction so stalled writes unblocked due to kShutdownInProgress. BG + // compaction will first wait for the sync point + // DBTest::ShuttingDownNotBlockStalledWrites. Then it waits extra 2 sec to + // allow CancelAllBackgroundWork() to set shutting_down_. + SyncPoint::GetInstance()->SetCallBack( + "BackgroundCallCompaction:0", + [&](void* /* arg */) { env_->SleepForMicroseconds(2 * 1000 * 1000); }); + SyncPoint::GetInstance()->LoadDependency( + {{"DBImpl::DelayWrite:Wait", "DBTest::ShuttingDownNotBlockStalledWrites"}, + {"DBTest::ShuttingDownNotBlockStalledWrites", + "BackgroundCallCompaction:0"}}); + SyncPoint::GetInstance()->EnableProcessing(); + options.level0_stop_writes_trigger = 20; options.disable_auto_compactions = false; Reopen(options); @@ -7247,7 +7248,6 @@ TEST_F(DBTest, ShuttingDownNotBlockStalledWrites) { TEST_SYNC_POINT("DBTest::ShuttingDownNotBlockStalledWrites"); CancelAllBackgroundWork(db_, true); - LogFlush(options.info_log); thd.join(); }