Fix occasional failure of DBTest.DynamicCompactionOptions
Summary: DBTest.DynamicCompactionOptions ocasionally fails during valgrind run. We sent a sleeping task to block compaction thread pool but we don't wait it to run. Test Plan: Run the test multiple times in an environment which can cause failure. Reviewers: rven, kradhakrishnan, igor, IslamAbdelRahman, anthony, yhchiang Reviewed By: yhchiang Subscribers: leveldb, dhruba Differential Revision: https://reviews.facebook.net/D51687
This commit is contained in:
parent
f307036bde
commit
770dea9325
@ -7704,7 +7704,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|||||||
test::SleepingBackgroundTask sleeping_task_low;
|
test::SleepingBackgroundTask sleeping_task_low;
|
||||||
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
||||||
Env::Priority::LOW);
|
Env::Priority::LOW);
|
||||||
|
sleeping_task_low.WaitUntilSleeping();
|
||||||
ASSERT_EQ(NumTableFilesAtLevel(0), 0);
|
ASSERT_EQ(NumTableFilesAtLevel(0), 0);
|
||||||
int count = 0;
|
int count = 0;
|
||||||
Random rnd(301);
|
Random rnd(301);
|
||||||
@ -7737,6 +7737,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
|
|||||||
sleeping_task_low.Reset();
|
sleeping_task_low.Reset();
|
||||||
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
|
||||||
Env::Priority::LOW);
|
Env::Priority::LOW);
|
||||||
|
sleeping_task_low.WaitUntilSleeping();
|
||||||
count = 0;
|
count = 0;
|
||||||
while (count < 64) {
|
while (count < 64) {
|
||||||
ASSERT_OK(Put(Key(count), RandomString(&rnd, 1024), wo));
|
ASSERT_OK(Put(Key(count), RandomString(&rnd, 1024), wo));
|
||||||
|
@ -306,6 +306,7 @@ class SleepingBackgroundTask {
|
|||||||
void DoSleep() {
|
void DoSleep() {
|
||||||
MutexLock l(&mutex_);
|
MutexLock l(&mutex_);
|
||||||
sleeping_ = true;
|
sleeping_ = true;
|
||||||
|
bg_cv_.SignalAll();
|
||||||
while (should_sleep_) {
|
while (should_sleep_) {
|
||||||
bg_cv_.Wait();
|
bg_cv_.Wait();
|
||||||
}
|
}
|
||||||
@ -313,6 +314,12 @@ class SleepingBackgroundTask {
|
|||||||
done_with_sleep_ = true;
|
done_with_sleep_ = true;
|
||||||
bg_cv_.SignalAll();
|
bg_cv_.SignalAll();
|
||||||
}
|
}
|
||||||
|
void WaitUntilSleeping() {
|
||||||
|
MutexLock l(&mutex_);
|
||||||
|
while (!sleeping_) {
|
||||||
|
bg_cv_.Wait();
|
||||||
|
}
|
||||||
|
}
|
||||||
void WakeUp() {
|
void WakeUp() {
|
||||||
MutexLock l(&mutex_);
|
MutexLock l(&mutex_);
|
||||||
should_sleep_ = false;
|
should_sleep_ = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user