diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringSearchResults.cs b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringSearchResults.cs index 3919bb96..bed2d35e 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringSearchResults.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringSearchResults.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Serialization; +#nullable enable + +using System.Text.Json.Serialization; namespace SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Api; @@ -8,5 +10,5 @@ public class RtqMonitoringSearchResults public long TotalCount { get; set; } [JsonPropertyName("taskMetas")] - public RtqMonitoringTaskMeta[] TaskMetas { get; set; } + public RtqMonitoringTaskMeta[] TaskMetas { get; set; } = null!; } \ No newline at end of file diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs index 48e3ebed..6135c4bb 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskMeta.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Serialization; +#nullable enable + +using System.Text.Json.Serialization; using SkbKontur.Cassandra.DistributedTaskQueue.Cassandra.Entities; using SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Json; @@ -8,10 +10,10 @@ namespace SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Api; public class RtqMonitoringTaskMeta { [JsonPropertyName("name")] - public string Name { get; set; } + public string Name { get; set; } = null!; [JsonPropertyName("id")] - public string Id { get; set; } + public string Id { get; set; } = null!; [JsonPropertyName("ticks")] [JsonConverter(typeof(LongToStringConverter))] @@ -50,7 +52,7 @@ public class RtqMonitoringTaskMeta public TaskState State { get; set; } [JsonPropertyName("taskActions")] - public TaskActions TaskActions { get; set; } + public TaskActions? TaskActions { get; set; } [JsonPropertyName("attempts")] public int Attempts { get; set; } diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskModel.cs b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskModel.cs index 7819f26f..af66d92f 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskModel.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Api/RtqMonitoringTaskModel.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Serialization; +#nullable enable + +using System.Text.Json.Serialization; using SkbKontur.Cassandra.DistributedTaskQueue.Handling; using SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Json; @@ -10,15 +12,15 @@ public class RtqMonitoringTaskModel public static RtqMonitoringTaskModel Empty => new(); [JsonPropertyName("taskMeta")] - public RtqMonitoringTaskMeta TaskMeta { get; set; } + public RtqMonitoringTaskMeta TaskMeta { get; set; } = null!; [JsonPropertyName("taskData")] [JsonConverter(typeof(TaskDataJsonSerializer))] - public IRtqTaskData TaskData { get; set; } + public IRtqTaskData TaskData { get; set; } = null!; [JsonPropertyName("childTaskIds")] - public string[] ChildTaskIds { get; set; } + public string[] ChildTaskIds { get; set; } = null!; [JsonPropertyName("exceptionInfos")] - public string[] ExceptionInfos { get; set; } + public string[] ExceptionInfos { get; set; } = null!; } \ No newline at end of file diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Api/TimestampRange.cs b/Cassandra.DistributedTaskQueue.Monitoring/Api/TimestampRange.cs index c02735f0..cbde3b87 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Api/TimestampRange.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Api/TimestampRange.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Serialization; +#nullable enable + +using System.Text.Json.Serialization; using SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Json; using SkbKontur.Cassandra.TimeBasedUuid; @@ -9,9 +11,9 @@ public class TimestampRange { [JsonPropertyName("lowerBound")] [JsonConverter(typeof(TimestampJsonConverter))] - public Timestamp LowerBound { get; set; } + public Timestamp LowerBound { get; set; } = null!; [JsonPropertyName("upperBound")] [JsonConverter(typeof(TimestampJsonConverter))] - public Timestamp UpperBound { get; set; } + public Timestamp UpperBound { get; set; } = null!; } \ No newline at end of file diff --git a/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/ElasticsearchResponseWrapperExtensions.cs b/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/ElasticsearchResponseWrapperExtensions.cs index c0508a4d..71322bc8 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/ElasticsearchResponseWrapperExtensions.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/ElasticsearchResponseWrapperExtensions.cs @@ -1,4 +1,6 @@ -using System; +#nullable enable + +using System; using System.Linq; using System.Text; using System.Text.Json; @@ -26,7 +28,7 @@ public static void DieIfBulkRequestFailed(this StringResponse response) { response.EnsureSuccess(); var bulkResponse = JsonSerializer.Deserialize(response.Body); - if (bulkResponse.HasErrors) + if (bulkResponse!.HasErrors) { var innerExceptions = bulkResponse .Items @@ -39,7 +41,7 @@ public static void DieIfBulkRequestFailed(this StringResponse response) } } - private static string ExtendErrorMessageWithElasticInfo(this T response, string errorMessage) + private static string ExtendErrorMessageWithElasticInfo(this T? response, string errorMessage) where T : IElasticsearchResponse { var fullErrorMessage = new StringBuilder($"ElasticSearch error: '{errorMessage}'").AppendLine(); @@ -58,7 +60,7 @@ private static string ExtendErrorMessageWithElasticInfo(this T response, stri return fullErrorMessage.ToString(); } - private static Exception CreateExceptionIfError(ResponseBase responseItem, int requestNumber) + private static Exception? CreateExceptionIfError(ResponseBase responseItem, int requestNumber) { return responseItem.Status >= 400 && responseItem.Status < 600 ? new InvalidOperationException($"Request number #{requestNumber} failed: '{responseItem.ToPrettyJson()}'") diff --git a/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/HitInfo.cs b/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/HitInfo.cs index cdc7f48c..75fe33b6 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/HitInfo.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/HitInfo.cs @@ -1,9 +1,11 @@ -using System.Text.Json.Serialization; +#nullable enable + +using System.Text.Json.Serialization; namespace SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.ElasticsearchClientExtensions.Responses.Search; internal class HitInfo { [JsonPropertyName("_id")] - public string Id { get; set; } + public string Id { get; set; } = null!; } \ No newline at end of file diff --git a/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/HitsCollection.cs b/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/HitsCollection.cs index 9743abf2..70330525 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/HitsCollection.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/HitsCollection.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Serialization; +#nullable enable + +using System.Text.Json.Serialization; using SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Json; @@ -11,5 +13,5 @@ internal class HitsCollection public long TotalCount { get; set; } [JsonPropertyName("hits")] - public HitInfo[] Hits { get; set; } + public HitInfo[] Hits { get; set; } = null!; } \ No newline at end of file diff --git a/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/SearchResponse.cs b/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/SearchResponse.cs index c2f36e5b..48dbdbbf 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/SearchResponse.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/ElasticsearchClientExtensions/Responses/Search/SearchResponse.cs @@ -1,9 +1,11 @@ -using System.Text.Json.Serialization; +#nullable enable + +using System.Text.Json.Serialization; namespace SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.ElasticsearchClientExtensions.Responses.Search; internal class SearchResponse { [JsonPropertyName("hits")] - public HitsCollection Hits { get; set; } + public HitsCollection Hits { get; set; } = null!; } \ No newline at end of file diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Indexer/RtqElasticsearchIndexerSettings.cs b/Cassandra.DistributedTaskQueue.Monitoring/Indexer/RtqElasticsearchIndexerSettings.cs index bfe82107..6cef3801 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Indexer/RtqElasticsearchIndexerSettings.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Indexer/RtqElasticsearchIndexerSettings.cs @@ -1,4 +1,6 @@ -using System; +#nullable enable + +using System; using System.Text.Json; using System.Text.Json.Serialization; diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Indexer/TaskMetaProcessor.cs b/Cassandra.DistributedTaskQueue.Monitoring/Indexer/TaskMetaProcessor.cs index bbb61f76..52ceb0d7 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Indexer/TaskMetaProcessor.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Indexer/TaskMetaProcessor.cs @@ -1,4 +1,6 @@ -using System; +#nullable enable + +using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -67,22 +69,22 @@ private void IndexMetas(TaskMetaInformation[] batch) { var taskDatas = perfGraphiteReporter.ReportTiming("ReadTaskDatas", () => taskDataStorage.Read(batch)); var taskExceptionInfos = perfGraphiteReporter.ReportTiming("ReadTaskExceptionInfos", () => taskExceptionInfoStorage.Read(batch)); - var enrichedBatch = new ( /*[NotNull]*/ TaskMetaInformation TaskMeta, /*[NotNull, ItemNotNull]*/ TaskExceptionInfo[] TaskExceptionInfos, /*[CanBeNull]*/ object TaskData)[batch.Length]; + var enrichedBatch = new ( TaskMetaInformation TaskMeta, TaskExceptionInfo[] TaskExceptionInfos, object? TaskData)[batch.Length]; for (var i = 0; i < batch.Length; i++) { var taskMeta = batch[i]; - object taskDataObj = null; + object? taskDataObj = null; if (taskDatas.TryGetValue(taskMeta.Id, out var taskData)) { if (taskDataRegistry.TryGetTaskType(taskMeta.Name, out var taskType)) - taskDataObj = TryDeserializeTaskData(taskType, taskData, taskMeta); + taskDataObj = TryDeserializeTaskData(taskType!, taskData, taskMeta); } enrichedBatch[i] = (taskMeta, taskExceptionInfos[taskMeta.Id], taskDataObj); } perfGraphiteReporter.ReportTiming("IndexBatch", () => IndexBatch(enrichedBatch)); } - private void IndexBatch((TaskMetaInformation TaskMeta, TaskExceptionInfo[] TaskExceptionInfos, object TaskData)[] batch) + private void IndexBatch((TaskMetaInformation TaskMeta, TaskExceptionInfo[] TaskExceptionInfos, object? TaskData)[] batch) { logger.Info("IndexBatch: {BatchLength} tasks", new {BatchLength = batch.Length}); var payload = new string[batch.Length * 2]; @@ -127,7 +129,7 @@ private object TryDeserializeTaskData(Type taskType, byte[] taskData, TaskMetaIn } } - private static object BuildTaskIndexedInfo(TaskMetaInformation taskMeta, TaskExceptionInfo[] taskExceptionInfos, object taskData) + private static object BuildTaskIndexedInfo(TaskMetaInformation taskMeta, TaskExceptionInfo[] taskExceptionInfos, object? taskData) { var executionDurationTicks = taskMeta.ExecutionDurationTicks; var meta = new MetaIndexedInfo diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Json/JsonObjectExtensions.cs b/Cassandra.DistributedTaskQueue.Monitoring/Json/JsonObjectExtensions.cs index 6520f77b..114bcc11 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Json/JsonObjectExtensions.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Json/JsonObjectExtensions.cs @@ -1,4 +1,6 @@ -using System.Text.Json; +#nullable enable + +using System.Text.Json; using System.Text.Json.Serialization; namespace SkbKontur.Cassandra.DistributedTaskQueue.Monitoring.Json; diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Storage/Writing/RtqElasticsearchOffsetStorage.cs b/Cassandra.DistributedTaskQueue.Monitoring/Storage/Writing/RtqElasticsearchOffsetStorage.cs index b1187265..bb06ad67 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Storage/Writing/RtqElasticsearchOffsetStorage.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Storage/Writing/RtqElasticsearchOffsetStorage.cs @@ -1,4 +1,6 @@ -using System; +#nullable enable + +using System; using System.Text.Json; using Elasticsearch.Net; @@ -28,7 +30,7 @@ public string GetDescription() return $"RtqElasticsearchOffsetStorage with IndexName: {elasticIndexName}, BladeKey: {bladeKey}"; } - public void Write(string newOffset) + public void Write(string? newOffset) { var payload = new OffsetStorageElement {Offset = newOffset}; var postData = PostData.String(JsonSerializer.Serialize(payload)); @@ -41,7 +43,7 @@ public void Write(string newOffset) #pragma warning restore CS0618 } - public string Read() + public string? Read() { var stringResponse = elasticsearchClient.UseElastic7 ? elasticsearchClient.Get(elasticIndexName, bladeKey, allowNotFoundStatusCode).EnsureSuccess() @@ -55,7 +57,7 @@ public string Read() if (elasticResponse?.Source == null || !elasticResponse.Found) return GetDefaultOffset(); - return elasticResponse.Source.Offset; + return elasticResponse.Source?.Offset; } private string GetDefaultOffset() @@ -78,6 +80,6 @@ private string GetDefaultOffset() private class OffsetStorageElement { - public string Offset { get; set; } + public string? Offset { get; set; } } } \ No newline at end of file diff --git a/Cassandra.DistributedTaskQueue.Monitoring/Storage/Writing/TaskIndexedInfo.cs b/Cassandra.DistributedTaskQueue.Monitoring/Storage/Writing/TaskIndexedInfo.cs index f204ab9b..6949d985 100644 --- a/Cassandra.DistributedTaskQueue.Monitoring/Storage/Writing/TaskIndexedInfo.cs +++ b/Cassandra.DistributedTaskQueue.Monitoring/Storage/Writing/TaskIndexedInfo.cs @@ -1,6 +1,6 @@ -using System.Collections.Generic; +#nullable enable -using JetBrains.Annotations; +using System.Collections.Generic; using System.Text.Json.Serialization; @@ -12,7 +12,7 @@ public TaskIndexedInfo() { } - public TaskIndexedInfo([NotNull] MetaIndexedInfo meta, [NotNull] string exceptionInfo, [CanBeNull] object data) + public TaskIndexedInfo(MetaIndexedInfo meta, string exceptionInfo, object? data) { Meta = meta; ExceptionInfo = exceptionInfo; @@ -20,12 +20,12 @@ public TaskIndexedInfo([NotNull] MetaIndexedInfo meta, [NotNull] string exceptio Data = new Dictionary {{meta.Name, data}}; } - public MetaIndexedInfo Meta { get; set; } + public MetaIndexedInfo Meta { get; set; } = null!; [JsonConverter(typeof(TruncateLongStringsConverter2K))] - public string ExceptionInfo { get; set; } + public string ExceptionInfo { get; set; } = null!; // NOTE! Using TaskTypeName->TaskData dictionary here to avoid type conflicts between fields with the same name in different TaskData contracts // since we must index all TaskData types into single elasticsearch mapping type (see https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html) - public Dictionary Data { get; set; } + public Dictionary Data { get; set; } = null!; } \ No newline at end of file