Skip to content

Commit 5e2c4fe

Browse files
committed
Get rid of DBImpl::user_comparator()
Summary: user_comparator() is a Column Family property, not DBImpl Test Plan: make check Reviewers: dhruba, haobo, kailiu, sdong CC: leveldb Differential Revision: https://reviews.facebook.net/D15855
1 parent 0e22bad commit 5e2c4fe

File tree

3 files changed

+20
-24
lines changed

3 files changed

+20
-24
lines changed

db/db_impl.cc

+17-17
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,6 @@ DBImpl::DBImpl(const Options& options, const std::string& dbname)
261261
options_(SanitizeOptions(dbname, &internal_comparator_,
262262
&internal_filter_policy_, options)),
263263
internal_filter_policy_(options.filter_policy),
264-
owns_info_log_(options_.info_log != options.info_log),
265264
db_lock_(nullptr),
266265
mutex_(options.use_adaptive_mutex),
267266
shutting_down_(nullptr),
@@ -377,7 +376,7 @@ uint64_t DBImpl::TEST_Current_Manifest_FileNo() {
377376

378377
Status DBImpl::NewDB() {
379378
VersionEdit new_db;
380-
new_db.SetComparatorName(user_comparator()->Name());
379+
new_db.SetComparatorName(internal_comparator_.user_comparator()->Name());
381380
new_db.SetLogNumber(0);
382381
new_db.SetNextFile(2);
383382
new_db.SetLastSequence(0);
@@ -989,7 +988,7 @@ Status DBImpl::RecoverLogFile(uint64_t log_number, SequenceNumber* max_sequence,
989988
auto iter = version_edits.find(cfd->GetID());
990989
assert(iter != version_edits.end());
991990
VersionEdit* edit = &iter->second;
992-
status = WriteLevel0TableForRecovery(cfd->mem(), edit);
991+
status = WriteLevel0TableForRecovery(cfd, cfd->mem(), edit);
993992
// we still want to clear the memtable, even if the recovery failed
994993
cfd->CreateNewMemtable();
995994
if (!status.ok()) {
@@ -1020,7 +1019,7 @@ Status DBImpl::RecoverLogFile(uint64_t log_number, SequenceNumber* max_sequence,
10201019

10211020
// flush the final memtable (if non-empty)
10221021
if (cfd->mem()->GetFirstSequenceNumber() != 0) {
1023-
status = WriteLevel0TableForRecovery(cfd->mem(), edit);
1022+
status = WriteLevel0TableForRecovery(cfd, cfd->mem(), edit);
10241023
}
10251024
// we still want to clear the memtable, even if the recovery failed
10261025
cfd->CreateNewMemtable();
@@ -1051,7 +1050,8 @@ Status DBImpl::RecoverLogFile(uint64_t log_number, SequenceNumber* max_sequence,
10511050
return status;
10521051
}
10531052

1054-
Status DBImpl::WriteLevel0TableForRecovery(MemTable* mem, VersionEdit* edit) {
1053+
Status DBImpl::WriteLevel0TableForRecovery(ColumnFamilyData* cfd, MemTable* mem,
1054+
VersionEdit* edit) {
10551055
mutex_.AssertHeld();
10561056
const uint64_t start_micros = env_->NowMicros();
10571057
FileMetaData meta;
@@ -1068,9 +1068,8 @@ Status DBImpl::WriteLevel0TableForRecovery(MemTable* mem, VersionEdit* edit) {
10681068
{
10691069
mutex_.Unlock();
10701070
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,
10741073
GetCompressionFlush(options_));
10751074
LogFlush(options_.info_log);
10761075
mutex_.Lock();
@@ -1134,9 +1133,9 @@ Status DBImpl::WriteLevel0Table(ColumnFamilyData* cfd,
11341133
(unsigned long)meta.number);
11351134

11361135
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_));
11401139
LogFlush(options_.info_log);
11411140
delete iter;
11421141
Log(options_.info_log, "Level-0 flush table #%lu: %lu bytes %s",
@@ -2339,7 +2338,7 @@ Status DBImpl::DoCompactionWork(CompactionState* compact,
23392338
SequenceNumber visible_in_snapshot = kMaxSequenceNumber;
23402339
std::string compaction_filter_value;
23412340
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(),
23432342
options_.info_log.get(),
23442343
false /* internal key corruption is expected */);
23452344
auto compaction_filter = cfd->options()->compaction_filter;
@@ -2390,8 +2389,8 @@ Status DBImpl::DoCompactionWork(CompactionState* compact,
23902389
visible_in_snapshot = kMaxSequenceNumber;
23912390
} else {
23922391
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) {
23952394
// First occurrence of this user key
23962395
current_user_key.assign(ikey.user_key.data(), ikey.user_key.size());
23972396
has_current_user_key = true;
@@ -2759,7 +2758,7 @@ std::pair<Iterator*, Iterator*> DBImpl::GetTailingIteratorPair(
27592758

27602759
Iterator* mutable_iter = super_version->mem->NewIterator(options);
27612760
// 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(),
27632762
mutable_iter, kMaxSequenceNumber);
27642763

27652764
std::vector<Iterator*> list;
@@ -2769,8 +2768,9 @@ std::pair<Iterator*, Iterator*> DBImpl::GetTailingIteratorPair(
27692768
NewMergingIterator(&cfd->internal_comparator(), &list[0], list.size());
27702769

27712770
// 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);
27742774

27752775
// register cleanups
27762776
mutable_iter->RegisterCleanup(CleanupIteratorState,

db/db_impl.h

+2-6
Original file line numberDiff line numberDiff line change
@@ -253,10 +253,6 @@ class DBImpl : public DB {
253253
const InternalKeyComparator internal_comparator_;
254254
const Options options_; // options_.comparator == &internal_comparator_
255255

256-
const Comparator* user_comparator() const {
257-
return internal_comparator_.user_comparator();
258-
}
259-
260256
Iterator* NewInternalIterator(const ReadOptions&, ColumnFamilyData* cfd,
261257
SuperVersion* super_version);
262258

@@ -294,7 +290,8 @@ class DBImpl : public DB {
294290
// database is opened) and is heavyweight because it holds the mutex
295291
// for the entire period. The second method WriteLevel0Table supports
296292
// concurrent flush memtables to storage.
297-
Status WriteLevel0TableForRecovery(MemTable* mem, VersionEdit* edit);
293+
Status WriteLevel0TableForRecovery(ColumnFamilyData* cfd, MemTable* mem,
294+
VersionEdit* edit);
298295
Status WriteLevel0Table(ColumnFamilyData* cfd, std::vector<MemTable*>& mems,
299296
VersionEdit* edit, uint64_t* filenumber);
300297

@@ -375,7 +372,6 @@ class DBImpl : public DB {
375372

376373
// Constant after construction
377374
const InternalFilterPolicy internal_filter_policy_;
378-
bool owns_info_log_;
379375

380376
// table_cache_ provides its own synchronization
381377
unique_ptr<TableCache> table_cache_;

db/db_impl_readonly.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ Iterator* DBImplReadOnly::NewIterator(const ReadOptions& options,
7979
SequenceNumber latest_snapshot = versions_->LastSequence();
8080
Iterator* internal_iter = NewInternalIterator(options, cfd, super_version);
8181
return NewDBIterator(
82-
&dbname_, env_, options_, user_comparator(), internal_iter,
82+
&dbname_, env_, options_, cfd->user_comparator(), internal_iter,
8383
(options.snapshot != nullptr
8484
? reinterpret_cast<const SnapshotImpl*>(options.snapshot)->number_
8585
: latest_snapshot));

0 commit comments

Comments
 (0)