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 - pass
  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 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
void OnWriteObjectProgressEvent(object sender, WriteObjectProgressArgs e)
{
// Keep track of the total transferred bytes so that we can also return this value in case of failure
Interlocked.Add(ref _totalTransferredBytes, e.IncrementTransferred);
Copy link
Contributor Author

Choose a reason for hiding this comment

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

not actually sure if interlocked is needed here. but added to be consistent with upload

@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/4 to feature/transfermanager October 28, 2025 13:18
GarrettBeatty added a commit that referenced this pull request Oct 28, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from 0209113 to 2fb1459 Compare October 28, 2025 13:18
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/4 October 28, 2025 13:18
@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/4 to feature/transfermanager October 29, 2025 15:10
GarrettBeatty added a commit that referenced this pull request Oct 29, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from 2fb1459 to 8ef9622 Compare October 29, 2025 15:10
GarrettBeatty added a commit that referenced this pull request Oct 29, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from 8ef9622 to a2b4c57 Compare October 29, 2025 15:10
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/11 October 29, 2025 15:10
"serviceName": "S3",
"type": "minor",
"changeLogMessages": [
"Added DownloadInitiatedEvent, DownloadCompletedEvent, and DownloadFailedEvent for downloads."
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: be more descriptive that this is for the transfer utility

/// <summary>
/// The original TransferUtilityDownloadRequest created by the user.
/// </summary>
public TransferUtilityDownloadRequest Request { get; internal set; }
Copy link
Contributor

Choose a reason for hiding this comment

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

why does this need to be here? what would this look like when this operation is generated? and why is it not internal at the very least?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

if you expand the code more. this is actually inside the WriteObjectProgressArgs class (Which is just located in the GetObjectResponse.cs file for some reason). This is used for in progress event when downloading.

ive put the new event progress stuff (initiated, failed, completed) in the TransferUtilityDownloadRequest class (which is consistent with upload).

return new TransferUtilityDownloadResponse();
FireTransferCompletedEvent(lastSuccessfulMappedResponse, this._request.FilePath, Interlocked.Read(ref _totalTransferredBytes), totalBytesFromResponse ?? -1);

return lastSuccessfulMappedResponse;
Copy link
Contributor

Choose a reason for hiding this comment

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

the logic looks sound to me but copilot is convinced that it can be null. Maybe be more defensive with it if there's a concurrency situation we're not considering.

@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/11 to feature/transfermanager October 29, 2025 21:21
GarrettBeatty added a commit that referenced this pull request Oct 29, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from a2b4c57 to 2f42415 Compare October 29, 2025 21:22
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/11 October 29, 2025 21:22
@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/11 to feature/transfermanager October 29, 2025 22:01
GarrettBeatty added a commit that referenced this pull request Oct 29, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from 2f42415 to a29b155 Compare October 29, 2025 22:01
GarrettBeatty added a commit that referenced this pull request Oct 29, 2025
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from a29b155 to fc43107 Compare October 29, 2025 22:01
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/11 October 29, 2025 22:01
stack-info: PR: #4079, branch: GarrettBeatty/stacked/10
@GarrettBeatty GarrettBeatty changed the base branch from GarrettBeatty/stacked/11 to feature/transfermanager October 29, 2025 22:51
@GarrettBeatty GarrettBeatty force-pushed the GarrettBeatty/stacked/10 branch from fc43107 to ce6b1d5 Compare October 29, 2025 22:51
@GarrettBeatty GarrettBeatty changed the base branch from feature/transfermanager to GarrettBeatty/stacked/11 October 29, 2025 22:51
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.

2 participants