From c674e4eccd392fbf3e85ab40ae828667d7026298 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Sun, 14 Jan 2024 21:41:22 +0100 Subject: [PATCH] something --- .../Controllers/RequestController.cs | 23 ++----------------- .../Services/RequestQueueService.cs | 7 +++++- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs index c30caea..833d4a6 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs @@ -9,7 +9,6 @@ public class RequestController : ControllerBase { private readonly CachedFileProvider _cachedFileProvider; private readonly RequestQueueService _requestQueue; - private static readonly SemaphoreSlim _parallelRequestSemaphore = new(500); public RequestController(ILogger logger, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue) : base(logger) { @@ -21,26 +20,18 @@ public class RequestController : ControllerBase [Route(MareFiles.Request_Cancel)] public async Task CancelQueueRequest(Guid requestId) { - await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted); - try { _requestQueue.RemoveFromQueue(requestId, MareUser, IsPriority); return Ok(); } catch (OperationCanceledException) { return BadRequest(); } - finally - { - _parallelRequestSemaphore.Release(); - } } [HttpPost] [Route(MareFiles.Request_Enqueue)] public async Task PreRequestFilesAsync([FromBody] IEnumerable files) { - await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted); - try { foreach (var file in files) @@ -50,33 +41,23 @@ public class RequestController : ControllerBase } Guid g = Guid.NewGuid(); - _requestQueue.EnqueueUser(new(g, MareUser, files.ToList()), IsPriority); + await _requestQueue.EnqueueUser(new(g, MareUser, files.ToList()), IsPriority, HttpContext.RequestAborted); return Ok(g); } catch (OperationCanceledException) { return BadRequest(); } - finally - { - _parallelRequestSemaphore.Release(); - } } [HttpGet] [Route(MareFiles.Request_Check)] public async Task CheckQueueAsync(Guid requestId, [FromBody] IEnumerable files) { - await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted); - try { if (!_requestQueue.StillEnqueued(requestId, MareUser, IsPriority)) - _requestQueue.EnqueueUser(new(requestId, MareUser, files.ToList()), IsPriority); + await _requestQueue.EnqueueUser(new(requestId, MareUser, files.ToList()), IsPriority, HttpContext.RequestAborted); return Ok(); } catch (OperationCanceledException) { return BadRequest(); } - finally - { - _parallelRequestSemaphore.Release(); - } } } \ No newline at end of file diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs index c17abc7..151314f 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs @@ -44,8 +44,13 @@ public class RequestQueueService : IHostedService req.MarkActive(); } - public void EnqueueUser(UserRequest request, bool isPriority) + public async Task EnqueueUser(UserRequest request, bool isPriority, CancellationToken token) { + while (_queueProcessingSemaphore.CurrentCount == 0) + { + await Task.Delay(50, token).ConfigureAwait(false); + } + _logger.LogDebug("Enqueueing req {guid} from {user} for {file}", request.RequestId, request.User, string.Join(", ", request.FileIds)); GetQueue(isPriority).Enqueue(request);