From 31e0a8ea658caea867e7d8e87241a3b576a5d58f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gurhem?= Date: Wed, 25 Sep 2024 10:38:21 +0200 Subject: [PATCH] refactor: factorize some code --- Common/src/Pollster/TaskHandler.cs | 95 ++++++++++++++---------------- 1 file changed, 44 insertions(+), 51 deletions(-) diff --git a/Common/src/Pollster/TaskHandler.cs b/Common/src/Pollster/TaskHandler.cs index 11ed45764..d6f37df93 100644 --- a/Common/src/Pollster/TaskHandler.cs +++ b/Common/src/Pollster/TaskHandler.cs @@ -448,38 +448,20 @@ await submitter_.CompleteTaskAsync(taskData_, messageHandler_.Status = QueueMessageStatus.Poisonous; var retryId = taskData_.RetryId(); + TaskData retryData; + var taskNotFound = false; + var taskExists = false; try { - var retryData = await taskTable_.ReadTaskAsync(retryId, - lateCts_.Token) - .ConfigureAwait(false); - if (retryData.Status is TaskStatus.Creating or TaskStatus.Submitted) - { - logger_.LogWarning("Retried task {task} is in {status}; trying to finalize task creation", - retryId, - retryData.Status); - await submitter_.FinalizeTaskCreation(new List - { - new(retryId, - retryData.PayloadId, - retryData.Options, - retryData.ExpectedOutputIds, - retryData.DataDependencies), - }, - sessionData_, - taskData_.TaskId, - CancellationToken.None) - .ConfigureAwait(false); - return retryData.Status == TaskStatus.Submitted - ? AcquisitionStatus.TaskIsRetriedAndRetryIsSubmitted - : AcquisitionStatus.TaskIsRetriedAndRetryIsCreating; - } + retryData = await taskTable_.ReadTaskAsync(retryId, + lateCts_.Token) + .ConfigureAwait(false); } catch (TaskNotFoundException) { logger_.LogWarning("Retried task {task} was not found in the database; resubmit it", retryId); - + taskNotFound = true; try { await taskTable_.RetryTask(taskData_, @@ -490,36 +472,47 @@ await taskTable_.RetryTask(taskData_, { logger_.LogWarning("Retried task {task} already exists; finalize creation if needed", retryId); + taskExists = true; } - finally - { - var retryData = await taskTable_.ReadTaskAsync(retryId, - lateCts_.Token) - .ConfigureAwait(false); - if (retryData.Status is TaskStatus.Creating or TaskStatus.Submitted) - { - logger_.LogWarning("Retried task {task} is in {status}; trying to finalize task creation", - retryId, - retryData.Status); - await submitter_.FinalizeTaskCreation(new List - { - new(retryId, - retryData.PayloadId, - retryData.Options, - retryData.ExpectedOutputIds, - retryData.DataDependencies), - }, - sessionData_, - taskData_.TaskId, - CancellationToken.None) - .ConfigureAwait(false); - } - } - return AcquisitionStatus.TaskIsRetriedAndRetryIsNotFound; + retryData = await taskTable_.ReadTaskAsync(retryId, + CancellationToken.None) + .ConfigureAwait(false); + } + + if (retryData.Status is TaskStatus.Creating or TaskStatus.Submitted) + { + logger_.LogWarning("Retried task {task} is in {status}; trying to finalize task creation", + retryId, + retryData.Status); + await submitter_.FinalizeTaskCreation(new List + { + new(retryId, + retryData.PayloadId, + retryData.Options, + retryData.ExpectedOutputIds, + retryData.DataDependencies), + }, + sessionData_, + taskData_.TaskId, + CancellationToken.None) + .ConfigureAwait(false); + } + + switch ((taskNotFound, taskExists, retryData.Status)) + { + case (false, false, TaskStatus.Submitted): + return AcquisitionStatus.TaskIsRetriedAndRetryIsSubmitted; + case (false, false, TaskStatus.Creating): + return AcquisitionStatus.TaskIsRetriedAndRetryIsCreating; + case (true, false, TaskStatus.Submitted): + return AcquisitionStatus.TaskIsRetriedAndRetryIsNotFound; + case (true, false, TaskStatus.Creating): + return AcquisitionStatus.TaskIsRetriedAndRetryIsNotFound; + default: + return AcquisitionStatus.TaskIsRetried; } - return AcquisitionStatus.TaskIsRetried; case TaskStatus.Unspecified: default: logger_.LogCritical("Task was in an unknown state {state}",