From d61dd8d854f84d15e1c74c23ad118e09d2d8a684 Mon Sep 17 00:00:00 2001 From: pengxianyu Date: Fri, 26 Aug 2022 16:09:05 +0800 Subject: [PATCH] fix cache bug --- be/src/io/cache/sub_file_cache.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/be/src/io/cache/sub_file_cache.cpp b/be/src/io/cache/sub_file_cache.cpp index 8bf75f9f38bf86..fc4f5155161611 100644 --- a/be/src/io/cache/sub_file_cache.cpp +++ b/be/src/io/cache/sub_file_cache.cpp @@ -71,7 +71,7 @@ Status SubFileCache::read_at(size_t offset, Slice result, size_t* bytes_read) { if (offset_begin + req_size > _remote_file_reader->size()) { req_size = _remote_file_reader->size() - offset_begin; } - RETURN_IF_ERROR(_generate_cache_reader(*iter, req_size)); + RETURN_IF_ERROR(_generate_cache_reader(offset_begin, req_size)); } } _cache_file_size = _get_cache_file_size(); @@ -82,7 +82,6 @@ Status SubFileCache::read_at(size_t offset, Slice result, size_t* bytes_read) { for (vector::const_iterator iter = need_cache_offsets.cbegin(); iter != need_cache_offsets.cend(); ++iter) { size_t offset_begin = *iter; - size_t req_size = config::max_sub_cache_file_size; if (_cache_file_readers.find(*iter) == _cache_file_readers.end()) { LOG(ERROR) << "Local cache file reader can't be found: " << offset_begin << ", " << offset_begin; @@ -91,6 +90,7 @@ Status SubFileCache::read_at(size_t offset, Slice result, size_t* bytes_read) { if (offset_begin < offset) { offset_begin = offset; } + size_t req_size = *iter + config::max_sub_cache_file_size - offset_begin; if (offset + result.size < *iter + config::max_sub_cache_file_size) { req_size = offset + result.size - offset_begin; } @@ -157,7 +157,7 @@ Status SubFileCache::_generate_cache_reader(size_t offset, size_t req_size) { Slice file_slice(file_buf.get(), req_size); size_t bytes_read = 0; RETURN_NOT_OK_STATUS_WITH_WARN( - _remote_file_reader->read_at(0, file_slice, &bytes_read), + _remote_file_reader->read_at(offset, file_slice, &bytes_read), fmt::format("read remote file failed. {}. offset: {}, size: {}", _remote_file_reader->path().native(), offset, req_size)); if (bytes_read != req_size) {