From: Aaron Gao Date: Wed, 26 Apr 2017 22:28:50 +0000 (-0700) Subject: fix WritableFile buffer size in direct IO X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2150cc1f3e2f8dcd9605451ebe624198808716f3;p=rocksdb.git fix WritableFile buffer size in direct IO Summary: �fix the buffer size in case of ppl use buffer size as their block_size. Closes https://github.com/facebook/rocksdb/pull/2198 Differential Revision: D4956878 Pulled By: lightmark fbshipit-source-id: 8bb0dc9c133887aadcd625d5261a3d1110b71473 --- diff --git a/include/rocksdb/options.h b/include/rocksdb/options.h index eaa201c6..b2ee1c0a 100644 --- a/include/rocksdb/options.h +++ b/include/rocksdb/options.h @@ -690,7 +690,9 @@ struct DBOptions { // This is the maximum buffer size that is used by WritableFileWriter. // On Windows, we need to maintain an aligned buffer for writes. - // We allow the buffer to grow until it's size hits the limit. + // We allow the buffer to grow until it's size hits the limit in buffered + // IO and fix the buffer size when using direct IO to ensure alignment of + // write requests if the logical sector size is unusual // // Default: 1024 * 1024 (1 MB) size_t writable_file_max_buffer_size = 1024 * 1024; diff --git a/util/file_reader_writer.h b/util/file_reader_writer.h index 39d475f0..bec31237 100644 --- a/util/file_reader_writer.h +++ b/util/file_reader_writer.h @@ -138,7 +138,9 @@ class WritableFileWriter { rate_limiter_(options.rate_limiter), stats_(stats) { buf_.Alignment(writable_file_->GetRequiredBufferAlignment()); - buf_.AllocateNewBuffer(std::min((size_t)65536, max_buffer_size_)); + buf_.AllocateNewBuffer(use_direct_io() + ? max_buffer_size_ + : std::min((size_t)65536, max_buffer_size_)); } WritableFileWriter(const WritableFileWriter&) = delete;