Skip to content

Commit

Permalink
Added: A simple retry policy for mod downloads, and some parallelism.
Browse files Browse the repository at this point in the history
  • Loading branch information
Sewer56 committed May 3, 2024
1 parent 6d6992c commit 9623698
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 13 deletions.
11 changes: 11 additions & 0 deletions changelog-template.hbs
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
## Changelog (1.27.6)

[Read and Discuss in a Browser](https://github.com/Reloaded-Project/Reloaded-II/discussions/369).
[Previous Changelog](https://github.com/Reloaded-Project/Reloaded-II/releases/tag/1.27.5).

- Reduced time taken to download many small mod updates.
- Improved fault handling for mod updates.

This was done by adding an exponential backoff retry policy for mod updates. In addition, we now update 4 mods in parallel,
instead of just 1.

## Changelog (1.27.5)

[Read and Discuss in a Browser](https://github.com/Reloaded-Project/Reloaded-II/discussions/369).
Expand Down
2 changes: 1 addition & 1 deletion source/Reloaded.Mod.Launcher/Reloaded.Mod.Launcher.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<UseWPF>true</UseWPF>
<AssemblyName>Reloaded-II</AssemblyName>
<RootNamespace>Reloaded.Mod.Launcher</RootNamespace>
<Version>1.27.5</Version>
<Version>1.27.6</Version>
<Copyright>Sewer56 ~ $([System.DateTime]::UtcNow.ToString("s")) | $(Version)</Copyright>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<ApplicationIcon>appicon.ico</ApplicationIcon>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<Nullable>enable</Nullable>
<NoWarn>CS0067</NoWarn>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Version>2.2.0</Version>
<Version>2.2.1</Version>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>Sewer56</Authors>
Expand All @@ -33,6 +33,7 @@
<PackageReference Include="NuGet.Packaging" Version="6.3.0" />
<PackageReference Include="NuGet.Packaging.Core" Version="6.3.0" />
<PackageReference Include="NuGet.Protocol" Version="6.3.0" />
<PackageReference Include="Polly" Version="8.3.1" />
<PackageReference Include="PropertyChanged.Fody" Version="3.4.1">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down
36 changes: 26 additions & 10 deletions source/Reloaded.Mod.Loader.Update/Updater.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using Polly;

namespace Reloaded.Mod.Loader.Update;

/// <summary>
Expand Down Expand Up @@ -89,17 +91,31 @@ public async Task Update(ModUpdateSummary summary, IProgress<double>? progressHa
var progressMixer = new ProgressSlicer(progressHandler);
var singleItemProgress = 1.0 / summary.ManagerModResultPairs.Count;

for (var x = 0; x < summary.ManagerModResultPairs.Count; x++)
var retryPolicy = Policy
.Handle<Exception>()
.WaitAndRetryAsync(
retryCount: 5,
sleepDurationProvider: attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt))
);

var parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = 4 };
// Note: We don't have a 'ForEachAsync' in .NET 5
await Task.Run(() =>
{
var slice = progressMixer.Slice(singleItemProgress);
var pair = summary.ManagerModResultPairs[x];
var manager = pair.Manager;
var version = pair.Result.LastVersion;

await manager.PrepareUpdateAsync(version!, slice);
await manager.StartUpdateAsync(version!, new OutOfProcessOptions(), new UpdateOptions() { CleanupAfterUpdate = true });
manager.Dispose();
}
Parallel.ForEach(summary.ManagerModResultPairs, parallelOptions, pair =>
{
var slice = progressMixer.Slice(singleItemProgress);
var manager = pair.Manager;
var version = pair.Result.LastVersion;
retryPolicy.ExecuteAsync(async () =>
{
await manager.PrepareUpdateAsync(version!, slice);
await manager.StartUpdateAsync(version!, new OutOfProcessOptions(), new UpdateOptions() { CleanupAfterUpdate = true });
manager.Dispose();
}).GetAwaiter().GetResult();
});
});
}

private List<ResolverModPair> GetResolvers()
Expand Down
2 changes: 1 addition & 1 deletion source/Reloaded.Mod.Loader/Reloaded.Mod.Loader.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<NoWarn>$(NoWarn);NU1605;NU1701</NoWarn>
<Version>1.27.5</Version>
<Version>1.27.6</Version>
<Platforms>x86;x64</Platforms>
<GenerateDepsJson>false</GenerateDepsJson>
<DebugType>portable</DebugType>
Expand Down

0 comments on commit 9623698

Please sign in to comment.