@@ -886,6 +886,11 @@ Status DBImpl::Recover(
886
886
return s;
887
887
}
888
888
889
+ s = env_->NewDirectory (dbname_, &db_directory_);
890
+ if (!s.ok ()) {
891
+ return s;
892
+ }
893
+
889
894
s = env_->LockFile (LockFileName (dbname_), &db_lock_);
890
895
if (!s.ok ()) {
891
896
return s;
@@ -1178,6 +1183,9 @@ Status DBImpl::WriteLevel0Table(std::vector<MemTable*> &mems, VersionEdit* edit,
1178
1183
(unsigned long ) meta.number ,
1179
1184
(unsigned long ) meta.file_size ,
1180
1185
s.ToString ().c_str ());
1186
+ if (!options_.disableDataSync ) {
1187
+ db_directory_->Fsync ();
1188
+ }
1181
1189
mutex_.Lock ();
1182
1190
}
1183
1191
base->Unref ();
@@ -1272,8 +1280,8 @@ Status DBImpl::FlushMemTableToOutputFile(bool* madeProgress,
1272
1280
1273
1281
// Replace immutable memtable with the generated Table
1274
1282
s = imm_.InstallMemtableFlushResults (
1275
- mems, versions_.get (), s, &mutex_, options_.info_log .get (),
1276
- file_number, pending_outputs_, &deletion_state.memtables_to_free );
1283
+ mems, versions_.get (), s, &mutex_, options_.info_log .get (), file_number ,
1284
+ pending_outputs_, &deletion_state.memtables_to_free , db_directory_. get () );
1277
1285
1278
1286
if (s.ok ()) {
1279
1287
InstallSuperVersion (deletion_state);
@@ -1401,7 +1409,7 @@ Status DBImpl::ReFitLevel(int level, int target_level) {
1401
1409
Log (options_.info_log , " Apply version edit:\n %s" ,
1402
1410
edit.DebugString ().data ());
1403
1411
1404
- status = versions_->LogAndApply (&edit, &mutex_);
1412
+ status = versions_->LogAndApply (&edit, &mutex_, db_directory_. get () );
1405
1413
superversion_to_free = InstallSuperVersion (new_superversion);
1406
1414
new_superversion = nullptr ;
1407
1415
@@ -1974,7 +1982,7 @@ Status DBImpl::BackgroundCompaction(bool* madeProgress,
1974
1982
c->edit ()->AddFile (c->level () + 1 , f->number , f->file_size ,
1975
1983
f->smallest , f->largest ,
1976
1984
f->smallest_seqno , f->largest_seqno );
1977
- status = versions_->LogAndApply (c->edit (), &mutex_);
1985
+ status = versions_->LogAndApply (c->edit (), &mutex_, db_directory_. get () );
1978
1986
InstallSuperVersion (deletion_state);
1979
1987
Version::LevelSummaryStorage tmp;
1980
1988
Log (options_.info_log , " Moved #%lld to level-%d %lld bytes %s: %s\n " ,
@@ -2222,7 +2230,8 @@ Status DBImpl::InstallCompactionResults(CompactionState* compact) {
2222
2230
compact->compaction ->output_level (), out.number , out.file_size ,
2223
2231
out.smallest , out.largest , out.smallest_seqno , out.largest_seqno );
2224
2232
}
2225
- return versions_->LogAndApply (compact->compaction ->edit (), &mutex_);
2233
+ return versions_->LogAndApply (compact->compaction ->edit (), &mutex_,
2234
+ db_directory_.get ());
2226
2235
}
2227
2236
2228
2237
//
@@ -2595,6 +2604,9 @@ Status DBImpl::DoCompactionWork(CompactionState* compact,
2595
2604
}
2596
2605
input.reset ();
2597
2606
2607
+ if (!options_.disableDataSync ) {
2608
+ db_directory_->Fsync ();
2609
+ }
2598
2610
CompactionStats stats;
2599
2611
stats.micros = env_->NowMicros () - start_micros - imm_micros;
2600
2612
MeasureTime (options_.statistics .get (), COMPACTION_TIME, stats.micros );
@@ -3886,7 +3898,7 @@ Status DBImpl::DeleteFile(std::string name) {
3886
3898
}
3887
3899
}
3888
3900
edit.DeleteFile (level, number);
3889
- status = versions_->LogAndApply (&edit, &mutex_);
3901
+ status = versions_->LogAndApply (&edit, &mutex_, db_directory_. get () );
3890
3902
if (status.ok ()) {
3891
3903
InstallSuperVersion (deletion_state);
3892
3904
}
@@ -4032,7 +4044,8 @@ Status DB::OpenWithColumnFamilies(
4032
4044
edit.SetLogNumber (new_log_number);
4033
4045
impl->logfile_number_ = new_log_number;
4034
4046
impl->log_ .reset (new log ::Writer (std::move (lfile)));
4035
- s = impl->versions_ ->LogAndApply (&edit, &impl->mutex_ );
4047
+ s = impl->versions_ ->LogAndApply (&edit, &impl->mutex_ ,
4048
+ impl->db_directory_ .get ());
4036
4049
}
4037
4050
if (s.ok ()) {
4038
4051
// set column family handles
@@ -4053,6 +4066,7 @@ Status DB::OpenWithColumnFamilies(
4053
4066
impl->DeleteObsoleteFiles ();
4054
4067
impl->MaybeScheduleFlushOrCompaction ();
4055
4068
impl->MaybeScheduleLogDBDeployStats ();
4069
+ s = impl->db_directory_ ->Fsync ();
4056
4070
}
4057
4071
}
4058
4072
0 commit comments