Skip to content

Conversation

@GarrettBeatty
Copy link
Contributor

@GarrettBeatty GarrettBeatty commented Oct 23, 2025

Stacked PRs:


Description

This change adds progress listeners for "initiated", "complete", and "failed" lifecycle events for the DownloadCommand Consumers can subscribe to these callbacks to receive notifications when a simple upload starts, finishes successfully, or fails. Its similar to #4059 but for downloads

Motivation and Context

  1. To adhere to the SEP

Testing

  1. f0cb4050-fb2c-4fb0-b489-280eb3313ca9 - in progress
  2. Integration tests

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • My code follows the code style of this project
  • My change requires a change to the documentation
  • I have updated the documentation accordingly
  • I have read the README document
  • I have added tests to cover my changes
  • All new and existing tests passed

License

  • I confirm that this pull request can be released under the Apache 2 license

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds lifecycle events (DownloadInitiatedEvent, DownloadCompletedEvent, and DownloadFailedEvent) to the S3 TransferUtility download functionality, providing developers with better visibility into download operations.

Key changes:

  • New event handlers and event argument classes for download lifecycle events
  • Integration of events into the DownloadCommand execution flow
  • Comprehensive integration tests covering individual and combined lifecycle events

Reviewed Changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
sdk/src/Services/S3/Custom/Transfer/TransferUtilityDownloadRequest.cs Adds three new public events (DownloadInitiatedEvent, DownloadCompletedEvent, DownloadFailedEvent) with corresponding event argument classes and internal event-raising methods
sdk/src/Services/S3/Custom/Transfer/Internal/_async/DownloadCommand.async.cs Implements event firing at appropriate points in the download lifecycle, tracks total bytes from response headers, and maps the final response
sdk/src/Services/S3/Custom/Transfer/Internal/DownloadCommand.cs Adds event firing helper methods and tracks total transferred bytes using Interlocked operations for thread safety
sdk/src/Services/S3/Custom/Model/GetObjectResponse.cs Adds Request property to WriteObjectProgressArgs to provide access to the original download request
sdk/test/Services/S3/IntegrationTests/TransferUtilityTests.cs Adds five new integration tests covering individual events and complete lifecycle scenarios
generator/.DevConfigs/9d07dc1e-d82d-4f94-8700-c7b57f872123.json Adds dev config for version bump

@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/4 to feature/transfermanager October 24, 2025 13:48
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from ee59a30 to e553dbb Compare October 24, 2025 13:48
GarrettBeatty added a commit that referenced this pull request Oct 24, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/4 October 24, 2025 13:49
@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/4 to feature/transfermanager October 24, 2025 14:57
GarrettBeatty added a commit that referenced this pull request Oct 24, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from e553dbb to 8782802 Compare October 24, 2025 14:57
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/4 October 24, 2025 14:57
@GarrettBeatty GarrettBeatty requested a review from Copilot October 24, 2025 15:00
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/4 to feature/transfermanager October 24, 2025 15:17
GarrettBeatty added a commit that referenced this pull request Oct 24, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from 8782802 to b0fa14b Compare October 24, 2025 15:17
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/4 October 24, 2025 15:18
@GarrettBeatty GarrettBeatty requested a review from Copilot October 24, 2025 15:18
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/4 to feature/transfermanager October 24, 2025 15:46
GarrettBeatty added a commit that referenced this pull request Oct 24, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from b0fa14b to a92a064 Compare October 24, 2025 15:46
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/4 October 24, 2025 15:46
@GarrettBeatty GarrettBeatty requested a review from Copilot October 24, 2025 15:50
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/4 to feature/transfermanager October 24, 2025 16:19
GarrettBeatty added a commit that referenced this pull request Oct 24, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from a92a064 to 3e702bb Compare October 24, 2025 16:19
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/4 October 24, 2025 16:20
@GarrettBeatty GarrettBeatty requested a review from Copilot October 24, 2025 16:24
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

/// <param name="transferredBytes">The total number of bytes transferred</param>
/// <param name="totalBytes">The total number of bytes for the complete file</param>
internal DownloadCompletedEventArgs(TransferUtilityDownloadRequest request, TransferUtilityDownloadResponse response, string filePath, long transferredBytes, long totalBytes)
{
Copy link

Copilot AI Oct 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The response parameter could potentially be null based on the calling code in DownloadCommand.async.cs line 148. Consider adding null validation in the constructor or documenting that a null response should never be passed, to prevent potential issues if the calling code changes.

Suggested change
{
{
if (response == null)
throw new ArgumentNullException(nameof(response), "Response cannot be null.");

Copilot uses AI. Check for mistakes.
Comment on lines +2263 to +2265
UtilityMethods.GenerateFile(originalFilePath, size);

Client.PutObject(new PutObjectRequest
Copy link

Copilot AI Oct 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The DownloadWithLifecycleEvents and DownloadWithLifecycleEventsAndKey helper methods contain duplicated code for setting up event handlers (lines 2282-2295 and 2315-2328). Consider extracting the event handler setup into a shared helper method to reduce duplication and improve maintainability.

Copilot uses AI. Check for mistakes.
return new TransferUtilityDownloadResponse();
FireTransferCompletedEvent(lastSuccessfulMappedResponse, this._request.FilePath, Interlocked.Read(ref _totalTransferredBytes), totalBytesFromResponse ?? -1);

return lastSuccessfulMappedResponse;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

copilot is saying that this could potentially be null but based on my reading of the code, if there is any failure we will throw exception early on, so it can never be null. thoughts?

@GarrettBeatty GarrettBeatty marked this pull request as ready for review October 24, 2025 16:27
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/4 to feature/transfermanager October 24, 2025 22:24
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from 3e702bb to 0209113 Compare October 24, 2025 22:24
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/4 October 24, 2025 22:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant