From 4c7504b41e5f8e5e19790e17ef1c554153ab9365 Mon Sep 17 00:00:00 2001 From: gafetinov Date: Mon, 27 Nov 2023 16:51:00 +0400 Subject: [PATCH] Add fields canRerun and canCancel to task meta --- .../Api/IRtqMonitoringApi.cs | 2 +- .../Api/RtqMonitoringTaskExtensions.cs | 2 ++ .../Api/RtqMonitoringTaskMeta.cs | 6 ++++++ .../HandleTaskMetaStorageTest.cs | 2 +- .../Cassandra/Entities/TaskMetaInformation.cs | 19 +++++++++++++++++++ .../Configuration/IRtqTaskDataRegistry.cs | 2 +- 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Api/IRtqMonitoringApi.cs b/Cassandra.DistributedTaskQueue.Monitoring/Api/IRtqMonitoringApi.cs index b0ef8b36..d561b68a 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Api/IRtqMonitoringApi.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Api/IRtqMonitoringApi.cs @@ -11,7 +11,7 @@ public interface IRtqMonitoringApi { [NotNull, ItemNotNull] string[] GetAllTaskStates(); - + [NotNull, ItemNotNull] string[] GetAllTasksNames(); diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskExtensions.cs b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskExtensions.cs index 7712eab1..088b404e 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskExtensions.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskExtensions.cs @@ -21,6 +21,8 @@ public static RtqMonitoringTaskMeta ToMonitoringTaskMeta(this TaskMetaInformatio State = meta.State, Attempts = meta.Attempts, ParentTaskId = meta.ParentTaskId, + CanCancel = meta.CanCancel(), + CanRerun = meta.CanRerun() }; } } diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs index 6514f3da..863ff7ae 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs @@ -59,5 +59,11 @@ public class RtqMonitoringTaskMeta [JsonProperty("parentTaskId")] public string ParentTaskId { get; set; } + + [JsonProperty("canCancel")] + public bool CanCancel { get; set; } + + [JsonProperty("canRerun")] + public bool CanRerun { get; set; } } } \ No newline at end of file diff --git a/Cassandra.DistributedTaskQueue.Tests/RemoteTaskQueue/RepositoriesTests/HandleTaskMetaStorageTest.cs b/Cassandra.DistributedTaskQueue.Tests/RemoteTaskQueue/RepositoriesTests/HandleTaskMetaStorageTest.cs index f1ba04d1..f64a5d91 100644 --- a/Cassandra.DistributedTaskQueue.Tests/RemoteTaskQueue/RepositoriesTests/HandleTaskMetaStorageTest.cs +++ b/Cassandra.DistributedTaskQueue.Tests/RemoteTaskQueue/RepositoriesTests/HandleTaskMetaStorageTest.cs @@ -166,7 +166,7 @@ public string[] GetAllTaskStates() { throw new NotImplementedException(); } - + public string[] GetAllTaskNames() { throw new NotImplementedException(); diff --git a/Cassandra.DistributedTaskQueue/Cassandra/Entities/TaskMetaInformation.cs b/Cassandra.DistributedTaskQueue/Cassandra/Entities/TaskMetaInformation.cs index 9c142b95..88639942 100644 --- a/Cassandra.DistributedTaskQueue/Cassandra/Entities/TaskMetaInformation.cs +++ b/Cassandra.DistributedTaskQueue/Cassandra/Entities/TaskMetaInformation.cs @@ -87,6 +87,16 @@ internal List AddExceptionInfoId([NotNull] TimeGuid newExceptionInfoId return TimeSpan.FromTicks(Math.Max(ExpirationTimestampTicks.Value - Timestamp.Now.Ticks, TimeSpan.TicksPerSecond)); } + public bool CanCancel() + { + return cancelableStates.Contains(State); + } + + public bool CanRerun() + { + return rerunnableStates.Contains(State); + } + public void SetOrUpdateTtl(TimeSpan ttl) { var now = Timestamp.Now; @@ -152,5 +162,14 @@ private static string TicksToString(long ticks) } public const int TaskExceptionIfoIdsLimit = 201; + private readonly TaskState[] cancelableStates = new[] {TaskState.New, TaskState.WaitingForRerun, TaskState.WaitingForRerunAfterError}; + + private readonly TaskState[] rerunnableStates = new[] + { + TaskState.Fatal, + TaskState.Finished, + TaskState.WaitingForRerun, + TaskState.WaitingForRerunAfterError + }; } } \ No newline at end of file diff --git a/Cassandra.DistributedTaskQueue/Configuration/IRtqTaskDataRegistry.cs b/Cassandra.DistributedTaskQueue/Configuration/IRtqTaskDataRegistry.cs index 77c1f760..0396217d 100644 --- a/Cassandra.DistributedTaskQueue/Configuration/IRtqTaskDataRegistry.cs +++ b/Cassandra.DistributedTaskQueue/Configuration/IRtqTaskDataRegistry.cs @@ -7,7 +7,7 @@ namespace SkbKontur.Cassandra.DistributedTaskQueue.Configuration public interface IRtqTaskDataRegistry { string[] GetAllTaskStates(); - + string[] GetAllTaskNames(); string GetTaskName(Type type);