mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 01:22:04 +00:00
Fix reading of empty S3 files
It is possible for ReadBufferFromS3::nextImpl() called even after eof(), at least once, and in this case, if the file was empty, then local working_buffer will be null, while impl.working_buffer will be empty, but not null, and so local position() after impl->position() = position() will be incorrect. I found this with test_storage_s3/test.py::test_empty_file in debug build, assertion catched this, so maybe it worth get back debug integration build... v2: fix test_log_family_s3 failures https://s3.amazonaws.com/clickhouse-test-reports/37801/b5e6e2ddae94d6a7eac551309cb67003dff97df1/integration_tests__asan__actions__[2/3].html Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
This commit is contained in:
parent
8ddf277670
commit
71285edfbd
@ -116,6 +116,11 @@ bool ReadBufferFromS3::nextImpl()
|
||||
assert(working_buffer.begin() != nullptr);
|
||||
assert(!internal_buffer.empty());
|
||||
}
|
||||
else
|
||||
{
|
||||
/// use the buffer returned by `impl`
|
||||
BufferBase::set(impl->buffer().begin(), impl->buffer().size(), impl->offset());
|
||||
}
|
||||
}
|
||||
|
||||
/// Try to read a next portion of data.
|
||||
@ -155,7 +160,7 @@ bool ReadBufferFromS3::nextImpl()
|
||||
if (!next_result)
|
||||
return false;
|
||||
|
||||
BufferBase::set(impl->buffer().begin(), impl->buffer().size(), impl->offset()); /// use the buffer returned by `impl`
|
||||
BufferBase::set(impl->buffer().begin(), impl->buffer().size(), impl->offset());
|
||||
|
||||
ProfileEvents::increment(ProfileEvents::ReadBufferFromS3Bytes, working_buffer.size());
|
||||
offset += working_buffer.size();
|
||||
|
Loading…
Reference in New Issue
Block a user