@ -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 ) {