diff --git a/MareAPI b/MareAPI index bd4c360..f1c0fc7 160000 --- a/MareAPI +++ b/MareAPI @@ -1 +1 @@ -Subproject commit bd4c360a4f1d0b1caa0e2c00d19eed7bd209d931 +Subproject commit f1c0fc76a9195fba84f8e709bc9297e97d7c9214 diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs index 9950d09..78e1705 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/RequestController.cs @@ -11,7 +11,7 @@ public class RequestController : ControllerBase { private readonly CachedFileProvider _cachedFileProvider; private readonly RequestQueueService _requestQueue; - private static SemaphoreSlim _parallelRequestSemaphore = new(250); + private static SemaphoreSlim _parallelRequestSemaphore = new(500); public RequestController(ILogger logger, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue, ServerTokenGenerator generator) : base(logger, generator) @@ -73,9 +73,9 @@ public class RequestController : ControllerBase return Ok(); } - if (_requestQueue.StillEnqueued(requestId, MareUser, out int position)) + if (_requestQueue.StillEnqueued(requestId, MareUser)) { - return Conflict(position); + return Conflict(); } return BadRequest(); diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs index 987f269..2fb456e 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Services/RequestQueueService.cs @@ -66,17 +66,9 @@ public class RequestQueueService : IHostedService throw new Exception("Error during EnqueueUser"); } - public bool StillEnqueued(Guid request, string user, out int queuePosition) + public bool StillEnqueued(Guid request, string user) { - var result = _queue.FirstOrDefault(c => c.RequestId == request && string.Equals(c.User, user, StringComparison.Ordinal)); - if (result != null) - { - queuePosition = Array.IndexOf(_queue.ToArray(), result); - return true; - } - - queuePosition = -1; - return false; + return _queue.FirstOrDefault(c => c.RequestId == request && string.Equals(c.User, user, StringComparison.Ordinal)) != null; } public bool IsActiveProcessing(Guid request, string user, out UserRequest userRequest) @@ -109,8 +101,14 @@ public class RequestQueueService : IHostedService try { - for (int i = 0; i < _userQueueRequests.Length; i++) + Parallel.For(0, _userQueueRequests.Length, new ParallelOptions() { + MaxDegreeOfParallelism = 10 + }, + (i) => + { + if (!_queue.Any()) return; + if (_userQueueRequests[i] != null && !_userQueueRequests[i].IsActive && _userQueueRequests[i].ExpirationDate < DateTime.UtcNow) _userQueueRequests[i] = null; if (_userQueueRequests[i] == null) @@ -120,9 +118,7 @@ public class RequestQueueService : IHostedService DequeueIntoSlot(request, i); } } - - if (!_queue.Any()) break; - } + }); } catch (Exception ex)