@ -309,31 +309,31 @@ class DBTest {
protected :
protected :
// Sequence of option configurations to try
// Sequence of option configurations to try
enum OptionConfig {
enum OptionConfig {
kBlockBasedTableWithWholeKeyHashIndex ,
kDefault = 0 ,
kDefault ,
kBlockBasedTableWithPrefixHashIndex = 1 ,
kBlockBasedTableWithPrefixHashIndex ,
kBlockBasedTableWithWholeKeyHashIndex = 2 ,
kPlainTableFirstBytePrefix ,
kPlainTableFirstBytePrefix = 3 ,
kPlainTableAllBytesPrefix ,
kPlainTableAllBytesPrefix = 4 ,
kVectorRep ,
kVectorRep = 5 ,
kHashLinkList ,
kHashLinkList = 6 ,
kHashCuckoo ,
kHashCuckoo = 7 ,
kMergePut ,
kMergePut = 8 ,
kFilter ,
kFilter = 9 ,
kUncompressed ,
kUncompressed = 10 ,
kNumLevel_3 ,
kNumLevel_3 = 11 ,
kDBLogDir ,
kDBLogDir = 12 ,
kWalDir ,
kWalDir = 13 ,
kManifestFileSize ,
kManifestFileSize = 14 ,
kCompactOnFlush ,
kCompactOnFlush = 15 ,
kPerfOptions ,
kPerfOptions = 16 ,
kDeletesFilterFirst ,
kDeletesFilterFirst = 17 ,
kHashSkipList ,
kHashSkipList = 18 ,
kUniversalCompaction ,
kUniversalCompaction = 19 ,
kCompressedBlockCache ,
kCompressedBlockCache = 20 ,
kInfiniteMaxOpenFiles ,
kInfiniteMaxOpenFiles = 21 ,
kxxHashChecksum ,
kxxHashChecksum = 22 ,
kFIFOCompaction ,
kFIFOCompaction = 23 ,
kEnd
kEnd = 24
} ;
} ;
int option_config_ ;
int option_config_ ;
@ -405,7 +405,7 @@ class DBTest {
| | option_config_ = = kPlainTableFirstBytePrefix ) ) {
| | option_config_ = = kPlainTableFirstBytePrefix ) ) {
continue ;
continue ;
}
}
if ( ( skip_mask & kSkipPlainTable ) & &
if ( ( skip_mask & kSkipHashIndex ) & &
( option_config_ = = kBlockBasedTableWithPrefixHashIndex | |
( option_config_ = = kBlockBasedTableWithPrefixHashIndex | |
option_config_ = = kBlockBasedTableWithWholeKeyHashIndex ) ) {
option_config_ = = kBlockBasedTableWithWholeKeyHashIndex ) ) {
continue ;
continue ;
@ -4809,7 +4809,7 @@ TEST(DBTest, ApproximateSizes) {
}
}
// ApproximateOffsetOf() is not yet implemented in plain table format.
// ApproximateOffsetOf() is not yet implemented in plain table format.
} while ( ChangeOptions ( kSkipUniversalCompaction | kSkipFIFOCompaction |
} while ( ChangeOptions ( kSkipUniversalCompaction | kSkipFIFOCompaction |
kSkipPlainTable ) ) ;
kSkipPlainTable | kSkipHashIndex ) ) ;
}
}
TEST ( DBTest , ApproximateSizes_MixOfSmallAndLarge ) {
TEST ( DBTest , ApproximateSizes_MixOfSmallAndLarge ) {
@ -6759,7 +6759,14 @@ class ModelDB: public DB {
iter_ = map_ - > lower_bound ( k . ToString ( ) ) ;
iter_ = map_ - > lower_bound ( k . ToString ( ) ) ;
}
}
virtual void Next ( ) { + + iter_ ; }
virtual void Next ( ) { + + iter_ ; }
virtual void Prev ( ) { - - iter_ ; }
virtual void Prev ( ) {
if ( iter_ = = map_ - > begin ( ) ) {
iter_ = map_ - > end ( ) ;
return ;
}
- - iter_ ;
}
virtual Slice key ( ) const { return iter_ - > first ; }
virtual Slice key ( ) const { return iter_ - > first ; }
virtual Slice value ( ) const { return iter_ - > second ; }
virtual Slice value ( ) const { return iter_ - > second ; }
virtual Status status ( ) const { return Status : : OK ( ) ; }
virtual Status status ( ) const { return Status : : OK ( ) ; }
@ -6887,8 +6894,14 @@ TEST(DBTest, Randomized) {
}
}
if ( ( step % 100 ) = = 0 ) {
if ( ( step % 100 ) = = 0 ) {
ASSERT_TRUE ( CompareIterators ( step , & model , db_ , nullptr , nullptr ) ) ;
// For DB instances that use the hash index + block-based table, the
ASSERT_TRUE ( CompareIterators ( step , & model , db_ , model_snap , db_snap ) ) ;
// iterator will be invalid right when seeking a non-existent key, right
// than return a key that is close to it.
if ( option_config_ ! = kBlockBasedTableWithWholeKeyHashIndex & &
option_config_ ! = kBlockBasedTableWithPrefixHashIndex ) {
ASSERT_TRUE ( CompareIterators ( step , & model , db_ , nullptr , nullptr ) ) ;
ASSERT_TRUE ( CompareIterators ( step , & model , db_ , model_snap , db_snap ) ) ;
}
// Save a snapshot from each DB this time that we'll use next
// Save a snapshot from each DB this time that we'll use next
// time we compare things, to make sure the current state is
// time we compare things, to make sure the current state is
@ -6902,12 +6915,18 @@ TEST(DBTest, Randomized) {
model_snap = model . GetSnapshot ( ) ;
model_snap = model . GetSnapshot ( ) ;
db_snap = db_ - > GetSnapshot ( ) ;
db_snap = db_ - > GetSnapshot ( ) ;
}
}
if ( ( step % 2000 ) = = 0 ) {
fprintf ( stdout ,
" DBTest.Randomized, option ID: %d, step: %d out of %d \n " ,
option_config_ , step , N ) ;
}
}
}
if ( model_snap ! = nullptr ) model . ReleaseSnapshot ( model_snap ) ;
if ( model_snap ! = nullptr ) model . ReleaseSnapshot ( model_snap ) ;
if ( db_snap ! = nullptr ) db_ - > ReleaseSnapshot ( db_snap ) ;
if ( db_snap ! = nullptr ) db_ - > ReleaseSnapshot ( db_snap ) ;
// skip cuckoo hash as it does not support snapshot.
// skip cuckoo hash as it does not support snapshot.
} while ( ChangeOptions ( kSkipDeletesFilterFirst |
} while ( ChangeOptions ( kSkipDeletesFilterFirst | kSkipNoSeekToLast |
kSkipNoSeekToLast | kSkipHashCuckoo ) ) ;
kSkipHashCuckoo ) ) ;
}
}
TEST ( DBTest , MultiGetSimple ) {
TEST ( DBTest , MultiGetSimple ) {