From 9272e12f19c4470d05993b4e1edeb9e3d3984ad8 Mon Sep 17 00:00:00 2001 From: Aaron Gao Date: Fri, 17 Mar 2017 11:25:01 -0700 Subject: [PATCH] avoid ftruncate twice in buffered io Summary: in buffered io, the filesize_ is the real size. Closes https://github.com/facebook/rocksdb/pull/1991 Differential Revision: D4711433 Pulled By: lightmark fbshipit-source-id: ad604b9 --- util/file_reader_writer.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/util/file_reader_writer.cc b/util/file_reader_writer.cc index dcf72531c..5e8e8d631 100644 --- a/util/file_reader_writer.cc +++ b/util/file_reader_writer.cc @@ -184,11 +184,14 @@ Status WritableFileWriter::Close() { s = Flush(); // flush cache to OS + Status interim; // In direct I/O mode we write whole pages so // we need to let the file know where data ends. - Status interim = writable_file_->Truncate(filesize_); - if (!interim.ok() && s.ok()) { - s = interim; + if (use_direct_io()) { + interim = writable_file_->Truncate(filesize_); + if (!interim.ok() && s.ok()) { + s = interim; + } } TEST_KILL_RANDOM("WritableFileWriter::Close:0", rocksdb_kill_odds);