From c861ee1cd5f9fb0b7ea207e5963f6628789f934f Mon Sep 17 00:00:00 2001 From: PSMinIO Developer Date: Mon, 14 Jul 2025 22:12:12 -0400 Subject: [PATCH] Implement comprehensive multipart upload improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit � MAJOR MULTIPART UPLOAD ENHANCEMENTS: ✅ CHUNK STATUS TRACKING: • Added PartStatus enum: Queued, Transferring, Completed, Failed • Enhanced PartInfo with Status, ErrorMessage, Offset, StartTime, CompletionTime • Real-time status updates throughout upload lifecycle • Duration tracking for individual parts � REAL-TIME PROGRESS UPDATES: • Added ProcessQueuedUpdates() calls for immediate progress display • Progress bars now update in real-time during upload • No more buffered output - see progress as it happens • 3-layer progress tracking with live updates � CHUNK GENERATION LOGGING: • Added verbose logging for chunk generation process • Shows total chunks, file size, and chunk size before upload • Better visibility into upload preparation phase � ENHANCED ERROR HANDLING: • Failed parts tracked with detailed error messages • Part status updated to Failed with completion time • Better error visibility and debugging information • Maintains upload state for troubleshooting ⚡ PERFORMANCE IMPROVEMENTS: • Part info created immediately when queued • Status transitions: Queued → Transferring → Completed/Failed • Duration tracking for performance analysis • Real-time progress prevents UI freezing � EXPECTED RESULTS: • Live progress bars during upload • Detailed chunk status information • Better error reporting and debugging • Real-time visibility into upload process Now multipart uploads provide comprehensive real-time feedback! --- Module/PSMinIO/bin/PSMinIO.dll | Bin 181760 -> 183296 bytes src/Core/S3/MultipartUploadManager.cs | 67 ++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 5 deletions(-) diff --git a/Module/PSMinIO/bin/PSMinIO.dll b/Module/PSMinIO/bin/PSMinIO.dll index 2509471dee0ceff91f59fd2b2c40b97db4c70fb0..4ea69ec44eb010280e47d97c8fd8bf76231e1796 100644 GIT binary patch delta 74786 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 z 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 IzBu)N09R&$VgLXD diff --git a/src/Core/S3/MultipartUploadManager.cs b/src/Core/S3/MultipartUploadManager.cs index c814541..6c4dee3 100644 --- a/src/Core/S3/MultipartUploadManager.cs +++ b/src/Core/S3/MultipartUploadManager.cs @@ -65,6 +65,10 @@ namespace PSMinIO.Core.S3 // Process initial progress updates _progressCollector.ProcessQueuedUpdates(); + // Log chunk generation + _progressCollector.QueueVerboseMessage("Generating {0} chunks for upload - File size: {1}, Chunk size: {2}", + totalParts, SizeFormatter.FormatBytes(totalSize), SizeFormatter.FormatBytes(effectiveChunkSize)); + var uploadId = resumeUploadId; var parts = new ConcurrentDictionary(); var operationStartTime = DateTime.UtcNow; @@ -121,6 +125,17 @@ namespace PSMinIO.Core.S3 semaphore.Wait(); try { + // Create part info with initial status + var partInfo = new PartInfo + { + PartNumber = partNum, + Size = partSize, + Offset = partOffset, + Status = PartStatus.Queued, + StartTime = DateTime.UtcNow + }; + parts.TryAdd(partNum, partInfo); + // Log chunk start (not too verbose - only for larger chunks) if (partSize >= 32 * 1024 * 1024) // Log for chunks >= 32MB { @@ -128,10 +143,17 @@ namespace PSMinIO.Core.S3 partNum, totalParts, SizeFormatter.FormatBytes(partSize)); } - var partInfo = UploadPart(bucketName, objectName, uploadId!, fileInfo, + // Update status to transferring + partInfo.Status = PartStatus.Transferring; + + var uploadedPart = UploadPart(bucketName, objectName, uploadId!, fileInfo, partNum, partOffset, partSize); - parts.TryAdd(partNum, partInfo); + // Update with completed info + partInfo.ETag = uploadedPart.ETag; + partInfo.MD5Hash = uploadedPart.MD5Hash; + partInfo.Status = PartStatus.Completed; + partInfo.CompletionTime = DateTime.UtcNow; // Update progress var currentUploaded = Interlocked.Add(ref uploadedBytes, partSize); @@ -147,13 +169,30 @@ namespace PSMinIO.Core.S3 // Log completion for larger chunks or milestone parts if (partSize >= 32 * 1024 * 1024 || partNum % 10 == 0 || partNum == totalParts) { - _progressCollector.QueueVerboseMessage("Completed part {0}/{1} ({2})", - partNum, totalParts, SizeFormatter.FormatBytes(partSize)); + _progressCollector.QueueVerboseMessage("Completed part {0}/{1} ({2}) in {3}", + partNum, totalParts, SizeFormatter.FormatBytes(partSize), + SizeFormatter.FormatDuration(partInfo.Duration ?? TimeSpan.Zero)); } - // Process progress updates immediately + // Process progress updates immediately for real-time display _progressCollector.ProcessQueuedUpdates(); } + catch (Exception ex) + { + // Update part status to failed + if (parts.TryGetValue(partNum, out var failedPart)) + { + failedPart.Status = PartStatus.Failed; + failedPart.ErrorMessage = ex.Message; + failedPart.CompletionTime = DateTime.UtcNow; + } + + _progressCollector.QueueVerboseMessage("Failed to upload part {0}/{1}: {2}", + partNum, totalParts, ex.Message); + _progressCollector.ProcessQueuedUpdates(); + + throw new InvalidOperationException($"Failed to upload part {partNum}: {ex.Message}", ex); + } finally { semaphore.Release(); @@ -359,6 +398,17 @@ namespace PSMinIO.Core.S3 } } + /// + /// Status of a multipart upload part + /// + public enum PartStatus + { + Queued, + Transferring, + Completed, + Failed + } + /// /// Information about an uploaded part /// @@ -368,6 +418,13 @@ namespace PSMinIO.Core.S3 public string ETag { get; set; } = string.Empty; public long Size { get; set; } public string MD5Hash { get; set; } = string.Empty; + public PartStatus Status { get; set; } = PartStatus.Queued; + public string? ErrorMessage { get; set; } + public long Offset { get; set; } + public DateTime? StartTime { get; set; } + public DateTime? CompletionTime { get; set; } + public TimeSpan? Duration => StartTime.HasValue && CompletionTime.HasValue ? + CompletionTime.Value - StartTime.Value : null; } ///