@@ -113,14 +113,14 @@ Options SanitizeOptions(const std::string& dbname,
113113 return result;
114114}
115115
116- DBImpl::DBImpl (const Options& options , const std::string& dbname)
117- : env_(options .env),
118- internal_comparator_ (options .comparator),
119- internal_filter_policy_(options .filter_policy),
120- options_(SanitizeOptions(
121- dbname, &internal_comparator_, &internal_filter_policy_, options )),
122- owns_info_log_(options_.info_log != options .info_log),
123- owns_cache_(options_.block_cache != options .block_cache),
116+ DBImpl::DBImpl (const Options& raw_options , const std::string& dbname)
117+ : env_(raw_options .env),
118+ internal_comparator_ (raw_options .comparator),
119+ internal_filter_policy_(raw_options .filter_policy),
120+ options_(SanitizeOptions(dbname, &internal_comparator_,
121+ &internal_filter_policy_, raw_options )),
122+ owns_info_log_(options_.info_log != raw_options .info_log),
123+ owns_cache_(options_.block_cache != raw_options .block_cache),
124124 dbname_(dbname),
125125 db_lock_(NULL ),
126126 shutting_down_(NULL ),
@@ -130,6 +130,7 @@ DBImpl::DBImpl(const Options& options, const std::string& dbname)
130130 logfile_(NULL ),
131131 logfile_number_(0 ),
132132 log_(NULL ),
133+ seed_(0 ),
133134 tmp_batch_(new WriteBatch),
134135 bg_compaction_scheduled_(false ),
135136 manual_compaction_(NULL ),
@@ -138,7 +139,7 @@ DBImpl::DBImpl(const Options& options, const std::string& dbname)
138139 has_imm_.Release_Store (NULL );
139140
140141 // Reserve ten files or so for other uses and give the rest to TableCache.
141- const int table_cache_size = options .max_open_files - kNumNonTableCacheFiles ;
142+ const int table_cache_size = options_ .max_open_files - kNumNonTableCacheFiles ;
142143 table_cache_ = new TableCache (dbname_, &options_, table_cache_size);
143144
144145 versions_ = new VersionSet (dbname_, &options_, table_cache_,
@@ -1027,7 +1028,8 @@ static void CleanupIteratorState(void* arg1, void* arg2) {
10271028} // namespace
10281029
10291030Iterator* DBImpl::NewInternalIterator (const ReadOptions& options,
1030- SequenceNumber* latest_snapshot) {
1031+ SequenceNumber* latest_snapshot,
1032+ uint32_t * seed) {
10311033 IterState* cleanup = new IterState;
10321034 mutex_.Lock ();
10331035 *latest_snapshot = versions_->LastSequence ();
@@ -1051,13 +1053,15 @@ Iterator* DBImpl::NewInternalIterator(const ReadOptions& options,
10511053 cleanup->version = versions_->current ();
10521054 internal_iter->RegisterCleanup (CleanupIteratorState, cleanup, NULL );
10531055
1056+ *seed = ++seed_;
10541057 mutex_.Unlock ();
10551058 return internal_iter;
10561059}
10571060
10581061Iterator* DBImpl::TEST_NewInternalIterator () {
10591062 SequenceNumber ignored;
1060- return NewInternalIterator (ReadOptions (), &ignored);
1063+ uint32_t ignored_seed;
1064+ return NewInternalIterator (ReadOptions (), &ignored, &ignored_seed);
10611065}
10621066
10631067int64_t DBImpl::TEST_MaxNextLevelOverlappingBytes () {
@@ -1114,12 +1118,21 @@ Status DBImpl::Get(const ReadOptions& options,
11141118
11151119Iterator* DBImpl::NewIterator (const ReadOptions& options) {
11161120 SequenceNumber latest_snapshot;
1117- Iterator* internal_iter = NewInternalIterator (options, &latest_snapshot);
1121+ uint32_t seed;
1122+ Iterator* iter = NewInternalIterator (options, &latest_snapshot, &seed);
11181123 return NewDBIterator (
1119- &dbname_, env_, user_comparator (), internal_iter ,
1124+ this , user_comparator (), iter ,
11201125 (options.snapshot != NULL
11211126 ? reinterpret_cast <const SnapshotImpl*>(options.snapshot )->number_
1122- : latest_snapshot));
1127+ : latest_snapshot),
1128+ seed);
1129+ }
1130+
1131+ void DBImpl::RecordReadSample (Slice key) {
1132+ MutexLock l (&mutex_);
1133+ if (versions_->current ()->RecordReadSample (key)) {
1134+ MaybeScheduleCompaction ();
1135+ }
11231136}
11241137
11251138const Snapshot* DBImpl::GetSnapshot () {
0 commit comments