From 4a60cb20ad384e9a847e945f46493a47691019ae Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 22 Jul 2020 15:02:10 -0700 Subject: [PATCH] Fix bug in MultiRead() coalescing introduced in 4fc216649d (#6446). (#6979) Summary: TryMerge() overzealously creates one huge file read request in an attempt to merge smaller disjoint requests. For example, ~30 input requests of ~100 bytes output as 1 request of 100 MiB causing alarmingly large read throughputs to be repeatedly observed by the environment. Signed-off-by: Jason Volk Pull Request resolved: https://github.com/facebook/rocksdb/pull/6979 Reviewed By: siying Differential Revision: D22668892 Pulled By: cheng-chang fbshipit-source-id: 7506fe9621b7f1a747dadf6b8ddb1b1a141c1937 --- file/random_access_file_reader.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/file/random_access_file_reader.cc b/file/random_access_file_reader.cc index ac767d270..c6d1db7ed 100644 --- a/file/random_access_file_reader.cc +++ b/file/random_access_file_reader.cc @@ -194,7 +194,7 @@ bool TryMerge(FSReadRequest* dest, const FSReadRequest& src) { size_t src_offset = static_cast(src.offset); size_t dest_end = End(*dest); size_t src_end = End(src); - if (std::max(dest_offset, dest_offset) > std::min(dest_end, src_end)) { + if (std::max(dest_offset, src_offset) > std::min(dest_end, src_end)) { return false; } dest->offset = static_cast(std::min(dest_offset, src_offset));