Skip to content

Commit

Permalink
Fixes #128
Browse files Browse the repository at this point in the history
  • Loading branch information
Enkidu93 committed Nov 3, 2023
1 parent e89e256 commit d767c6b
Showing 1 changed file with 52 additions and 15 deletions.
67 changes: 52 additions & 15 deletions src/SIL.Machine.AspNetCore/Services/S3WriteStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,37 +93,73 @@ protected override void Dispose(bool disposing)
{
if (disposing)
{
try
if (_uploadResponses.Count == 0)
{
CompleteMultipartUploadRequest request =
AbortAsync().WaitAndUnwrapException();
PutObjectRequest request =
new()
{
BucketName = _bucketName,
Key = _key,
UploadId = _uploadId
ContentBody = ""
};
request.AddPartETags(_uploadResponses);
CompleteMultipartUploadResponse response = _client
.CompleteMultipartUploadAsync(request)
.WaitAndUnwrapException();
Dispose(disposing: false);
GC.SuppressFinalize(this);
PutObjectResponse response = _client.PutObjectAsync(request).WaitAndUnwrapException();
if (response.HttpStatusCode != HttpStatusCode.OK)
throw new HttpRequestException(
$"Tried to complete {_uploadId} to {_bucketName}/{_key} but received response code {response.HttpStatusCode}"
$"Tried to upload empty file to {_bucketName}/{_key} but received response code {response.HttpStatusCode}"
);
}
catch (Exception e)
else
{
AbortAsync(e).WaitAndUnwrapException();
throw;
try
{
CompleteMultipartUploadRequest request =
new()
{
BucketName = _bucketName,
Key = _key,
UploadId = _uploadId
};
request.AddPartETags(_uploadResponses);
CompleteMultipartUploadResponse response = _client
.CompleteMultipartUploadAsync(request)
.WaitAndUnwrapException();
Dispose(disposing: false);
GC.SuppressFinalize(this);
if (response.HttpStatusCode != HttpStatusCode.OK)
throw new HttpRequestException(
$"Tried to complete {_uploadId} to {_bucketName}/{_key} but received response code {response.HttpStatusCode}"
);
}
catch (Exception e)
{
AbortAsync(e).WaitAndUnwrapException();
throw;
}
}
}
base.Dispose(disposing);
}

public async override ValueTask DisposeAsync()
{
if (_uploadResponses.Count == 0)
{
await AbortAsync();
PutObjectRequest request =
new()
{
BucketName = _bucketName,
Key = _key,
ContentBody = ""
};
PutObjectResponse response = await _client.PutObjectAsync(request);
if (response.HttpStatusCode != HttpStatusCode.OK)
throw new HttpRequestException(
$"Tried to upload empty file to {_bucketName}/{_key} but received response code {response.HttpStatusCode}"
);
return;
}
try
{
CompleteMultipartUploadRequest request =
Expand All @@ -148,9 +184,10 @@ public async override ValueTask DisposeAsync()
}
}

private async Task AbortAsync(Exception e)
private async Task AbortAsync(Exception? e = null)
{
_logger.LogError(e, $"Aborted upload {_uploadId} to {_bucketName}/{_key}");
if (e is not null)
_logger.LogError(e, $"Aborted upload {_uploadId} to {_bucketName}/{_key}");
AbortMultipartUploadRequest abortMPURequest =
new()
{
Expand Down

0 comments on commit d767c6b

Please sign in to comment.