@ -465,6 +465,8 @@ static auto FLAGS_compaction_fadvice_e =
DEFINE_bool ( use_tailing_iterator , false ,
DEFINE_bool ( use_tailing_iterator , false ,
" Use tailing iterator to access a series of keys instead of get " ) ;
" Use tailing iterator to access a series of keys instead of get " ) ;
DEFINE_int64 ( iter_refresh_interval_us , - 1 ,
" How often to refresh iterators. Disable refresh when -1 " ) ;
DEFINE_bool ( use_adaptive_mutex , rocksdb : : Options ( ) . use_adaptive_mutex ,
DEFINE_bool ( use_adaptive_mutex , rocksdb : : Options ( ) . use_adaptive_mutex ,
" Use adaptive mutex " ) ;
" Use adaptive mutex " ) ;
@ -2009,12 +2011,31 @@ class Benchmark {
multi_iters . push_back ( db - > NewIterator ( options ) ) ;
multi_iters . push_back ( db - > NewIterator ( options ) ) ;
}
}
}
}
uint64_t last_refresh = FLAGS_env - > NowMicros ( ) ;
Slice key = AllocateKey ( ) ;
Slice key = AllocateKey ( ) ;
std : : unique_ptr < const char [ ] > key_guard ( key . data ( ) ) ;
std : : unique_ptr < const char [ ] > key_guard ( key . data ( ) ) ;
Duration duration ( FLAGS_duration , reads_ ) ;
Duration duration ( FLAGS_duration , reads_ ) ;
while ( ! duration . Done ( 1 ) ) {
while ( ! duration . Done ( 1 ) ) {
if ( ! FLAGS_use_tailing_iterator & & FLAGS_iter_refresh_interval_us > = 0 ) {
uint64_t now = FLAGS_env - > NowMicros ( ) ;
if ( now - last_refresh > ( uint64_t ) FLAGS_iter_refresh_interval_us ) {
if ( db_ ! = nullptr ) {
delete single_iter ;
single_iter = db_ - > NewIterator ( options ) ;
} else {
for ( auto iter : multi_iters ) {
delete iter ;
}
multi_iters . clear ( ) ;
for ( DB * db : multi_dbs_ ) {
multi_iters . push_back ( db - > NewIterator ( options ) ) ;
}
}
}
last_refresh = now ;
}
// Pick a Iterator to use
// Pick a Iterator to use
Iterator * iter_to_use = single_iter ;
Iterator * iter_to_use = single_iter ;
if ( single_iter = = nullptr ) {
if ( single_iter = = nullptr ) {