From b71972ce01990e37832c824b0c7c4117d5726818 Mon Sep 17 00:00:00 2001 From: Dmitry Grudin Date: Tue, 17 Dec 2024 13:15:31 +0300 Subject: [PATCH] Implemented resending of data when performing a flash in buffered output --- clickhouse/base/output.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clickhouse/base/output.cpp b/clickhouse/base/output.cpp index 86b9fbdd..1b98272d 100644 --- a/clickhouse/base/output.cpp +++ b/clickhouse/base/output.cpp @@ -81,7 +81,14 @@ void BufferedOutput::Reset() { void BufferedOutput::DoFlush() { if (array_output_.Data() != buffer_.data()) { - destination_->Write(buffer_.data(), array_output_.Data() - buffer_.data()); + size_t len = array_output_.Data() - buffer_.data(); + const uint8_t* buf = buffer_.data(); + while (len > 0) { + const size_t written = destination_->Write(buf, len); + buf += written; + len -= written; + } + destination_->Flush(); array_output_.Reset(buffer_.data(), buffer_.size());