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/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]
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
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;