dbms: Server: feature development. [#METR-15090]

This commit is contained in:
Alexey Arno 2015-04-05 23:04:55 +03:00
parent 50d103a4c2
commit 985e3cf1ec
3 changed files with 6 additions and 5 deletions

View File

@ -47,7 +47,8 @@ public:
if (!res) if (!res)
working_buffer.resize(0); working_buffer.resize(0);
pos = working_buffer.begin(); pos = working_buffer.begin() + working_buffer_offset;
working_buffer_offset = 0;
return res; return res;
} }

View File

@ -68,13 +68,14 @@ private:
Position buffer_begin = nullptr; Position buffer_begin = nullptr;
off_t region_aligned_size = 0; off_t region_aligned_size = 0;
/// Асинхронная операция чтения ещё не завершилась. /// Асинхронная операция чтения ещё не завершилась.
bool is_pending_read = false; bool is_pending_read = false;
/// Конец файла достигнут. /// Конец файла достигнут.
bool is_eof = false; bool is_eof = false;
/// Был отправлен хоть один запрос на асинхронную операцию чтения. /// Был отправлен хоть один запрос на асинхронную операцию чтения.
bool is_started = false; bool is_started = false;
/// Асинхронная операция завершилась неудачно?
bool aio_failed = false; bool aio_failed = false;
}; };

View File

@ -252,15 +252,14 @@ void ReadBufferAIO::publishReceivedData()
if (pos_in_file > (std::numeric_limits<off_t>::max() - bytes_read)) if (pos_in_file > (std::numeric_limits<off_t>::max() - bytes_read))
throw Exception("File position overflowed", ErrorCodes::LOGICAL_ERROR); throw Exception("File position overflowed", ErrorCodes::LOGICAL_ERROR);
::memmove(buffer_begin, buffer_begin + region_left_padding, bytes_read);
if (bytes_read > 0) if (bytes_read > 0)
fill_buffer.buffer().resize(bytes_read); fill_buffer.buffer().resize(region_left_padding + bytes_read);
if (static_cast<size_t>(bytes_read) < requested_byte_count) if (static_cast<size_t>(bytes_read) < requested_byte_count)
is_eof = true; is_eof = true;
pos_in_file += bytes_read; pos_in_file += bytes_read;
total_bytes_read += bytes_read; total_bytes_read += bytes_read;
working_buffer_offset = region_left_padding;
if (total_bytes_read == max_bytes_read) if (total_bytes_read == max_bytes_read)
is_eof = true; is_eof = true;