From de0a752f34b52fc9d31f79c1d890ff11d614cfdf Mon Sep 17 00:00:00 2001 From: Alexei Sosin Date: Mon, 23 Dec 2024 19:46:36 +0300 Subject: [PATCH 1/3] on lengthy response error do not deserialize the entire response in memory --- ClickHouse.Client/ADO/ClickHouseConnection.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ClickHouse.Client/ADO/ClickHouseConnection.cs b/ClickHouse.Client/ADO/ClickHouseConnection.cs index 40f0d221..4f85db72 100644 --- a/ClickHouse.Client/ADO/ClickHouseConnection.cs +++ b/ClickHouse.Client/ADO/ClickHouseConnection.cs @@ -218,10 +218,20 @@ internal static async Task HandleError(HttpResponseMessage activity.SetSuccess(); return response; } - var error = await response.Content.ReadAsStringAsync().ConfigureAwait(false); - var ex = ClickHouseServerException.FromServerResponse(error, query); - activity.SetException(ex); - throw ex; + activity.SetStatus(ActivityStatusCode.Error, response.ReasonPhrase); + var ex = new Exception($"Error '{response.StatusCode}' reading server response: {response.ReasonPhrase}"); + try + { + await response.Content.LoadIntoBufferAsync(4096); + var stream = (MemoryStream)await response.Content.ReadAsStreamAsync(); + var error = new StreamReader(stream).ReadToEnd(); + ex = ClickHouseServerException.FromServerResponse(error, query); + activity.SetException(ex); + } + finally + { + throw ex; + } } public override void ChangeDatabase(string databaseName) => database = databaseName; From ea452aff02060758cf7a5c7a8ab9e23bc046e2d8 Mon Sep 17 00:00:00 2001 From: Alexei Sosin Date: Mon, 23 Dec 2024 20:29:18 +0300 Subject: [PATCH 2/3] wip --- ClickHouse.Client/ADO/ClickHouseConnection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClickHouse.Client/ADO/ClickHouseConnection.cs b/ClickHouse.Client/ADO/ClickHouseConnection.cs index 4f85db72..a8dea221 100644 --- a/ClickHouse.Client/ADO/ClickHouseConnection.cs +++ b/ClickHouse.Client/ADO/ClickHouseConnection.cs @@ -218,7 +218,7 @@ internal static async Task HandleError(HttpResponseMessage activity.SetSuccess(); return response; } - activity.SetStatus(ActivityStatusCode.Error, response.ReasonPhrase); + activity.SetStatus(ActivityStatusCode.Error, response?.ReasonPhrase ?? string.Empty); var ex = new Exception($"Error '{response.StatusCode}' reading server response: {response.ReasonPhrase}"); try { From c6597727c50c96a3c69e050d1025ef21c7a1ebda Mon Sep 17 00:00:00 2001 From: Alexei Sosin Date: Mon, 23 Dec 2024 20:33:03 +0300 Subject: [PATCH 3/3] wip --- ClickHouse.Client/ADO/ClickHouseConnection.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ClickHouse.Client/ADO/ClickHouseConnection.cs b/ClickHouse.Client/ADO/ClickHouseConnection.cs index a8dea221..cae1bc67 100644 --- a/ClickHouse.Client/ADO/ClickHouseConnection.cs +++ b/ClickHouse.Client/ADO/ClickHouseConnection.cs @@ -218,15 +218,16 @@ internal static async Task HandleError(HttpResponseMessage activity.SetSuccess(); return response; } - activity.SetStatus(ActivityStatusCode.Error, response?.ReasonPhrase ?? string.Empty); - var ex = new Exception($"Error '{response.StatusCode}' reading server response: {response.ReasonPhrase}"); + string description = response?.ReasonPhrase ?? string.Empty; + activity?.SetStatus(ActivityStatusCode.Error, description); + var ex = new Exception($"Error '{response?.StatusCode}' reading server response: {description}"); try { await response.Content.LoadIntoBufferAsync(4096); var stream = (MemoryStream)await response.Content.ReadAsStreamAsync(); var error = new StreamReader(stream).ReadToEnd(); ex = ClickHouseServerException.FromServerResponse(error, query); - activity.SetException(ex); + activity?.SetException(ex); } finally {