This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 9916324e9c [fix](FileCache) the logic of selecting the cache path is
reversed (#24277)
9916324e9c is described below
commit 9916324e9ca7f801759bcdaf3e5f44bc9ae8c7b9
Author: Ashin Gau <[email protected]>
AuthorDate: Wed Sep 13 13:25:07 2023 +0800
[fix](FileCache) the logic of selecting the cache path is reversed (#24277)
Bug was introduced by https://github.com/apache/doris/pull/23881/files
The logic of selecting the cache path is reversed, and BE will be crashed
when enable file cache.
---
be/src/io/cache/block/cached_remote_file_reader.cpp | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/be/src/io/cache/block/cached_remote_file_reader.cpp
b/be/src/io/cache/block/cached_remote_file_reader.cpp
index 86ecb14a75..4a23433086 100644
--- a/be/src/io/cache/block/cached_remote_file_reader.cpp
+++ b/be/src/io/cache/block/cached_remote_file_reader.cpp
@@ -52,7 +52,10 @@
CachedRemoteFileReader::CachedRemoteFileReader(FileReaderSPtr remote_file_reader
// Use path and modification time to build cache key
std::string unique_path = fmt::format("{}:{}", path().native(),
opts.mtime);
_cache_key = IFileCache::hash(unique_path);
- if (!opts.cache_base_path.empty()) {
+ if (opts.cache_base_path.empty()) {
+ // if cache path is not specified by session variable, chose
randomly.
+ _cache = FileCacheFactory::instance()->get_by_path(_cache_key);
+ } else {
// from query session variable: file_cache_base_path
_cache =
FileCacheFactory::instance()->get_by_path(opts.cache_base_path);
if (_cache == nullptr) {
@@ -61,7 +64,6 @@ CachedRemoteFileReader::CachedRemoteFileReader(FileReaderSPtr
remote_file_reader
_cache = FileCacheFactory::instance()->get_by_path(_cache_key);
}
}
- _cache = FileCacheFactory::instance()->get_by_path(path().native());
}
}
@@ -91,6 +93,7 @@ std::pair<size_t, size_t>
CachedRemoteFileReader::_align_size(size_t offset,
Status CachedRemoteFileReader::_read_from_cache(size_t offset, Slice result,
size_t* bytes_read,
const IOContext* io_ctx) {
size_t bytes_req = result.size;
+ bytes_req = std::min(bytes_req, size() - offset);
ReadStatistics stats;
auto [align_left, align_size] = _align_size(offset, bytes_req);
CacheContext cache_context(io_ctx);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]