Use performance settings to limit maximum memory per download

This commit is contained in:
UrbanCMC 2023-08-20 12:58:43 +02:00
parent a77bb6cc44
commit 039e3603ce
3 changed files with 12 additions and 4 deletions

View File

@ -7,6 +7,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Downloader; using Downloader;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Wabbajack.Configuration;
using Wabbajack.Hashing.xxHash64; using Wabbajack.Hashing.xxHash64;
using Wabbajack.Paths; using Wabbajack.Paths;
using Wabbajack.Paths.IO; using Wabbajack.Paths.IO;
@ -20,17 +21,19 @@ internal class ResumableDownloader
private readonly HttpRequestMessage _msg; private readonly HttpRequestMessage _msg;
private readonly AbsolutePath _outputPath; private readonly AbsolutePath _outputPath;
private readonly AbsolutePath _packagePath; private readonly AbsolutePath _packagePath;
private readonly PerformanceSettings _performanceSettings;
private readonly ILogger<SingleThreadedDownloader> _logger; private readonly ILogger<SingleThreadedDownloader> _logger;
private CancellationToken _token; private CancellationToken _token;
private Exception? _error; private Exception? _error;
public ResumableDownloader(HttpRequestMessage msg, AbsolutePath outputPath, IJob job, ILogger<SingleThreadedDownloader> logger) public ResumableDownloader(HttpRequestMessage msg, AbsolutePath outputPath, IJob job, PerformanceSettings performanceSettings, ILogger<SingleThreadedDownloader> logger)
{ {
_job = job; _job = job;
_msg = msg; _msg = msg;
_outputPath = outputPath; _outputPath = outputPath;
_packagePath = outputPath.WithExtension(Extension.FromPath(".download_package")); _packagePath = outputPath.WithExtension(Extension.FromPath(".download_package"));
_performanceSettings = performanceSettings;
_logger = logger; _logger = logger;
} }
@ -99,8 +102,10 @@ internal class ResumableDownloader
private DownloadConfiguration CreateConfiguration(HttpRequestMessage message) private DownloadConfiguration CreateConfiguration(HttpRequestMessage message)
{ {
var maximumMemoryPerDownloadThreadMb = Math.Max(0, _performanceSettings.MaximumMemoryPerDownloadThreadMb);
var configuration = new DownloadConfiguration var configuration = new DownloadConfiguration
{ {
MaximumMemoryBufferBytes = maximumMemoryPerDownloadThreadMb * 1024 * 1024,
Timeout = (int)TimeSpan.FromSeconds(120).TotalMilliseconds, Timeout = (int)TimeSpan.FromSeconds(120).TotalMilliseconds,
ReserveStorageSpaceBeforeStartingDownload = true, ReserveStorageSpaceBeforeStartingDownload = true,
RequestConfiguration = new RequestConfiguration RequestConfiguration = new RequestConfiguration

View File

@ -7,6 +7,7 @@ using System.Net.Http.Headers;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Wabbajack.Configuration;
using Wabbajack.Hashing.xxHash64; using Wabbajack.Hashing.xxHash64;
using Wabbajack.Networking.Http.Interfaces; using Wabbajack.Networking.Http.Interfaces;
using Wabbajack.Paths; using Wabbajack.Paths;
@ -19,18 +20,20 @@ public class SingleThreadedDownloader : IHttpDownloader
{ {
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ILogger<SingleThreadedDownloader> _logger; private readonly ILogger<SingleThreadedDownloader> _logger;
private readonly PerformanceSettings _settings;
public SingleThreadedDownloader(ILogger<SingleThreadedDownloader> logger, HttpClient client) public SingleThreadedDownloader(ILogger<SingleThreadedDownloader> logger, HttpClient client, MainSettings settings)
{ {
_logger = logger; _logger = logger;
_client = client; _client = client;
_settings = settings.PerformanceSettings;
} }
public async Task<Hash> Download(HttpRequestMessage message, AbsolutePath outputPath, IJob job, public async Task<Hash> Download(HttpRequestMessage message, AbsolutePath outputPath, IJob job,
CancellationToken token) CancellationToken token)
{ {
Exception downloadError = null!; Exception downloadError = null!;
var downloader = new ResumableDownloader(message, outputPath, job, _logger); var downloader = new ResumableDownloader(message, outputPath, job, _settings, _logger);
for (var i = 0; i < 3; i++) for (var i = 0; i < 3; i++)
{ {
try try

View File

@ -8,7 +8,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Downloader" Version="3.0.4" /> <PackageReference Include="Downloader" Version="3.0.6" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.2-mauipre.1.22102.15" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.2-mauipre.1.22102.15" />
</ItemGroup> </ItemGroup>