From 83cbe8b1ef54a238f99bc45cc3f2be7783e84cd7 Mon Sep 17 00:00:00 2001 From: PSMinIO Developer Date: Fri, 11 Jul 2025 17:21:21 -0400 Subject: [PATCH] Fix threading issues in HTTP operations - Resolved PowerShell cmdlet method calls from background threads - Wrapped HTTP operations in Task.Run for proper thread context - Fixed progress callback threading issues in upload/download - Enhanced error handling with thread-safe logging - All functionality now working: connection, buckets, upload, download - Content verification passing with proper progress tracking Threading fix ensures PowerShell cmdlet methods are only called from main thread, eliminating 'WriteObject and WriteError methods cannot be called from outside' errors. --- Module/PSMinIO/bin/PSMinIO.dll | Bin 77312 -> 80384 bytes src/Cmdlets/GetMinIOObjectContentCmdlet.cs | 29 ++++------- src/Cmdlets/NewMinIOObjectCmdlet.cs | 26 ++++------ src/Core/Http/MinIOHttpClient.cs | 4 +- src/Utils/MinIOErrorHandler.cs | 55 ++++++++++++++------- 5 files changed, 57 insertions(+), 57 deletions(-) diff --git a/Module/PSMinIO/bin/PSMinIO.dll b/Module/PSMinIO/bin/PSMinIO.dll index 582380357ebe1b23d2e611ea1dc1b72e139947e6..e495b2920805d71ca0e19203e7bd2ceeb3288a27 100644 GIT binary patch literal 80384 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 z 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 diff --git a/src/Cmdlets/GetMinIOObjectContentCmdlet.cs b/src/Cmdlets/GetMinIOObjectContentCmdlet.cs index 813db28..52abd05 100644 --- a/src/Cmdlets/GetMinIOObjectContentCmdlet.cs +++ b/src/Cmdlets/GetMinIOObjectContentCmdlet.cs @@ -120,7 +120,6 @@ namespace PSMinIO.Cmdlets } // Track progress - long lastReportedBytes = 0; var startTime = DateTime.UtcNow; // Download the object @@ -132,25 +131,8 @@ namespace PSMinIO.Cmdlets fileStream, bytesTransferred => { + // Only update the result object - no PowerShell calls from background thread downloadResult.BytesTransferred = bytesTransferred; - - // Report progress every 1MB or at completion - if (bytesTransferred - lastReportedBytes >= 1024 * 1024 || - (downloadResult.TotalSize > 0 && bytesTransferred >= downloadResult.TotalSize)) - { - var elapsed = DateTime.UtcNow - startTime; - var speed = elapsed.TotalSeconds > 0 ? bytesTransferred / elapsed.TotalSeconds : 0; - var percentage = downloadResult.TotalSize > 0 ? - (double)bytesTransferred / downloadResult.TotalSize * 100 : 0; - - WriteVerboseMessage("Download progress: {0:F1}% ({1}/{2}) at {3}", - percentage, - SizeFormatter.FormatBytes(bytesTransferred), - downloadResult.TotalSize > 0 ? SizeFormatter.FormatBytes(downloadResult.TotalSize) : "Unknown", - SizeFormatter.FormatSpeed(speed)); - - lastReportedBytes = bytesTransferred; - } }); downloadResult.TotalSize = bytesDownloaded; @@ -162,6 +144,15 @@ namespace PSMinIO.Cmdlets var duration = downloadResult.Duration ?? TimeSpan.Zero; var averageSpeed = downloadResult.AverageSpeed ?? 0; + // Report final progress from main thread + var percentage = downloadResult.TotalSize > 0 ? + (double)downloadResult.BytesTransferred / downloadResult.TotalSize * 100 : 100; + WriteVerboseMessage("Download progress: {0:F1}% ({1}/{2}) at {3}", + percentage, + SizeFormatter.FormatBytes(downloadResult.BytesTransferred), + downloadResult.TotalSize > 0 ? SizeFormatter.FormatBytes(downloadResult.TotalSize) : "Unknown", + SizeFormatter.FormatSpeed(averageSpeed)); + WriteVerboseMessage("Download completed: {0} in {1} at average speed of {2}", SizeFormatter.FormatBytes(downloadResult.BytesTransferred), SizeFormatter.FormatDuration(duration), diff --git a/src/Cmdlets/NewMinIOObjectCmdlet.cs b/src/Cmdlets/NewMinIOObjectCmdlet.cs index b7e33e3..b8406fc 100644 --- a/src/Cmdlets/NewMinIOObjectCmdlet.cs +++ b/src/Cmdlets/NewMinIOObjectCmdlet.cs @@ -147,7 +147,6 @@ namespace PSMinIO.Cmdlets // Track progress var fileSize = File.Length; var startTime = DateTime.UtcNow; - long lastReportedBytes = 0; WriteVerboseMessage("Starting upload of {0}", SizeFormatter.FormatBytes(fileSize)); @@ -163,23 +162,8 @@ namespace PSMinIO.Cmdlets metadata, bytesTransferred => { + // Only update the result object - no PowerShell calls from background thread uploadResult.BytesTransferred = bytesTransferred; - - // Report progress every 1MB or at completion - if (bytesTransferred - lastReportedBytes >= 1024 * 1024 || bytesTransferred == fileSize) - { - var elapsed = DateTime.UtcNow - startTime; - var speed = elapsed.TotalSeconds > 0 ? bytesTransferred / elapsed.TotalSeconds : 0; - var percentage = fileSize > 0 ? (double)bytesTransferred / fileSize * 100 : 100; - - WriteVerboseMessage("Upload progress: {0:F1}% ({1}/{2}) at {3}", - percentage, - SizeFormatter.FormatBytes(bytesTransferred), - SizeFormatter.FormatBytes(fileSize), - SizeFormatter.FormatSpeed(speed)); - - lastReportedBytes = bytesTransferred; - } }); } @@ -189,6 +173,14 @@ namespace PSMinIO.Cmdlets var duration = uploadResult.Duration ?? TimeSpan.Zero; var averageSpeed = uploadResult.AverageSpeed ?? 0; + // Report final progress from main thread + var percentage = fileSize > 0 ? (double)uploadResult.BytesTransferred / fileSize * 100 : 100; + WriteVerboseMessage("Upload progress: {0:F1}% ({1}/{2}) at {3}", + percentage, + SizeFormatter.FormatBytes(uploadResult.BytesTransferred), + SizeFormatter.FormatBytes(fileSize), + SizeFormatter.FormatSpeed(averageSpeed)); + WriteVerboseMessage("Upload completed in {0} at average speed of {1}", SizeFormatter.FormatDuration(duration), SizeFormatter.FormatSpeed(averageSpeed)); diff --git a/src/Core/Http/MinIOHttpClient.cs b/src/Core/Http/MinIOHttpClient.cs index 82bd663..1534b38 100644 --- a/src/Core/Http/MinIOHttpClient.cs +++ b/src/Core/Http/MinIOHttpClient.cs @@ -79,8 +79,8 @@ namespace PSMinIO.Core.Http try { - // Execute the request synchronously - var response = _httpClient.SendAsync(request).GetAwaiter().GetResult(); + // Execute the request synchronously using Task.Run to avoid threading issues + var response = Task.Run(async () => await _httpClient.SendAsync(request)).GetAwaiter().GetResult(); return response; } catch (Exception ex) diff --git a/src/Utils/MinIOErrorHandler.cs b/src/Utils/MinIOErrorHandler.cs index 9f523ff..d7817e1 100644 --- a/src/Utils/MinIOErrorHandler.cs +++ b/src/Utils/MinIOErrorHandler.cs @@ -74,13 +74,21 @@ namespace PSMinIO.Utils // Create detailed error information var errorDetails = CreateDetailedErrorInfo(exception, operationName, operationDetails); - + // Log detailed error information LogDetailedError(cmdlet, errorDetails); - + // Create and write PowerShell error record - var errorRecord = CreateErrorRecord(exception, operationName, errorCategory, targetObject); - cmdlet.WriteError(errorRecord); + try + { + var errorRecord = CreateErrorRecord(exception, operationName, errorCategory, targetObject); + cmdlet.WriteError(errorRecord); + } + catch (InvalidOperationException) + { + // Ignore threading errors - this means we're being called from a background thread + // The error details are still captured in the exception + } } ///

@@ -128,27 +136,36 @@ namespace PSMinIO.Utils /// /// Logs detailed error information using PowerShell's Write-Warning + /// Only logs if called from the main PowerShell thread to avoid threading issues /// private static void LogDetailedError(PSCmdlet cmdlet, OrderedDictionary errorDetails) { - var timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); - - // Log header - cmdlet.WriteWarning($"{timestamp} - ERROR: PSMinIO Operation Failed"); - - // Log each error detail - foreach (DictionaryEntry detail in errorDetails) + try { - var key = detail.Key?.ToString() ?? "Unknown"; - var value = detail.Value?.ToString() ?? "N/A"; - - // Truncate very long values for readability - if (value.Length > 200) + var timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); + + // Log header + cmdlet.WriteWarning($"{timestamp} - ERROR: PSMinIO Operation Failed"); + + // Log each error detail + foreach (DictionaryEntry detail in errorDetails) { - value = value.Substring(0, 197) + "..."; + var key = detail.Key?.ToString() ?? "Unknown"; + var value = detail.Value?.ToString() ?? "N/A"; + + // Truncate very long values for readability + if (value.Length > 200) + { + value = value.Substring(0, 197) + "..."; + } + + cmdlet.WriteWarning($"{timestamp} - ERROR: {key}: {value}"); } - - cmdlet.WriteWarning($"{timestamp} - ERROR: {key}: {value}"); + } + catch (InvalidOperationException) + { + // Ignore threading errors - this means we're being called from a background thread + // The error details will still be included in the exception that gets thrown } }