@@ -1112,9 +1112,8 @@ Status DBImpl::WriteLevel0Table(ColumnFamilyData* cfd,
1112
1112
mutex_.Unlock ();
1113
1113
std::vector<Iterator*> memtables;
1114
1114
for (MemTable* m : mems) {
1115
- Log (options_.info_log ,
1116
- " Flushing memtable with log file: %lu\n " ,
1117
- (unsigned long )m->GetLogNumber ());
1115
+ Log (options_.info_log , " Flushing memtable with next log file: %lu\n " ,
1116
+ (unsigned long )m->GetNextLogNumber ());
1118
1117
memtables.push_back (m->NewIterator ());
1119
1118
}
1120
1119
Iterator* iter = NewMergingIterator (env_, &cfd->internal_comparator (),
@@ -1206,11 +1205,6 @@ Status DBImpl::FlushMemTableToOutputFile(ColumnFamilyData* cfd,
1206
1205
edit->SetLogNumber (mems.back ()->GetNextLogNumber ());
1207
1206
edit->SetColumnFamily (cfd->GetID ());
1208
1207
1209
- std::vector<uint64_t > logs_to_delete;
1210
- for (auto mem : mems) {
1211
- logs_to_delete.push_back (mem->GetLogNumber ());
1212
- }
1213
-
1214
1208
// This will release and re-acquire the mutex.
1215
1209
Status s = WriteLevel0Table (cfd, mems, edit, &file_number);
1216
1210
@@ -1239,10 +1233,11 @@ Status DBImpl::FlushMemTableToOutputFile(ColumnFamilyData* cfd,
1239
1233
1240
1234
if (disable_delete_obsolete_files_ == 0 ) {
1241
1235
// add to deletion state
1242
- deletion_state.log_delete_files .insert (
1243
- deletion_state.log_delete_files .end (),
1244
- logs_to_delete.begin (),
1245
- logs_to_delete.end ());
1236
+ while (alive_log_files_.size () &&
1237
+ *alive_log_files_.begin () < versions_->MinLogNumber ()) {
1238
+ deletion_state.log_delete_files .push_back (*alive_log_files_.begin ());
1239
+ alive_log_files_.pop_front ();
1240
+ }
1246
1241
}
1247
1242
}
1248
1243
return s;
@@ -3589,12 +3584,14 @@ Status DBImpl::MakeRoomForWrite(ColumnFamilyData* cfd, bool force) {
3589
3584
logfile_number_ = new_log_number;
3590
3585
log_.reset (new log ::Writer (std::move (lfile)));
3591
3586
cfd->mem ()->SetNextLogNumber (logfile_number_);
3587
+ // TODO also update log number for all column families with empty
3588
+ // memtables (i.e. don't have data in the old log)
3592
3589
cfd->imm ()->Add (cfd->mem ());
3593
3590
if (force) {
3594
3591
cfd->imm ()->FlushRequested ();
3595
3592
}
3596
3593
new_mem->Ref ();
3597
- new_mem-> SetLogNumber (logfile_number_);
3594
+ alive_log_files_. push_back (logfile_number_);
3598
3595
cfd->SetMemtable (new_mem);
3599
3596
Log (options_.info_log , " New memtable created with log file: #%lu\n " ,
3600
3597
(unsigned long )logfile_number_);
@@ -3936,7 +3933,7 @@ Status DB::Open(const DBOptions& db_options, const std::string& dbname,
3936
3933
if (s.ok ()) {
3937
3934
for (auto cfd : *impl->versions_ ->GetColumnFamilySet ()) {
3938
3935
delete cfd->InstallSuperVersion (new SuperVersion ());
3939
- cfd-> mem ()-> SetLogNumber (impl->logfile_number_ );
3936
+ impl-> alive_log_files_ . push_back (impl->logfile_number_ );
3940
3937
}
3941
3938
impl->DeleteObsoleteFiles ();
3942
3939
impl->MaybeScheduleFlushOrCompaction ();
0 commit comments