Merge pull request #1379 from wabbajack-tools/retry_authored_files_uploads

Retry all authored file uploads
This commit is contained in:
Timothy Baldridge 2021-03-19 18:27:23 -07:00 committed by GitHub
commit d0b5b8448f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -80,12 +80,13 @@ namespace Wabbajack.Lib.AuthorApi
{ {
var definition = await GenerateFileDefinition(queue, path, progressFn); var definition = await GenerateFileDefinition(queue, path, progressFn);
using (var result = await _client.PutAsync($"{Consts.WabbajackBuildServerUri}authored_files/create", await CircuitBreaker.WithAutoRetryAllAsync(async () =>
new StringContent(definition.ToJson())))
{ {
using var result = await _client.PutAsync($"{Consts.WabbajackBuildServerUri}authored_files/create",
new StringContent(definition.ToJson()));
progressFn("Starting upload", Percent.Zero); progressFn("Starting upload", Percent.Zero);
definition.ServerAssignedUniqueId = await result.Content.ReadAsStringAsync(); definition.ServerAssignedUniqueId = await result.Content.ReadAsStringAsync();
} });
var results = await definition.Parts.PMap(queue, async part => var results = await definition.Parts.PMap(queue, async part =>
{ {
@ -97,10 +98,7 @@ namespace Wabbajack.Lib.AuthorApi
await fs.ReadAsync(buffer); await fs.ReadAsync(buffer);
} }
int retries = 0; return await CircuitBreaker.WithAutoRetryAllAsync(async () =>
while (true)
{
try
{ {
using var putResult = await _client.PutAsync( using var putResult = await _client.PutAsync(
$"{Consts.WabbajackBuildServerUri}authored_files/{definition.ServerAssignedUniqueId}/part/{part.Index}", $"{Consts.WabbajackBuildServerUri}authored_files/{definition.ServerAssignedUniqueId}/part/{part.Index}",
@ -109,28 +107,19 @@ namespace Wabbajack.Lib.AuthorApi
if (hash != part.Hash) if (hash != part.Hash)
throw new InvalidDataException("Hashes don't match"); throw new InvalidDataException("Hashes don't match");
return hash; return hash;
} });
catch (Exception ex)
{
Utils.Log("Failure uploading part");
Utils.Log(ex.ToString());
if (retries <= 4)
{
retries++;
continue;
}
Utils.ErrorThrow(ex);
}
}
}); });
progressFn("Finalizing upload", Percent.Zero); progressFn("Finalizing upload", Percent.Zero);
using (var result = await _client.PutAsync($"{Consts.WabbajackBuildServerUri}authored_files/{definition.ServerAssignedUniqueId}/finish", return await CircuitBreaker.WithAutoRetryAllAsync(async () =>
new StringContent(definition.ToJson())))
{ {
using var result = await _client.PutAsync(
$"{Consts.WabbajackBuildServerUri}authored_files/{definition.ServerAssignedUniqueId}/finish",
new StringContent(definition.ToJson()));
progressFn("Finished", Percent.One); progressFn("Finished", Percent.One);
return new Uri(await result.Content.ReadAsStringAsync()); return new Uri(await result.Content.ReadAsStringAsync());
} });
} }
} }
} }