adjust try/catch/finally for semaphore release

This commit is contained in:
rootdarkarchon
2023-01-15 00:52:21 +01:00
parent b806ef8b7b
commit 3fc6b01df9

View File

@@ -24,46 +24,66 @@ public class RequestController : ControllerBase
[Route(MareFiles.Request_Enqueue)] [Route(MareFiles.Request_Enqueue)]
public async Task<IActionResult> PreRequestFilesAsync([FromBody] List<string> files) public async Task<IActionResult> PreRequestFilesAsync([FromBody] List<string> files)
{ {
await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted); try
foreach (var file in files)
{ {
_logger.LogDebug("Prerequested file: " + file); await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted);
_cachedFileProvider.DownloadFileWhenRequired(file, Authorization); foreach (var file in files)
} {
_logger.LogDebug("Prerequested file: " + file);
_cachedFileProvider.DownloadFileWhenRequired(file, Authorization);
}
_parallelRequestSemaphore.Release(); return Ok();
return Ok(); }
catch (OperationCanceledException) { return BadRequest(); }
finally
{
_parallelRequestSemaphore.Release();
}
} }
[HttpGet] [HttpGet]
[Route(MareFiles.Request_RequestFile)] [Route(MareFiles.Request_RequestFile)]
public async Task<IActionResult> RequestFile(string file) public async Task<IActionResult> RequestFile(string file)
{ {
await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted); try
Guid g = Guid.NewGuid(); {
_cachedFileProvider.DownloadFileWhenRequired(file, Authorization); await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted);
var queueStatus = await _requestQueue.EnqueueUser(new(g, MareUser, file)); Guid g = Guid.NewGuid();
_parallelRequestSemaphore.Release(); _cachedFileProvider.DownloadFileWhenRequired(file, Authorization);
return Ok(JsonSerializer.Serialize(new QueueRequestDto(g, queueStatus))); var queueStatus = await _requestQueue.EnqueueUser(new(g, MareUser, file));
return Ok(JsonSerializer.Serialize(new QueueRequestDto(g, queueStatus)));
}
catch (OperationCanceledException) { return BadRequest(); }
finally
{
_parallelRequestSemaphore.Release();
}
} }
[HttpGet] [HttpGet]
[Route(MareFiles.Request_CheckQueue)] [Route(MareFiles.Request_CheckQueue)]
public async Task<IActionResult> CheckQueueAsync(Guid requestId) public async Task<IActionResult> CheckQueueAsync(Guid requestId)
{ {
await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted); try
if (_requestQueue.IsActiveProcessing(requestId, MareUser, out _)) {
await _parallelRequestSemaphore.WaitAsync(HttpContext.RequestAborted);
if (_requestQueue.IsActiveProcessing(requestId, MareUser, out _))
{
return Ok();
}
if (_requestQueue.StillEnqueued(requestId, MareUser, out int position))
{
return Conflict(position);
}
return BadRequest();
}
catch (OperationCanceledException) { return BadRequest(); }
finally
{ {
_parallelRequestSemaphore.Release(); _parallelRequestSemaphore.Release();
return Ok();
} }
if (_requestQueue.StillEnqueued(requestId, MareUser, out int position))
{
_parallelRequestSemaphore.Release();
return Conflict(position);
}
return BadRequest();
} }
} }