diff --git a/be/src/io/fs/buffered_reader.cpp b/be/src/io/fs/buffered_reader.cpp index e7f2cc9533..1c016a6b22 100644 --- a/be/src/io/fs/buffered_reader.cpp +++ b/be/src/io/fs/buffered_reader.cpp @@ -441,8 +441,6 @@ void PrefetchBuffer::prefetch_buffer() { _buffer_status = BufferStatus::PENDING; _prefetched.notify_all(); } - _len = 0; - Status s; int read_range_index = search_read_range(_offset); size_t buf_size; @@ -453,11 +451,14 @@ void PrefetchBuffer::prefetch_buffer() { buf_size = merge_small_ranges(_offset, read_range_index); } + _len = 0; + Status s; + { SCOPED_RAW_TIMER(&_statis.read_time); s = _reader->read_at(_offset, Slice {_buf.get(), buf_size}, &_len, _io_ctx); } - if (UNLIKELY(buf_size != _len)) { + if (UNLIKELY(s.ok() && buf_size != _len)) { // This indicates that the data size returned by S3 object storage is smaller than what we requested, // which seems to be a violation of the S3 protocol since our request range was valid. // We currently consider this situation a bug and will treat this task as a failure. diff --git a/be/src/io/fs/buffered_reader.h b/be/src/io/fs/buffered_reader.h index 8e5d87fcc2..01422cacac 100644 --- a/be/src/io/fs/buffered_reader.h +++ b/be/src/io/fs/buffered_reader.h @@ -170,9 +170,7 @@ public: } ~MergeRangeFileReader() override { - if (_read_slice != nullptr) { - delete[] _read_slice; - } + delete[] _read_slice; for (char* box : _boxes) { delete[] box; } @@ -289,7 +287,7 @@ struct PrefetchBuffer : std::enable_shared_from_this { _reader(reader), _io_ctx(io_ctx), _buf(new char[buffer_size]), - _sync_profile(sync_profile) {} + _sync_profile(std::move(sync_profile)) {} PrefetchBuffer(PrefetchBuffer&& other) : _offset(other._offset), @@ -391,8 +389,8 @@ public: void set_random_access_ranges(const std::vector* random_access_ranges) { _random_access_ranges = random_access_ranges; - for (int i = 0; i < _pre_buffers.size(); i++) { - _pre_buffers[i]->set_random_access_ranges(random_access_ranges); + for (auto& _pre_buffer : _pre_buffers) { + _pre_buffer->set_random_access_ranges(random_access_ranges); } }