From a3f02ae37bc0b267e709b8d86328c82409078805 Mon Sep 17 00:00:00 2001 From: William Chong Date: Mon, 7 Jul 2025 12:58:29 +0400 Subject: [PATCH 1/2] fix: skip tracing metadata injection when span context is invalid or unsampled (#331) --- .../io/kurrent/dbclient/ClientTelemetry.java | 3 + .../kurrent/dbclient/streams/AppendTests.java | 61 +++++++++---------- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/main/java/io/kurrent/dbclient/ClientTelemetry.java b/src/main/java/io/kurrent/dbclient/ClientTelemetry.java index 4d180053..e435bc93 100644 --- a/src/main/java/io/kurrent/dbclient/ClientTelemetry.java +++ b/src/main/java/io/kurrent/dbclient/ClientTelemetry.java @@ -29,6 +29,9 @@ private static Tracer getTracer() { } private static List tryInjectTracingContext(Span span, List events) { + if (!span.getSpanContext().isValid() || !span.getSpanContext().isSampled()) + return events; + List injectedEvents = new ArrayList<>(); for (EventData event : events) { boolean isJsonEvent = Objects.equals(event.getContentType(), ContentType.JSON); diff --git a/src/test/java/io/kurrent/dbclient/streams/AppendTests.java b/src/test/java/io/kurrent/dbclient/streams/AppendTests.java index 72701fd0..3ed125a9 100644 --- a/src/test/java/io/kurrent/dbclient/streams/AppendTests.java +++ b/src/test/java/io/kurrent/dbclient/streams/AppendTests.java @@ -1,7 +1,7 @@ package io.kurrent.dbclient.streams; +import com.fasterxml.jackson.databind.node.ObjectNode; import io.kurrent.dbclient.*; -import com.fasterxml.jackson.databind.json.JsonMapper; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -11,43 +11,42 @@ public interface AppendTests extends ConnectionAware { @Test default void testAppendSingleEventNoStream() throws Throwable { KurrentDBClient client = getDatabase().defaultClient(); - - final String streamName = generateName(); - final String eventType = "TestEvent"; - final String eventId = "38fffbc2-339e-11ea-8c7b-784f43837872"; - final byte[] eventMetaData = new byte[]{0xd, 0xe, 0xa, 0xd}; - final JsonMapper jsonMapper = new JsonMapper(); - - EventData event = EventData.builderAsJson(eventType, jsonMapper.writeValueAsBytes(new Foo())) - .metadataAsBytes(eventMetaData) - .eventId(UUID.fromString(eventId)) + String streamName = generateName(); + String eventType = "TestEvent"; + UUID eventId = UUID.randomUUID(); + Foo foo = new Foo(); + byte[] fooBytes = mapper.writeValueAsBytes(foo); + + EventData event = EventData.builderAsJson(eventType, fooBytes) + .metadataAsBytes(fooBytes) + .eventId(eventId) .build(); - AppendToStreamOptions appendOptions = AppendToStreamOptions.get() - .streamState(StreamState.noStream()); - - WriteResult appendResult = client.appendToStream(streamName, appendOptions, event) - .get(); + WriteResult appendResult = client.appendToStream( + streamName, + AppendToStreamOptions.get().streamState(StreamState.noStream()), + event + ).get(); Assertions.assertEquals(StreamState.streamRevision(0), appendResult.getNextExpectedRevision()); - ReadStreamOptions readStreamOptions = ReadStreamOptions.get() - .fromEnd() - .backwards() - .maxCount(1); - - // Ensure appended event is readable - ReadResult result = client.readStream(streamName, readStreamOptions) - .get(); + ReadResult result = client.readStream( + streamName, + ReadStreamOptions.get().fromEnd().backwards().maxCount(1) + ).get(); Assertions.assertEquals(1, result.getEvents().size()); RecordedEvent first = result.getEvents().get(0).getEvent(); - JsonMapper mapper = new JsonMapper(); - - Assertions.assertEquals(streamName, first.getStreamId()); - Assertions.assertEquals(eventType, first.getEventType()); - Assertions.assertEquals(eventId, first.getEventId().toString()); - Assertions.assertArrayEquals(eventMetaData, first.getUserMetadata()); - Assertions.assertEquals(new Foo(), mapper.readValue(first.getEventData(), Foo.class)); + ObjectNode userMetadata = mapper.readValue(first.getUserMetadata(), ObjectNode.class); + + Assertions.assertAll( + () -> Assertions.assertEquals(streamName, first.getStreamId()), + () -> Assertions.assertEquals(eventType, first.getEventType()), + () -> Assertions.assertEquals(eventId.toString(), first.getEventId().toString()), + () -> Assertions.assertEquals(foo, mapper.readValue(first.getEventData(), Foo.class)), + () -> Assertions.assertEquals(foo, mapper.readValue(first.getUserMetadata(), Foo.class)), + () -> Assertions.assertFalse(userMetadata.has(ClientTelemetryConstants.Metadata.TRACE_ID)), + () -> Assertions.assertFalse(userMetadata.has(ClientTelemetryConstants.Metadata.SPAN_ID)) + ); } } From ed1422cd2b8c1c09b7ef17caba845f8c934a6c71 Mon Sep 17 00:00:00 2001 From: William Chong Date: Mon, 7 Jul 2025 12:59:28 +0400 Subject: [PATCH 2/2] Prepare 1.0.3 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6c2124a8..5b51f211 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ tasks.withType(JavaCompile) { } group = 'io.kurrent' -version = '1.0.2' +version = '1.0.3' java { withSourcesJar()