add prefix_seek_mode to db_iter_test

Summary: add prefix_seek_mode to db_iter_test to enable data race test for iterator when prefix_extractor != nullptr

Test Plan: make all check -j64

Reviewers: andrewkr, IslamAbdelRahman, sdong

Reviewed By: sdong

Subscribers: andrewkr, dhruba, leveldb

Differential Revision: https://reviews.facebook.net/D63027
This commit is contained in:
Aaron Gao 2016-08-31 12:07:09 -07:00
parent de47e2bd4d
commit 6a14d55bd9

View File

@ -1842,7 +1842,7 @@ TEST_F(DBIteratorTest, DBIterator12) {
ASSERT_FALSE(db_iter->Valid()); ASSERT_FALSE(db_iter->Valid());
} }
class DBIterWithMergeIterTest : public testing::Test { class DBIterWithMergeIterTest : public ::testing::TestWithParam<bool> {
public: public:
DBIterWithMergeIterTest() DBIterWithMergeIterTest()
: env_(Env::Default()), icomp_(BytewiseComparator()) { : env_(Env::Default()), icomp_(BytewiseComparator()) {
@ -1865,9 +1865,11 @@ class DBIterWithMergeIterTest : public testing::Test {
child_iters.push_back(internal_iter1_); child_iters.push_back(internal_iter1_);
child_iters.push_back(internal_iter2_); child_iters.push_back(internal_iter2_);
InternalKeyComparator icomp(BytewiseComparator()); InternalKeyComparator icomp(BytewiseComparator());
InternalIterator* merge_iter = if (GetParam() == false) {
NewMergingIterator(&icomp_, &child_iters[0], 2u); options_.prefix_extractor.reset(NewFixedPrefixTransform(0));
}
InternalIterator* merge_iter = NewMergingIterator(
&icomp_, &child_iters[0], 2u, nullptr, options_.prefix_extractor.get());
db_iter_.reset(NewDBIterator(env_, ImmutableCFOptions(options_), db_iter_.reset(NewDBIterator(env_, ImmutableCFOptions(options_),
BytewiseComparator(), merge_iter, BytewiseComparator(), merge_iter,
8 /* read data earlier than seqId 8 */, 8 /* read data earlier than seqId 8 */,
@ -1883,7 +1885,7 @@ class DBIterWithMergeIterTest : public testing::Test {
std::unique_ptr<Iterator> db_iter_; std::unique_ptr<Iterator> db_iter_;
}; };
TEST_F(DBIterWithMergeIterTest, InnerMergeIterator1) { TEST_P(DBIterWithMergeIterTest, InnerMergeIterator1) {
db_iter_->SeekToFirst(); db_iter_->SeekToFirst();
ASSERT_TRUE(db_iter_->Valid()); ASSERT_TRUE(db_iter_->Valid());
ASSERT_EQ(db_iter_->key().ToString(), "a"); ASSERT_EQ(db_iter_->key().ToString(), "a");
@ -1912,7 +1914,7 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIterator1) {
ASSERT_FALSE(db_iter_->Valid()); ASSERT_FALSE(db_iter_->Valid());
} }
TEST_F(DBIterWithMergeIterTest, InnerMergeIterator2) { TEST_P(DBIterWithMergeIterTest, InnerMergeIterator2) {
// Test Prev() when one child iterator is at its end. // Test Prev() when one child iterator is at its end.
db_iter_->Seek("g"); db_iter_->Seek("g");
ASSERT_TRUE(db_iter_->Valid()); ASSERT_TRUE(db_iter_->Valid());
@ -1940,7 +1942,7 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIterator2) {
ASSERT_EQ(db_iter_->value().ToString(), "4"); ASSERT_EQ(db_iter_->value().ToString(), "4");
} }
TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace1) { TEST_P(DBIterWithMergeIterTest, InnerMergeIteratorDataRace1) {
// Test Prev() when one child iterator is at its end but more rows // Test Prev() when one child iterator is at its end but more rows
// are added. // are added.
db_iter_->Seek("f"); db_iter_->Seek("f");
@ -1976,7 +1978,7 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace1) {
rocksdb::SyncPoint::GetInstance()->DisableProcessing(); rocksdb::SyncPoint::GetInstance()->DisableProcessing();
} }
TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace2) { TEST_P(DBIterWithMergeIterTest, InnerMergeIteratorDataRace2) {
// Test Prev() when one child iterator is at its end but more rows // Test Prev() when one child iterator is at its end but more rows
// are added. // are added.
db_iter_->Seek("f"); db_iter_->Seek("f");
@ -2014,7 +2016,7 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace2) {
rocksdb::SyncPoint::GetInstance()->DisableProcessing(); rocksdb::SyncPoint::GetInstance()->DisableProcessing();
} }
TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace3) { TEST_P(DBIterWithMergeIterTest, InnerMergeIteratorDataRace3) {
// Test Prev() when one child iterator is at its end but more rows // Test Prev() when one child iterator is at its end but more rows
// are added and max_skipped is triggered. // are added and max_skipped is triggered.
db_iter_->Seek("f"); db_iter_->Seek("f");
@ -2056,7 +2058,7 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace3) {
rocksdb::SyncPoint::GetInstance()->DisableProcessing(); rocksdb::SyncPoint::GetInstance()->DisableProcessing();
} }
TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace4) { TEST_P(DBIterWithMergeIterTest, InnerMergeIteratorDataRace4) {
// Test Prev() when one child iterator has more rows inserted // Test Prev() when one child iterator has more rows inserted
// between Seek() and Prev() when changing directions. // between Seek() and Prev() when changing directions.
internal_iter2_->Add("z", kTypeValue, "9", 4u); internal_iter2_->Add("z", kTypeValue, "9", 4u);
@ -2107,7 +2109,7 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace4) {
rocksdb::SyncPoint::GetInstance()->DisableProcessing(); rocksdb::SyncPoint::GetInstance()->DisableProcessing();
} }
TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace5) { TEST_P(DBIterWithMergeIterTest, InnerMergeIteratorDataRace5) {
internal_iter2_->Add("z", kTypeValue, "9", 4u); internal_iter2_->Add("z", kTypeValue, "9", 4u);
// Test Prev() when one child iterator has more rows inserted // Test Prev() when one child iterator has more rows inserted
@ -2154,7 +2156,7 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace5) {
rocksdb::SyncPoint::GetInstance()->DisableProcessing(); rocksdb::SyncPoint::GetInstance()->DisableProcessing();
} }
TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace6) { TEST_P(DBIterWithMergeIterTest, InnerMergeIteratorDataRace6) {
internal_iter2_->Add("z", kTypeValue, "9", 4u); internal_iter2_->Add("z", kTypeValue, "9", 4u);
// Test Prev() when one child iterator has more rows inserted // Test Prev() when one child iterator has more rows inserted
@ -2200,7 +2202,7 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace6) {
rocksdb::SyncPoint::GetInstance()->DisableProcessing(); rocksdb::SyncPoint::GetInstance()->DisableProcessing();
} }
TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace7) { TEST_P(DBIterWithMergeIterTest, InnerMergeIteratorDataRace7) {
internal_iter1_->Add("u", kTypeValue, "10", 4u); internal_iter1_->Add("u", kTypeValue, "10", 4u);
internal_iter1_->Add("v", kTypeValue, "11", 4u); internal_iter1_->Add("v", kTypeValue, "11", 4u);
internal_iter1_->Add("w", kTypeValue, "12", 4u); internal_iter1_->Add("w", kTypeValue, "12", 4u);
@ -2254,7 +2256,7 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace7) {
rocksdb::SyncPoint::GetInstance()->DisableProcessing(); rocksdb::SyncPoint::GetInstance()->DisableProcessing();
} }
TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace8) { TEST_P(DBIterWithMergeIterTest, InnerMergeIteratorDataRace8) {
// internal_iter1_: a, f, g // internal_iter1_: a, f, g
// internal_iter2_: a, b, c, d, adding (z) // internal_iter2_: a, b, c, d, adding (z)
internal_iter2_->Add("z", kTypeValue, "9", 4u); internal_iter2_->Add("z", kTypeValue, "9", 4u);
@ -2290,6 +2292,10 @@ TEST_F(DBIterWithMergeIterTest, InnerMergeIteratorDataRace8) {
rocksdb::SyncPoint::GetInstance()->DisableProcessing(); rocksdb::SyncPoint::GetInstance()->DisableProcessing();
} }
INSTANTIATE_TEST_CASE_P(InnerMergeIteratorDataRaceInstance,
DBIterWithMergeIterTest, ::testing::Bool());
} // namespace rocksdb } // namespace rocksdb
int main(int argc, char** argv) { int main(int argc, char** argv) {