]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
Direct I/O writable file should do fsync in Close()
authorSiying Dong <siying.d@fb.com>
Wed, 14 Feb 2018 00:20:13 +0000 (16:20 -0800)
committersdong <siying.d@fb.com>
Wed, 14 Feb 2018 00:52:07 +0000 (16:52 -0800)
Summary:
We don't do fsync() after truncate in direct I/O writeable file (in fact we don't do any fsync ever). This can cause metadata not persistent to disk after the file is generated. We call it instead.
Closes https://github.com/facebook/rocksdb/pull/3500

Differential Revision: D6981482

Pulled By: siying

fbshipit-source-id: 7e2b591b7e5dd1b96fc0775515b8b9e6092980ef

util/file_reader_writer.cc

index f46b78fa06b0810ad964f15719231070ba98ce27..3fc02bee38b01a172e632d7e229fb6a771f12180 100644 (file)
@@ -239,6 +239,9 @@ Status WritableFileWriter::Close() {
   // we need to let the file know where data ends.
   if (use_direct_io()) {
     interim = writable_file_->Truncate(filesize_);
+    if (interim.ok()) {
+      interim = writable_file_->Fsync();
+    }
     if (!interim.ok() && s.ok()) {
       s = interim;
     }