parallel for the queue processing, up request semaphore, remove queue position (unused), bump api version
This commit is contained in:
2
MareAPI
2
MareAPI
Submodule MareAPI updated: bd4c360a4f...f1c0fc76a9
@@ -11,7 +11,7 @@ public class RequestController : ControllerBase
|
|||||||
{
|
{
|
||||||
private readonly CachedFileProvider _cachedFileProvider;
|
private readonly CachedFileProvider _cachedFileProvider;
|
||||||
private readonly RequestQueueService _requestQueue;
|
private readonly RequestQueueService _requestQueue;
|
||||||
private static SemaphoreSlim _parallelRequestSemaphore = new(250);
|
private static SemaphoreSlim _parallelRequestSemaphore = new(500);
|
||||||
|
|
||||||
public RequestController(ILogger<RequestController> logger, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue,
|
public RequestController(ILogger<RequestController> logger, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue,
|
||||||
ServerTokenGenerator generator) : base(logger, generator)
|
ServerTokenGenerator generator) : base(logger, generator)
|
||||||
@@ -73,9 +73,9 @@ public class RequestController : ControllerBase
|
|||||||
return Ok();
|
return Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_requestQueue.StillEnqueued(requestId, MareUser, out int position))
|
if (_requestQueue.StillEnqueued(requestId, MareUser))
|
||||||
{
|
{
|
||||||
return Conflict(position);
|
return Conflict();
|
||||||
}
|
}
|
||||||
|
|
||||||
return BadRequest();
|
return BadRequest();
|
||||||
|
|||||||
@@ -66,17 +66,9 @@ public class RequestQueueService : IHostedService
|
|||||||
throw new Exception("Error during EnqueueUser");
|
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));
|
return _queue.FirstOrDefault(c => c.RequestId == request && string.Equals(c.User, user, StringComparison.Ordinal)) != null;
|
||||||
if (result != null)
|
|
||||||
{
|
|
||||||
queuePosition = Array.IndexOf(_queue.ToArray(), result);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
queuePosition = -1;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsActiveProcessing(Guid request, string user, out UserRequest userRequest)
|
public bool IsActiveProcessing(Guid request, string user, out UserRequest userRequest)
|
||||||
@@ -109,8 +101,14 @@ public class RequestQueueService : IHostedService
|
|||||||
|
|
||||||
try
|
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 && !_userQueueRequests[i].IsActive && _userQueueRequests[i].ExpirationDate < DateTime.UtcNow) _userQueueRequests[i] = null;
|
||||||
|
|
||||||
if (_userQueueRequests[i] == null)
|
if (_userQueueRequests[i] == null)
|
||||||
@@ -120,9 +118,7 @@ public class RequestQueueService : IHostedService
|
|||||||
DequeueIntoSlot(request, i);
|
DequeueIntoSlot(request, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
if (!_queue.Any()) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
Reference in New Issue
Block a user