Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions generator/.DevConfigs/9f9b4605-608f-45c3-80dc-6b8d2bcb036d.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"services": [
{
"serviceName": "S3",
"type": "patch",
"changeLogMessages": [
"Update directory upload progress calculation to properly keep track of the number of files successfully uploaded."
]
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ internal partial class UploadDirectoryCommand : BaseCommand<TransferUtilityUploa
TransferUtilityConfig _config;

int _totalNumberOfFiles;
int _numberOfFilesUploaded;
int _numberOfFilesSuccessfullyUploaded;
long _totalBytes;
long _transferredBytes;
Expand Down Expand Up @@ -165,11 +164,7 @@ private void UploadProgressEventCallback(object sender, UploadProgressArgs e)

var totalTransferredBytes = Interlocked.Add(ref _transferredBytes, e.IncrementTransferred - e.CompensationForRetry);

int numberOfFilesUploaded = _numberOfFilesUploaded;
if (e.TransferredBytes == e.TotalBytes)
{
numberOfFilesUploaded = Interlocked.Increment(ref _numberOfFilesUploaded);
}
int numberOfFilesUploaded = _numberOfFilesSuccessfullyUploaded;
Comment thread
GarrettBeatty marked this conversation as resolved.

UploadDirectoryProgressArgs uploadDirectoryProgressArgs = null;
if (_request.UploadFilesConcurrently)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ public async Task UploadDirectoryWithProgressTracker()
progressValidator.AssertOnCompletion();
}

private Task UploadDirectoryAsync(string directoryName, long size,
private Task UploadDirectoryAsync(string directoryName, long size,
DirectoryProgressValidator<UploadDirectoryProgressArgs> progressValidator, bool validate = true, bool concurrent = true)
{
var directoryPath = Path.Combine(basePath, directoryName);
Expand Down Expand Up @@ -228,7 +228,7 @@ private Task UploadDirectoryAsync(string directoryName, long size,
HashSet<string> files = new HashSet<string>();
request.UploadDirectoryProgressEvent += (s, e) =>
{
files.Add(e.CurrentFile);
files.Add(e.CurrentFile);
Console.WriteLine("Progress callback = " + e.ToString());
};

Expand Down Expand Up @@ -505,7 +505,8 @@ public static void ConfigureProgressValidator(DirectoryProgressValidator<Downloa
}
}

if (progress.NumberOfFilesDownloaded == progress.TotalNumberOfFiles)
if ((progress.NumberOfFilesDownloaded == progress.TotalNumberOfFiles) ||
(progress.TotalBytes > 0 && progress.TransferredBytes == progress.TotalBytes))
{
Assert.Equal(progress.TransferredBytes, progress.TotalBytes);
progressValidator.IsProgressEventComplete = true;
Expand All @@ -527,17 +528,11 @@ public static void ConfigureProgressValidator(DirectoryProgressValidator<UploadD
{
Assert.True(progress.NumberOfFilesUploaded >= lastProgress.NumberOfFilesUploaded);
Assert.True(progress.TransferredBytes > lastProgress.TransferredBytes);
if (progress.NumberOfFilesUploaded == lastProgress.NumberOfFilesUploaded)
{
Assert.True(progress.TransferredBytes - lastProgress.TransferredBytes >= 100 * KILO_SIZE);
}
else
{
Assert.Equal(progress.TransferredBytesForCurrentFile, progress.TotalNumberOfBytesForCurrentFile);
}
Assert.True(progress.TransferredBytes - lastProgress.TransferredBytes > 0);
}

if (progress.NumberOfFilesUploaded == progress.TotalNumberOfFiles)
if ((progress.NumberOfFilesUploaded == progress.TotalNumberOfFiles) ||
(progress.TotalBytes > 0 && progress.TransferredBytes == progress.TotalBytes))
{
Assert.Equal(progress.TransferredBytes, progress.TotalBytes);
progressValidator.IsProgressEventComplete = true;
Expand Down
17 changes: 6 additions & 11 deletions sdk/test/Services/S3/IntegrationTests/TransferUtilityTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ public void UploadUnSeekableStreamFileSizeEqualToPartBufferSize()

[TestMethod]
[TestCategory("S3")]
public void UploadUnseekableStreamFileSizeBetweenMinPartSizeAndPartBufferSize()
public void UploadUnSeekableStreamFileSizeBetweenMinPartSizeAndPartBufferSize()
{
var client = Client;
var fileName = UtilityMethods.GenerateName(@"SimpleUploadTest\BetweenMinPartSizeAndPartBufferSize");
Expand Down Expand Up @@ -2077,7 +2077,8 @@ public static void ConfigureProgressValidator(DirectoryProgressValidator<Downloa
}
}

if (progress.NumberOfFilesDownloaded == progress.TotalNumberOfFiles)
if ((progress.NumberOfFilesDownloaded == progress.TotalNumberOfFiles) ||
(progress.TotalBytes > 0 && progress.TransferredBytes == progress.TotalBytes))
{
Assert.AreEqual(progress.TransferredBytes, progress.TotalBytes);
progressValidator.IsProgressEventComplete = true;
Expand All @@ -2103,17 +2104,11 @@ public static void ConfigureProgressValidator(DirectoryProgressValidator<UploadD
{
Assert.IsTrue(progress.NumberOfFilesUploaded >= lastProgress.NumberOfFilesUploaded);
Assert.IsTrue(progress.TransferredBytes > lastProgress.TransferredBytes);
if (progress.NumberOfFilesUploaded == lastProgress.NumberOfFilesUploaded)
{
Assert.IsTrue(progress.TransferredBytes - lastProgress.TransferredBytes >= 100 * KILO_SIZE);
}
else
{
Assert.AreEqual(progress.TransferredBytesForCurrentFile, progress.TotalNumberOfBytesForCurrentFile);
Assert.IsTrue(progress.TransferredBytes - lastProgress.TransferredBytes > 0);
}
}

if (progress.NumberOfFilesUploaded == progress.TotalNumberOfFiles)
if ((progress.NumberOfFilesUploaded == progress.TotalNumberOfFiles) ||
(progress.TotalBytes > 0 && progress.TransferredBytes == progress.TotalBytes))
{
Assert.AreEqual(progress.TransferredBytes, progress.TotalBytes);
progressValidator.IsProgressEventComplete = true;
Expand Down