temporary test limiting parallel requests to 500
This commit is contained in:
		| @@ -11,6 +11,7 @@ public class RequestController : ControllerBase | ||||
| { | ||||
|     private readonly CachedFileProvider _cachedFileProvider; | ||||
|     private readonly RequestQueueService _requestQueue; | ||||
|     private static SemaphoreSlim _parallelRequestSemaphore = new(500); | ||||
|  | ||||
|     public RequestController(ILogger<RequestController> logger, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue, | ||||
|         ServerTokenGenerator generator) : base(logger, generator) | ||||
| @@ -21,14 +22,16 @@ public class RequestController : ControllerBase | ||||
|  | ||||
|     [HttpPost] | ||||
|     [Route(MareFiles.Request_Enqueue)] | ||||
|     public IActionResult PreRequestFiles([FromBody] List<string> files) | ||||
|     public async Task<IActionResult> PreRequestFilesAsync([FromBody] List<string> files) | ||||
|     { | ||||
|         await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted); | ||||
|         foreach (var file in files) | ||||
|         { | ||||
|             _logger.LogDebug("Prerequested file: " + file); | ||||
|             _cachedFileProvider.DownloadFileWhenRequired(file, Authorization); | ||||
|         } | ||||
|  | ||||
|         _parallelRequestSemaphore.Release(); | ||||
|         return Ok(); | ||||
|     } | ||||
|  | ||||
| @@ -36,19 +39,30 @@ public class RequestController : ControllerBase | ||||
|     [Route(MareFiles.Request_RequestFile)] | ||||
|     public async Task<IActionResult> RequestFile(string file) | ||||
|     { | ||||
|         await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted); | ||||
|         Guid g = Guid.NewGuid(); | ||||
|         _cachedFileProvider.DownloadFileWhenRequired(file, Authorization); | ||||
|         var queueStatus = await _requestQueue.EnqueueUser(new(g, MareUser, file)); | ||||
|         _parallelRequestSemaphore.Release(); | ||||
|         return Ok(JsonSerializer.Serialize(new QueueRequestDto(g, queueStatus))); | ||||
|     } | ||||
|  | ||||
|     [HttpGet] | ||||
|     [Route(MareFiles.Request_CheckQueue)] | ||||
|     public IActionResult CheckQueue(Guid requestId) | ||||
|     public async Task<IActionResult> CheckQueueAsync(Guid requestId) | ||||
|     { | ||||
|         if (_requestQueue.IsActiveProcessing(requestId, MareUser, out _)) return Ok(); | ||||
|         await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted); | ||||
|         if (_requestQueue.IsActiveProcessing(requestId, MareUser, out _)) | ||||
|         { | ||||
|             _parallelRequestSemaphore.Release(); | ||||
|             return Ok(); | ||||
|         } | ||||
|  | ||||
|         if (_requestQueue.StillEnqueued(requestId, MareUser, out int position)) return Conflict(position); | ||||
|         if (_requestQueue.StillEnqueued(requestId, MareUser, out int position)) | ||||
|         { | ||||
|             _parallelRequestSemaphore.Release(); | ||||
|             return Conflict(position); | ||||
|         } | ||||
|  | ||||
|         return BadRequest(); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 rootdarkarchon
					rootdarkarchon