Fix DBTest.MigrateToDynamicLevelMaxBytesBase slowness with valgrind

Summary:
DBTest.MigrateToDynamicLevelMaxBytesBase with valgrind test is
extremely slow. Work it around by not having both threads running
everything non-stop.

Test Plan: Run the test with valgrind which used to take too long to finish and see it finish in reasonable time.

Reviewers: yhchiang, anthony, rven, kradhakrishnan, igor

Reviewed By: igor

Subscribers: leveldb, dhruba

Differential Revision: https://reviews.facebook.net/D39477
This commit is contained in:
sdong 2015-06-03 11:57:26 -07:00
parent 408cc4b8e0
commit 3af668ed17

View File

@ -11337,7 +11337,7 @@ TEST_F(DBTest, MigrateToDynamicLevelMaxBytesBase) {
DestroyAndReopen(options);
auto verify_func = [&](int num_keys) {
auto verify_func = [&](int num_keys, bool if_sleep) {
for (int i = 0; i < num_keys; i++) {
ASSERT_NE("NOT_FOUND", Get(Key(kMaxKey + i)));
if (i < num_keys / 10) {
@ -11345,6 +11345,12 @@ TEST_F(DBTest, MigrateToDynamicLevelMaxBytesBase) {
} else {
ASSERT_NE("NOT_FOUND", Get(Key(i)));
}
if (if_sleep && i % 1000 == 0) {
// Without it, valgrind may choose not to give another
// thread a chance to run before finishing the function,
// causing the test to be extremely slow.
env_->SleepForMicroseconds(1);
}
}
};
@ -11354,13 +11360,13 @@ TEST_F(DBTest, MigrateToDynamicLevelMaxBytesBase) {
ASSERT_OK(Put(Key(kMaxKey + i), RandomString(&rnd, 102)));
ASSERT_OK(Delete(Key(i / 10)));
}
verify_func(total_keys);
verify_func(total_keys, false);
dbfull()->TEST_WaitForCompact();
options.level_compaction_dynamic_level_bytes = true;
options.disable_auto_compactions = true;
Reopen(options);
verify_func(total_keys);
verify_func(total_keys, false);
std::atomic_bool compaction_finished(false);
// Issue manual compaction in one thread and still verify DB state
@ -11370,7 +11376,7 @@ TEST_F(DBTest, MigrateToDynamicLevelMaxBytesBase) {
compaction_finished.store(true);
});
do {
verify_func(total_keys);
verify_func(total_keys, true);
} while (!compaction_finished.load());
t.join();
@ -11385,9 +11391,9 @@ TEST_F(DBTest, MigrateToDynamicLevelMaxBytesBase) {
ASSERT_OK(Delete(Key(i / 10)));
}
verify_func(total_keys2);
verify_func(total_keys2, false);
dbfull()->TEST_WaitForCompact();
verify_func(total_keys2);
verify_func(total_keys2, false);
// Base level is not level 1
ASSERT_EQ(NumTableFilesAtLevel(1), 0);