@@ -261,7 +261,6 @@ DBImpl::DBImpl(const Options& options, const std::string& dbname)
261
261
options_(SanitizeOptions(dbname, &internal_comparator_,
262
262
&internal_filter_policy_, options)),
263
263
internal_filter_policy_(options.filter_policy),
264
- owns_info_log_(options_.info_log != options.info_log),
265
264
db_lock_(nullptr ),
266
265
mutex_(options.use_adaptive_mutex),
267
266
shutting_down_(nullptr ),
@@ -377,7 +376,7 @@ uint64_t DBImpl::TEST_Current_Manifest_FileNo() {
377
376
378
377
Status DBImpl::NewDB () {
379
378
VersionEdit new_db;
380
- new_db.SetComparatorName (user_comparator ()->Name ());
379
+ new_db.SetComparatorName (internal_comparator_. user_comparator ()->Name ());
381
380
new_db.SetLogNumber (0 );
382
381
new_db.SetNextFile (2 );
383
382
new_db.SetLastSequence (0 );
@@ -989,7 +988,7 @@ Status DBImpl::RecoverLogFile(uint64_t log_number, SequenceNumber* max_sequence,
989
988
auto iter = version_edits.find (cfd->GetID ());
990
989
assert (iter != version_edits.end ());
991
990
VersionEdit* edit = &iter->second ;
992
- status = WriteLevel0TableForRecovery (cfd->mem (), edit);
991
+ status = WriteLevel0TableForRecovery (cfd, cfd ->mem (), edit);
993
992
// we still want to clear the memtable, even if the recovery failed
994
993
cfd->CreateNewMemtable ();
995
994
if (!status.ok ()) {
@@ -1020,7 +1019,7 @@ Status DBImpl::RecoverLogFile(uint64_t log_number, SequenceNumber* max_sequence,
1020
1019
1021
1020
// flush the final memtable (if non-empty)
1022
1021
if (cfd->mem ()->GetFirstSequenceNumber () != 0 ) {
1023
- status = WriteLevel0TableForRecovery (cfd->mem (), edit);
1022
+ status = WriteLevel0TableForRecovery (cfd, cfd ->mem (), edit);
1024
1023
}
1025
1024
// we still want to clear the memtable, even if the recovery failed
1026
1025
cfd->CreateNewMemtable ();
@@ -1051,7 +1050,8 @@ Status DBImpl::RecoverLogFile(uint64_t log_number, SequenceNumber* max_sequence,
1051
1050
return status;
1052
1051
}
1053
1052
1054
- Status DBImpl::WriteLevel0TableForRecovery (MemTable* mem, VersionEdit* edit) {
1053
+ Status DBImpl::WriteLevel0TableForRecovery (ColumnFamilyData* cfd, MemTable* mem,
1054
+ VersionEdit* edit) {
1055
1055
mutex_.AssertHeld ();
1056
1056
const uint64_t start_micros = env_->NowMicros ();
1057
1057
FileMetaData meta;
@@ -1068,9 +1068,8 @@ Status DBImpl::WriteLevel0TableForRecovery(MemTable* mem, VersionEdit* edit) {
1068
1068
{
1069
1069
mutex_.Unlock ();
1070
1070
s = BuildTable (dbname_, env_, options_, storage_options_,
1071
- table_cache_.get (), iter, &meta,
1072
- user_comparator (), newest_snapshot,
1073
- earliest_seqno_in_memtable,
1071
+ table_cache_.get (), iter, &meta, cfd->user_comparator (),
1072
+ newest_snapshot, earliest_seqno_in_memtable,
1074
1073
GetCompressionFlush (options_));
1075
1074
LogFlush (options_.info_log );
1076
1075
mutex_.Lock ();
@@ -1134,9 +1133,9 @@ Status DBImpl::WriteLevel0Table(ColumnFamilyData* cfd,
1134
1133
(unsigned long )meta.number );
1135
1134
1136
1135
s = BuildTable (dbname_, env_, options_, storage_options_,
1137
- table_cache_.get (), iter, &meta,
1138
- user_comparator (), newest_snapshot ,
1139
- earliest_seqno_in_memtable, GetCompressionFlush (options_));
1136
+ table_cache_.get (), iter, &meta, cfd-> user_comparator (),
1137
+ newest_snapshot, earliest_seqno_in_memtable ,
1138
+ GetCompressionFlush (options_));
1140
1139
LogFlush (options_.info_log );
1141
1140
delete iter;
1142
1141
Log (options_.info_log , " Level-0 flush table #%lu: %lu bytes %s" ,
@@ -2339,7 +2338,7 @@ Status DBImpl::DoCompactionWork(CompactionState* compact,
2339
2338
SequenceNumber visible_in_snapshot = kMaxSequenceNumber ;
2340
2339
std::string compaction_filter_value;
2341
2340
std::vector<char > delete_key; // for compaction filter
2342
- MergeHelper merge (user_comparator (), options_.merge_operator .get (),
2341
+ MergeHelper merge (cfd-> user_comparator (), options_.merge_operator .get (),
2343
2342
options_.info_log .get (),
2344
2343
false /* internal key corruption is expected */ );
2345
2344
auto compaction_filter = cfd->options ()->compaction_filter ;
@@ -2390,8 +2389,8 @@ Status DBImpl::DoCompactionWork(CompactionState* compact,
2390
2389
visible_in_snapshot = kMaxSequenceNumber ;
2391
2390
} else {
2392
2391
if (!has_current_user_key ||
2393
- user_comparator ()->Compare (ikey.user_key ,
2394
- Slice (current_user_key)) != 0 ) {
2392
+ cfd-> user_comparator ()->Compare (ikey.user_key ,
2393
+ Slice (current_user_key)) != 0 ) {
2395
2394
// First occurrence of this user key
2396
2395
current_user_key.assign (ikey.user_key .data (), ikey.user_key .size ());
2397
2396
has_current_user_key = true ;
@@ -2759,7 +2758,7 @@ std::pair<Iterator*, Iterator*> DBImpl::GetTailingIteratorPair(
2759
2758
2760
2759
Iterator* mutable_iter = super_version->mem ->NewIterator (options);
2761
2760
// create a DBIter that only uses memtable content; see NewIterator()
2762
- mutable_iter = NewDBIterator (&dbname_, env_, options_, user_comparator (),
2761
+ mutable_iter = NewDBIterator (&dbname_, env_, options_, cfd-> user_comparator (),
2763
2762
mutable_iter, kMaxSequenceNumber );
2764
2763
2765
2764
std::vector<Iterator*> list;
@@ -2769,8 +2768,9 @@ std::pair<Iterator*, Iterator*> DBImpl::GetTailingIteratorPair(
2769
2768
NewMergingIterator (&cfd->internal_comparator (), &list[0 ], list.size ());
2770
2769
2771
2770
// create a DBIter that only uses memtable content; see NewIterator()
2772
- immutable_iter = NewDBIterator (&dbname_, env_, options_, user_comparator (),
2773
- immutable_iter, kMaxSequenceNumber );
2771
+ immutable_iter =
2772
+ NewDBIterator (&dbname_, env_, options_, cfd->user_comparator (),
2773
+ immutable_iter, kMaxSequenceNumber );
2774
2774
2775
2775
// register cleanups
2776
2776
mutable_iter->RegisterCleanup (CleanupIteratorState,
0 commit comments