From 5e694b83ff051a8a80ad727ebb9cbf01bf161ad5 Mon Sep 17 00:00:00 2001 From: Alexey Zimarev Date: Mon, 16 Dec 2024 11:38:19 +0100 Subject: [PATCH 1/4] Change tracing meta field names and remove parent span id --- src/Core/src/Eventuous.Diagnostics/ActivityExtensions.cs | 2 +- src/Core/src/Eventuous.Diagnostics/MetadataExtensions.cs | 5 ++--- src/Core/src/Eventuous.Diagnostics/Tags/MetaTags.cs | 5 ++--- src/Core/src/Eventuous.Diagnostics/Tags/TracingMeta.cs | 2 +- src/EventStore/src/Eventuous.EventStore/EsdbEventStore.cs | 2 +- .../test/Eventuous.Tests.EventStore/ProducerTracesTests.cs | 2 +- .../Eventuous.Tests.Postgres/Eventuous.Tests.Postgres.csproj | 1 + 7 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Core/src/Eventuous.Diagnostics/ActivityExtensions.cs b/src/Core/src/Eventuous.Diagnostics/ActivityExtensions.cs index 638bd31a..25cac0cf 100644 --- a/src/Core/src/Eventuous.Diagnostics/ActivityExtensions.cs +++ b/src/Core/src/Eventuous.Diagnostics/ActivityExtensions.cs @@ -23,7 +23,7 @@ public static Activity SetOrCopyParentTag(this Activity activity, string tag, st } public static TracingMeta GetTracingData(this Activity activity) - => new(activity.TraceId.ToString(), activity.SpanId.ToString(), activity.ParentSpanId.ToString()); + => new(activity.TraceId.ToString(), activity.SpanId.ToString()); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Activity SetActivityStatus(this Activity activity, ActivityStatus status) { diff --git a/src/Core/src/Eventuous.Diagnostics/MetadataExtensions.cs b/src/Core/src/Eventuous.Diagnostics/MetadataExtensions.cs index f09cd0db..011a0daa 100644 --- a/src/Core/src/Eventuous.Diagnostics/MetadataExtensions.cs +++ b/src/Core/src/Eventuous.Diagnostics/MetadataExtensions.cs @@ -24,12 +24,11 @@ static Metadata AddTracingMeta(this Metadata metadata, TracingMeta tracingMeta) ? metadata // don't override existing tracing data : metadata .AddNotNull(TraceId, tracingMeta.TraceId) - .AddNotNull(SpanId, tracingMeta.SpanId) - .AddNotNull(ParentSpanId, tracingMeta.ParentSpanId == EmptyId ? null : tracingMeta.ParentSpanId); + .AddNotNull(SpanId, tracingMeta.SpanId); [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TracingMeta GetTracingMeta(this Metadata metadata) - => new(metadata.GetString(TraceId), metadata.GetString(SpanId), metadata.GetString(ParentSpanId)); + => new(metadata.GetString(TraceId), metadata.GetString(SpanId)); const string EmptyId = "0000000000000000"; } diff --git a/src/Core/src/Eventuous.Diagnostics/Tags/MetaTags.cs b/src/Core/src/Eventuous.Diagnostics/Tags/MetaTags.cs index 57db1ff6..4cfc1ebe 100644 --- a/src/Core/src/Eventuous.Diagnostics/Tags/MetaTags.cs +++ b/src/Core/src/Eventuous.Diagnostics/Tags/MetaTags.cs @@ -4,7 +4,6 @@ namespace Eventuous.Diagnostics; public static class DiagnosticTags { - public const string TraceId = "trace-id"; - public const string SpanId = "span-id"; - public const string ParentSpanId = "parent-span-id"; + public const string TraceId = "$traceId"; + public const string SpanId = "$spanId"; } \ No newline at end of file diff --git a/src/Core/src/Eventuous.Diagnostics/Tags/TracingMeta.cs b/src/Core/src/Eventuous.Diagnostics/Tags/TracingMeta.cs index feaaa7ff..79860d3b 100644 --- a/src/Core/src/Eventuous.Diagnostics/Tags/TracingMeta.cs +++ b/src/Core/src/Eventuous.Diagnostics/Tags/TracingMeta.cs @@ -3,7 +3,7 @@ namespace Eventuous.Diagnostics; -public record TracingMeta(string? TraceId, string? SpanId, string? ParentSpanId) { +public record TracingMeta(string? TraceId, string? SpanId) { bool IsValid() => TraceId != null && SpanId != null; public ActivityContext? ToActivityContext(bool isRemote) { diff --git a/src/EventStore/src/Eventuous.EventStore/EsdbEventStore.cs b/src/EventStore/src/Eventuous.EventStore/EsdbEventStore.cs index 6be8c2e7..9cdddf09 100644 --- a/src/EventStore/src/Eventuous.EventStore/EsdbEventStore.cs +++ b/src/EventStore/src/Eventuous.EventStore/EsdbEventStore.cs @@ -164,7 +164,7 @@ CancellationToken cancellationToken () => _client.SetStreamMetadataAsync(stream, expectedVersion.AsStreamRevision(), meta, cancellationToken: cancellationToken) ), stream, - () => new ErrorInfo("Unable to truncate stream {Stream} at {Position}", stream, truncatePosition), + () => new("Unable to truncate stream {Stream} at {Position}", stream, truncatePosition), (s, ex) => new TruncateStreamException(s, ex) ); } diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/ProducerTracesTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/ProducerTracesTests.cs index 0d94a7f3..27492fc1 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/ProducerTracesTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/ProducerTracesTests.cs @@ -40,7 +40,7 @@ public async Task ShouldPropagateRemoteContext(CancellationToken cancellationTok var writtenEvent = (await StoreFixture.EventStore.ReadEvents(Stream, StreamReadPosition.Start, 1, cancellationToken))[0]; var meta = writtenEvent.Metadata; - var (traceId, spanId, _) = meta.GetTracingMeta(); + var (traceId, spanId) = meta.GetTracingMeta(); traceId.Should().NotBe(RecordedTrace.DefaultTraceId); spanId.Should().NotBe(RecordedTrace.DefaultSpanId); diff --git a/src/Postgres/test/Eventuous.Tests.Postgres/Eventuous.Tests.Postgres.csproj b/src/Postgres/test/Eventuous.Tests.Postgres/Eventuous.Tests.Postgres.csproj index 84c31faf..a1b7c78e 100644 --- a/src/Postgres/test/Eventuous.Tests.Postgres/Eventuous.Tests.Postgres.csproj +++ b/src/Postgres/test/Eventuous.Tests.Postgres/Eventuous.Tests.Postgres.csproj @@ -4,6 +4,7 @@ true true Exe + CA1822 From da19a6bdc19f6eb0345b2aaa9625f5490a3d2098 Mon Sep 17 00:00:00 2001 From: Alexey Zimarev Date: Mon, 16 Dec 2024 13:43:11 +0100 Subject: [PATCH 2/4] Fix expected field name --- .../Store/EventStoreAggregateTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs index 6ff7af8c..a5c8445d 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs @@ -30,8 +30,8 @@ public async Task AppendedEventShouldBeTraced(CancellationToken cancellationToke var events = await _fixture.EventStore.ReadStream(streamName, StreamReadPosition.Start, cancellationToken: cancellationToken); var first = events[0]; - first.Metadata["trace-id"].Should().NotBeNull(); - first.Metadata["span-id"].Should().NotBeNull(); + first.Metadata["$traceId"].Should().NotBeNull(); + first.Metadata["$spanId"].Should().NotBeNull(); } [Test] From 44d9a03fb2bb4b4999d280faf2690c6ad074ed38 Mon Sep 17 00:00:00 2001 From: Alexey Zimarev Date: Mon, 16 Dec 2024 15:11:20 +0100 Subject: [PATCH 3/4] Retry schema init --- .../Store/EventStoreAggregateTests.cs | 5 ++++ .../Eventuous.SqlServer/SchemaInitializer.cs | 23 ++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs index a5c8445d..618569cf 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs @@ -18,6 +18,11 @@ public EventStoreAggregateTests(StoreFixture fixture) { _log = _loggerFactory.CreateLogger(); } +<<<<<<<<<<<<<< ✨ Codeium Command ⭐ >>>>>>>>>>>>>>>> + /// + /// Verifies that appending an event to an aggregate stream traces the and . + /// +<<<<<<< 805dce60-3810-4dbe-8ba7-daa0fbe59742 >>>>>>> [Test] [Category("Store")] public async Task AppendedEventShouldBeTraced(CancellationToken cancellationToken) { diff --git a/src/SqlServer/src/Eventuous.SqlServer/SchemaInitializer.cs b/src/SqlServer/src/Eventuous.SqlServer/SchemaInitializer.cs index e878fd58..940c24ae 100644 --- a/src/SqlServer/src/Eventuous.SqlServer/SchemaInitializer.cs +++ b/src/SqlServer/src/Eventuous.SqlServer/SchemaInitializer.cs @@ -7,13 +7,30 @@ namespace Eventuous.SqlServer; public class SchemaInitializer(SqlServerStoreOptions options, ILoggerFactory? loggerFactory = null) : IHostedService { - public Task StartAsync(CancellationToken cancellationToken) { - if (!options.InitializeDatabase) return Task.CompletedTask; + readonly ILogger? _log = loggerFactory?.CreateLogger(); + + public async Task StartAsync(CancellationToken cancellationToken) { + if (!options.InitializeDatabase) return; var schema = new Schema(options.Schema); var connectionString = Ensure.NotEmptyString(options.ConnectionString); - return schema.CreateSchema(connectionString, loggerFactory?.CreateLogger(), cancellationToken); + Exception? ex = null; + + for (var i = 0; i < 10; i++) { + try { + await schema.CreateSchema(connectionString, _log, cancellationToken); + + return; + } catch (SqlException e) { + _log?.LogError("Unable to initialize the database schema: {Message}", e.Message); + ex = e; + } + + await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken); + } + + throw ex!; } public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; From c4e32b527774b73ab147ed23ff1ab14b8754ee89 Mon Sep 17 00:00:00 2001 From: Alexey Zimarev Date: Mon, 16 Dec 2024 15:12:31 +0100 Subject: [PATCH 4/4] Remove weird suggestion --- .../Store/EventStoreAggregateTests.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs index 618569cf..a5c8445d 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Store/EventStoreAggregateTests.cs @@ -18,11 +18,6 @@ public EventStoreAggregateTests(StoreFixture fixture) { _log = _loggerFactory.CreateLogger(); } -<<<<<<<<<<<<<< ✨ Codeium Command ⭐ >>>>>>>>>>>>>>>> - /// - /// Verifies that appending an event to an aggregate stream traces the and . - /// -<<<<<<< 805dce60-3810-4dbe-8ba7-daa0fbe59742 >>>>>>> [Test] [Category("Store")] public async Task AppendedEventShouldBeTraced(CancellationToken cancellationToken) {