Compare commits
2 Commits
main
...
unschedule
Author | SHA1 | Date | |
---|---|---|---|
|
110285073c | ||
|
59d972f58a |
@ -6889,6 +6889,106 @@ TEST_F(DBCompactionTest, FIFOWarm) {
|
|||||||
Destroy(options);
|
Destroy(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(DBCompactionTest, DisableMultiManualCompaction) {
|
||||||
|
const int kNumL0Files = 10;
|
||||||
|
|
||||||
|
Options options = CurrentOptions();
|
||||||
|
options.level0_file_num_compaction_trigger = kNumL0Files;
|
||||||
|
Reopen(options);
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
ASSERT_OK(Put(Key(i), "value"));
|
||||||
|
if (i % 2) {
|
||||||
|
ASSERT_OK(Flush());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MoveFilesToLevel(2);
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
ASSERT_OK(Put(Key(i), "value"));
|
||||||
|
if (i % 2) {
|
||||||
|
ASSERT_OK(Flush());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MoveFilesToLevel(1);
|
||||||
|
|
||||||
|
// Block compaction queue
|
||||||
|
test::SleepingBackgroundTask sleeping_task_low;
|
||||||
|
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
||||||
|
Env::Priority::LOW);
|
||||||
|
|
||||||
|
port::Thread compact_thread1([&]() {
|
||||||
|
CompactRangeOptions cro;
|
||||||
|
cro.exclusive_manual_compaction = false;
|
||||||
|
std::string begin_str = Key(0);
|
||||||
|
std::string end_str = Key(3);
|
||||||
|
Slice b = begin_str;
|
||||||
|
Slice e = end_str;
|
||||||
|
auto s = db_->CompactRange(cro, &b, &e);
|
||||||
|
ASSERT_TRUE(s.IsIncomplete());
|
||||||
|
});
|
||||||
|
|
||||||
|
port::Thread compact_thread2([&]() {
|
||||||
|
CompactRangeOptions cro;
|
||||||
|
cro.exclusive_manual_compaction = false;
|
||||||
|
std::string begin_str = Key(4);
|
||||||
|
std::string end_str = Key(7);
|
||||||
|
Slice b = begin_str;
|
||||||
|
Slice e = end_str;
|
||||||
|
auto s = db_->CompactRange(cro, &b, &e);
|
||||||
|
ASSERT_TRUE(s.IsIncomplete());
|
||||||
|
});
|
||||||
|
|
||||||
|
db_->DisableManualCompaction();
|
||||||
|
|
||||||
|
compact_thread1.join();
|
||||||
|
compact_thread2.join();
|
||||||
|
|
||||||
|
sleeping_task_low.WakeUp();
|
||||||
|
sleeping_task_low.WaitUntilDone();
|
||||||
|
ASSERT_OK(dbfull()->TEST_WaitForCompact(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(DBCompactionTest, DisableJustStartedManualCompaction) {
|
||||||
|
const int kNumL0Files = 4;
|
||||||
|
|
||||||
|
Options options = CurrentOptions();
|
||||||
|
options.level0_file_num_compaction_trigger = kNumL0Files;
|
||||||
|
Reopen(options);
|
||||||
|
|
||||||
|
// generate files, but avoid trigger auto compaction
|
||||||
|
for (int i = 0; i < kNumL0Files / 2; i++) {
|
||||||
|
ASSERT_OK(Put(Key(1), "value1"));
|
||||||
|
ASSERT_OK(Put(Key(2), "value2"));
|
||||||
|
ASSERT_OK(Flush());
|
||||||
|
}
|
||||||
|
|
||||||
|
SyncPoint::GetInstance()->LoadDependency(
|
||||||
|
{{"DBImpl::BGWorkCompaction",
|
||||||
|
"DBCompactionTest::DisableJustStartedManualCompaction:"
|
||||||
|
"PreDisableManualCompaction"},
|
||||||
|
{"DBCompactionTest::DisableJustStartedManualCompaction:"
|
||||||
|
"ManualCompactionReturn",
|
||||||
|
"BackgroundCallCompaction:0"}});
|
||||||
|
SyncPoint::GetInstance()->EnableProcessing();
|
||||||
|
|
||||||
|
port::Thread compact_thread([&]() {
|
||||||
|
CompactRangeOptions cro;
|
||||||
|
cro.exclusive_manual_compaction = true;
|
||||||
|
auto s = db_->CompactRange(cro, nullptr, nullptr);
|
||||||
|
ASSERT_TRUE(s.IsIncomplete());
|
||||||
|
TEST_SYNC_POINT(
|
||||||
|
"DBCompactionTest::DisableJustStartedManualCompaction:"
|
||||||
|
"ManualCompactionReturn");
|
||||||
|
});
|
||||||
|
TEST_SYNC_POINT(
|
||||||
|
"DBCompactionTest::DisableJustStartedManualCompaction:"
|
||||||
|
"PreDisableManualCompaction");
|
||||||
|
db_->DisableManualCompaction();
|
||||||
|
|
||||||
|
compact_thread.join();
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(DBCompactionTest, DisableManualCompactionThreadQueueFull) {
|
TEST_F(DBCompactionTest, DisableManualCompactionThreadQueueFull) {
|
||||||
const int kNumL0Files = 4;
|
const int kNumL0Files = 4;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user