mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 17:41:59 +00:00
███████████: fixed error with destructors when client closes connection without received all data [#CONV-2546].
This commit is contained in:
parent
a652c56044
commit
450be4a929
@ -67,7 +67,18 @@ public:
|
||||
|
||||
~CompressedWriteBuffer()
|
||||
{
|
||||
nextImpl();
|
||||
bool uncaught_exception = std::uncaught_exception();
|
||||
|
||||
try
|
||||
{
|
||||
nextImpl();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
/// Если до этого уже было какое-то исключение, то второе исключение проигнорируем.
|
||||
if (!uncaught_exception)
|
||||
throw;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -89,19 +89,30 @@ public:
|
||||
|
||||
virtual ~RemoteWriteBuffer()
|
||||
{
|
||||
nextImpl();
|
||||
bool uncaught_exception = std::uncaught_exception();
|
||||
|
||||
Poco::Net::HTTPResponse response;
|
||||
std::istream & istr = session.receiveResponse(response);
|
||||
Poco::Net::HTTPResponse::HTTPStatus status = response.getStatus();
|
||||
|
||||
if (status != Poco::Net::HTTPResponse::HTTP_OK)
|
||||
try
|
||||
{
|
||||
std::stringstream error_message;
|
||||
error_message << "Received error from remote server " << uri_str << ". HTTP status code: "
|
||||
<< status << ", body: " << istr.rdbuf();
|
||||
nextImpl();
|
||||
|
||||
throw Exception(error_message.str(), ErrorCodes::RECEIVED_ERROR_FROM_REMOTE_IO_SERVER);
|
||||
Poco::Net::HTTPResponse response;
|
||||
std::istream & istr = session.receiveResponse(response);
|
||||
Poco::Net::HTTPResponse::HTTPStatus status = response.getStatus();
|
||||
|
||||
if (status != Poco::Net::HTTPResponse::HTTP_OK)
|
||||
{
|
||||
std::stringstream error_message;
|
||||
error_message << "Received error from remote server " << uri_str << ". HTTP status code: "
|
||||
<< status << ", body: " << istr.rdbuf();
|
||||
|
||||
throw Exception(error_message.str(), ErrorCodes::RECEIVED_ERROR_FROM_REMOTE_IO_SERVER);
|
||||
}
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
/// Если до этого уже было какое-то исключение, то второе исключение проигнорируем.
|
||||
if (!uncaught_exception)
|
||||
throw;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -28,9 +28,20 @@ public:
|
||||
|
||||
virtual ~WriteBufferFromFile()
|
||||
{
|
||||
next();
|
||||
if (0 != close(fd))
|
||||
throwFromErrno("Cannot close file " + file_name, ErrorCodes::CANNOT_CLOSE_FILE);
|
||||
bool uncaught_exception = std::uncaught_exception();
|
||||
|
||||
try
|
||||
{
|
||||
next();
|
||||
if (0 != close(fd))
|
||||
throwFromErrno("Cannot close file " + file_name, ErrorCodes::CANNOT_CLOSE_FILE);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
/// Если до этого уже было какое-то исключение, то второе исключение проигнорируем.
|
||||
if (!uncaught_exception)
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
virtual std::string getFileName()
|
||||
|
@ -49,7 +49,18 @@ public:
|
||||
|
||||
virtual ~WriteBufferFromFileDescriptor()
|
||||
{
|
||||
nextImpl();
|
||||
bool uncaught_exception = std::uncaught_exception();
|
||||
|
||||
try
|
||||
{
|
||||
nextImpl();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
/// Если до этого уже было какое-то исключение, то второе исключение проигнорируем.
|
||||
if (!uncaught_exception)
|
||||
throw;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -35,7 +35,18 @@ public:
|
||||
|
||||
~WriteBufferFromOStream()
|
||||
{
|
||||
nextImpl();
|
||||
bool uncaught_exception = std::uncaught_exception();
|
||||
|
||||
try
|
||||
{
|
||||
nextImpl();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
/// Если до этого уже было какое-то исключение, то второе исключение проигнорируем.
|
||||
if (!uncaught_exception)
|
||||
throw;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user