diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs index ee52f91..966ebf5 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs @@ -1,4 +1,5 @@ using MareSynchronos.API.Routes; +using MareSynchronosShared.Data; using MareSynchronosStaticFilesServer.Services; using Microsoft.AspNetCore.Mvc; @@ -9,12 +10,14 @@ public class RequestController : ControllerBase { private readonly CachedFileProvider _cachedFileProvider; private readonly RequestQueueService _requestQueue; + private readonly MareDbContext _mareDbContext; private static readonly SemaphoreSlim _parallelRequestSemaphore = new(500); - public RequestController(ILogger logger, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue) : base(logger) + public RequestController(ILogger logger, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue, MareDbContext mareDbContext) : base(logger) { _cachedFileProvider = cachedFileProvider; _requestQueue = requestQueue; + _mareDbContext = mareDbContext; } [HttpGet] @@ -48,7 +51,7 @@ public class RequestController : ControllerBase } Guid g = Guid.NewGuid(); - await _requestQueue.EnqueueUser(new(g, MareUser, files.ToList())); + await _requestQueue.EnqueueUser(new(g, MareUser, files.ToList()), _mareDbContext); return Ok(g); } @@ -65,8 +68,8 @@ public class RequestController : ControllerBase { try { - if (!await _requestQueue.StillEnqueued(requestId, MareUser)) - await _requestQueue.EnqueueUser(new(requestId, MareUser, files.ToList())); + if (!await _requestQueue.StillEnqueued(requestId, MareUser, _mareDbContext)) + await _requestQueue.EnqueueUser(new(requestId, MareUser, files.ToList()), _mareDbContext); return Ok(); } catch (OperationCanceledException) { return BadRequest(); } diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs index 96ba0ce..bc39a08 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs @@ -16,7 +16,6 @@ public class RequestQueueService : IHostedService private record PriorityEntry(bool IsHighPriority, DateTime LastChecked); private readonly IHubContext _hubContext; - private readonly MareDbContext _mareDbContext; private readonly ILogger _logger; private readonly MareMetrics _metrics; private readonly ConcurrentQueue _queue = new(); @@ -32,7 +31,7 @@ public class RequestQueueService : IHostedService private System.Timers.Timer _queueTimer; public RequestQueueService(MareMetrics metrics, IConfigurationService configurationService, - ILogger logger, IHubContext hubContext, MareDbContext mareDbContext) + ILogger logger, IHubContext hubContext) { _userQueueRequests = new UserQueueEntry[configurationService.GetValueOrDefault(nameof(StaticFilesServerConfiguration.DownloadQueueSize), 50)]; _queueExpirationSeconds = configurationService.GetValueOrDefault(nameof(StaticFilesServerConfiguration.DownloadTimeoutSeconds), 5); @@ -41,7 +40,6 @@ public class RequestQueueService : IHostedService _metrics = metrics; _logger = logger; _hubContext = hubContext; - _mareDbContext = mareDbContext; } public void ActivateRequest(Guid request) @@ -51,16 +49,16 @@ public class RequestQueueService : IHostedService req.MarkActive(); } - private async Task IsHighPriority(string uid) + private async Task IsHighPriority(string uid, MareDbContext mareDbContext) { return false; } - public async Task EnqueueUser(UserRequest request) + public async Task EnqueueUser(UserRequest request, MareDbContext mareDbContext) { _logger.LogDebug("Enqueueing req {guid} from {user} for {file}", request.RequestId, request.User, string.Join(", ", request.FileIds)); - bool isPriorityQueue = await IsHighPriority(request.User).ConfigureAwait(false); + bool isPriorityQueue = await IsHighPriority(request.User, mareDbContext).ConfigureAwait(false); if (_queueProcessingSemaphore.CurrentCount == 0) { @@ -139,9 +137,9 @@ public class RequestQueueService : IHostedService return Task.CompletedTask; } - public async Task StillEnqueued(Guid request, string user) + public async Task StillEnqueued(Guid request, string user, MareDbContext mareDbContext) { - bool isPriorityQueue = await IsHighPriority(user).ConfigureAwait(false); + bool isPriorityQueue = await IsHighPriority(user, mareDbContext).ConfigureAwait(false); if (isPriorityQueue) { return _priorityQueue.Any(c => c.RequestId == request && string.Equals(c.User, user, StringComparison.Ordinal));