From 654ae48d5140336e6b418fbcac9b46e399427012 Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Mon, 30 Sep 2024 16:54:21 +0200 Subject: [PATCH 1/5] add transaction data to trace.context.data, don't send in extras --- CHANGELOG.md | 1 + sentry-android-ndk/sentry-native | 1 + .../api/sentry-spring-boot-jakarta.api | 6 +++++ sentry-spring-boot/api/sentry-spring-boot.api | 6 +++++ sentry/api/sentry.api | 4 +++ .../src/main/java/io/sentry/SpanContext.java | 27 +++++++++++++++++-- .../io/sentry/protocol/SentryTransaction.java | 10 ++++--- .../test/java/io/sentry/JsonSerializerTest.kt | 6 ++++- .../protocol/SpanContextSerializationTest.kt | 1 + sentry/src/test/resources/json/contexts.json | 4 +++ .../resources/json/sentry_base_event.json | 4 +++ .../sentry_base_event_with_null_extra.json | 4 +++ .../src/test/resources/json/sentry_event.json | 4 +++ .../resources/json/sentry_replay_event.json | 4 +++ .../resources/json/sentry_transaction.json | 4 +++ ...sentry_transaction_legacy_date_format.json | 4 +++ ...entry_transaction_no_measurement_unit.json | 4 +++ .../src/test/resources/json/span_context.json | 4 +++ 18 files changed, 91 insertions(+), 7 deletions(-) create mode 160000 sentry-android-ndk/sentry-native diff --git a/CHANGELOG.md b/CHANGELOG.md index fe963f2d505..510af5788cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ - You may now set `forceInit=true` (`force-init` for `.properties` files) to ensure a call to Sentry.init / SentryAndroid.init takes effect - Add force init option to Android Manifest ([#3675](https://github.com/getsentry/sentry-java/pull/3675)) - Use `` to ensure Sentry Android auto init is not easily overwritten +- Emit transaction.data inside contexts.trace.data ([#3642](https://github.com/getsentry/sentry-java/pull/3642)) ### Fixes diff --git a/sentry-android-ndk/sentry-native b/sentry-android-ndk/sentry-native new file mode 160000 index 00000000000..0f1d664759c --- /dev/null +++ b/sentry-android-ndk/sentry-native @@ -0,0 +1 @@ +Subproject commit 0f1d664759cba187a846a562f9d55f3c62dffaa3 diff --git a/sentry-spring-boot-jakarta/api/sentry-spring-boot-jakarta.api b/sentry-spring-boot-jakarta/api/sentry-spring-boot-jakarta.api index 009036082ea..64af16aa0eb 100644 --- a/sentry-spring-boot-jakarta/api/sentry-spring-boot-jakarta.api +++ b/sentry-spring-boot-jakarta/api/sentry-spring-boot-jakarta.api @@ -18,6 +18,12 @@ public class io/sentry/spring/boot/jakarta/SentryLogbackAppenderAutoConfiguratio public fun sentryLogbackInitializer (Lio/sentry/spring/boot/jakarta/SentryProperties;)Lio/sentry/spring/boot/jakarta/SentryLogbackInitializer; } +public class io/sentry/spring/boot/jakarta/SentryLogbackInitializer : org/springframework/context/event/GenericApplicationListener { + public fun (Lio/sentry/spring/boot/jakarta/SentryProperties;)V + public fun onApplicationEvent (Lorg/springframework/context/ApplicationEvent;)V + public fun supportsEventType (Lorg/springframework/core/ResolvableType;)Z +} + public class io/sentry/spring/boot/jakarta/SentryProperties : io/sentry/SentryOptions { public fun ()V public fun getExceptionResolverOrder ()I diff --git a/sentry-spring-boot/api/sentry-spring-boot.api b/sentry-spring-boot/api/sentry-spring-boot.api index d97e2e11110..bc03b89d6a3 100644 --- a/sentry-spring-boot/api/sentry-spring-boot.api +++ b/sentry-spring-boot/api/sentry-spring-boot.api @@ -18,6 +18,12 @@ public class io/sentry/spring/boot/SentryLogbackAppenderAutoConfiguration { public fun sentryLogbackInitializer (Lio/sentry/spring/boot/SentryProperties;)Lio/sentry/spring/boot/SentryLogbackInitializer; } +public class io/sentry/spring/boot/SentryLogbackInitializer : org/springframework/context/event/GenericApplicationListener { + public fun (Lio/sentry/spring/boot/SentryProperties;)V + public fun onApplicationEvent (Lorg/springframework/context/ApplicationEvent;)V + public fun supportsEventType (Lorg/springframework/core/ResolvableType;)Z +} + public class io/sentry/spring/boot/SentryProperties : io/sentry/SentryOptions { public fun ()V public fun getExceptionResolverOrder ()I diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index e7ec93fd20d..9a6406f725d 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -3438,6 +3438,7 @@ public class io/sentry/SpanContext : io/sentry/JsonSerializable, io/sentry/JsonU public static final field DEFAULT_ORIGIN Ljava/lang/String; public static final field TYPE Ljava/lang/String; protected field baggage Lio/sentry/Baggage; + protected field data Ljava/util/Map; protected field description Ljava/lang/String; protected field op Ljava/lang/String; protected field origin Ljava/lang/String; @@ -3451,6 +3452,7 @@ public class io/sentry/SpanContext : io/sentry/JsonSerializable, io/sentry/JsonU public fun copyForChild (Ljava/lang/String;Lio/sentry/SpanId;Lio/sentry/SpanId;)Lio/sentry/SpanContext; public fun equals (Ljava/lang/Object;)Z public fun getBaggage ()Lio/sentry/Baggage; + public fun getData ()Ljava/util/Map; public fun getDescription ()Ljava/lang/String; public fun getInstrumenter ()Lio/sentry/Instrumenter; public fun getOperation ()Ljava/lang/String; @@ -3466,6 +3468,7 @@ public class io/sentry/SpanContext : io/sentry/JsonSerializable, io/sentry/JsonU public fun getUnknown ()Ljava/util/Map; public fun hashCode ()I public fun serialize (Lio/sentry/ObjectWriter;Lio/sentry/ILogger;)V + public fun setData (Ljava/lang/String;Ljava/lang/Object;)V public fun setDescription (Ljava/lang/String;)V public fun setInstrumenter (Lio/sentry/Instrumenter;)V public fun setOperation (Ljava/lang/String;)V @@ -3485,6 +3488,7 @@ public final class io/sentry/SpanContext$Deserializer : io/sentry/JsonDeserializ } public final class io/sentry/SpanContext$JsonKeys { + public static final field DATA Ljava/lang/String; public static final field DESCRIPTION Ljava/lang/String; public static final field OP Ljava/lang/String; public static final field ORIGIN Ljava/lang/String; diff --git a/sentry/src/main/java/io/sentry/SpanContext.java b/sentry/src/main/java/io/sentry/SpanContext.java index b08ee2b84f2..724c015eab7 100644 --- a/sentry/src/main/java/io/sentry/SpanContext.java +++ b/sentry/src/main/java/io/sentry/SpanContext.java @@ -44,9 +44,10 @@ public class SpanContext implements JsonUnknown, JsonSerializable { /** A map or list of tags for this event. Each tag must be less than 200 characters. */ protected @NotNull Map tags = new ConcurrentHashMap<>(); - /** Describes the status of the Transaction. */ protected @Nullable String origin = DEFAULT_ORIGIN; + protected @NotNull Map data = new ConcurrentHashMap<>(); + private @Nullable Map unknown; private @NotNull Instrumenter instrumenter = Instrumenter.SENTRY; @@ -73,7 +74,7 @@ public SpanContext( final @NotNull String operation, final @Nullable SpanId parentSpanId, final @Nullable TracesSamplingDecision samplingDecision) { - this(traceId, spanId, parentSpanId, operation, null, samplingDecision, null, DEFAULT_ORIGIN); + this(traceId, spanId, parentSpanId, operation, null, samplingDecision, null, "manual"); } @ApiStatus.Internal @@ -230,6 +231,14 @@ public void setInstrumenter(final @NotNull Instrumenter instrumenter) { return baggage; } + public @NotNull Map getData() { + return data; + } + + public void setData(final @NotNull String key, final @NotNull Object value) { + data.put(key, value); + } + @ApiStatus.Internal public SpanContext copyForChild( final @NotNull String operation, @@ -275,6 +284,7 @@ public static final class JsonKeys { public static final String STATUS = "status"; public static final String TAGS = "tags"; public static final String ORIGIN = "origin"; + public static final String DATA = "data"; } @Override @@ -302,6 +312,9 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger if (!tags.isEmpty()) { writer.name(JsonKeys.TAGS).value(logger, tags); } + if (!data.isEmpty()) { + writer.name(JsonKeys.DATA).value(logger, data); + } if (unknown != null) { for (String key : unknown.keySet()) { Object value = unknown.get(key); @@ -336,6 +349,7 @@ public static final class Deserializer implements JsonDeserializer SpanStatus status = null; String origin = null; Map tags = null; + Map data = null; Map unknown = null; while (reader.peek() == JsonToken.NAME) { @@ -367,6 +381,9 @@ public static final class Deserializer implements JsonDeserializer CollectionUtils.newConcurrentHashMap( (Map) reader.nextObjectOrNull()); break; + case JsonKeys.DATA: + data = (Map) reader.nextObjectOrNull(); + break; default: if (unknown == null) { unknown = new ConcurrentHashMap<>(); @@ -404,9 +421,15 @@ public static final class Deserializer implements JsonDeserializer spanContext.setDescription(description); spanContext.setStatus(status); spanContext.setOrigin(origin); + if (tags != null) { spanContext.tags = tags; } + + if (data != null) { + spanContext.data = data; + } + spanContext.setUnknown(unknown); reader.endObject(); return spanContext; diff --git a/sentry/src/main/java/io/sentry/protocol/SentryTransaction.java b/sentry/src/main/java/io/sentry/protocol/SentryTransaction.java index 3bc42e42084..9b41b892aa4 100644 --- a/sentry/src/main/java/io/sentry/protocol/SentryTransaction.java +++ b/sentry/src/main/java/io/sentry/protocol/SentryTransaction.java @@ -80,8 +80,9 @@ public SentryTransaction(final @NotNull SentryTracer sentryTracer) { contexts.putAll(sentryTracer.getContexts()); final SpanContext tracerContext = sentryTracer.getSpanContext(); + Map data = sentryTracer.getData(); // tags must be placed on the root of the transaction instead of contexts.trace.tags - contexts.setTrace( + final SpanContext tracerContextToSend = new SpanContext( tracerContext.getTraceId(), tracerContext.getSpanId(), @@ -90,15 +91,16 @@ public SentryTransaction(final @NotNull SentryTracer sentryTracer) { tracerContext.getDescription(), tracerContext.getSamplingDecision(), tracerContext.getStatus(), - tracerContext.getOrigin())); + tracerContext.getOrigin()); + + contexts.setTrace(tracerContextToSend); for (final Map.Entry tag : tracerContext.getTags().entrySet()) { this.setTag(tag.getKey(), tag.getValue()); } - final Map data = sentryTracer.getData(); if (data != null) { for (final Map.Entry tag : data.entrySet()) { - this.setExtra(tag.getKey(), tag.getValue()); + tracerContextToSend.setData(tag.getKey(), tag.getValue()); } } diff --git a/sentry/src/test/java/io/sentry/JsonSerializerTest.kt b/sentry/src/test/java/io/sentry/JsonSerializerTest.kt index 470a440f1c2..0ccecabef1f 100644 --- a/sentry/src/test/java/io/sentry/JsonSerializerTest.kt +++ b/sentry/src/test/java/io/sentry/JsonSerializerTest.kt @@ -887,7 +887,10 @@ class JsonSerializerTest { "trace_id": "b156a475de54423d9c1571df97ec7eb6", "span_id": "0a53026963414893", "op": "http", - "status": "ok" + "status": "ok", + "data": { + "transactionDataKey": "transactionDataValue" + } }, "custom": { "some-key": "some-value" @@ -928,6 +931,7 @@ class JsonSerializerTest { assertEquals("0a53026963414893", transaction.contexts.trace!!.spanId.toString()) assertEquals("http", transaction.contexts.trace!!.operation) assertNotNull(transaction.contexts["custom"]) + assertEquals("transactionDataValue", transaction.contexts.trace!!.data!!["transactionDataKey"]) assertEquals("some-value", (transaction.contexts["custom"] as Map<*, *>)["some-key"]) assertEquals("extraValue", transaction.getExtra("extraKey")) diff --git a/sentry/src/test/java/io/sentry/protocol/SpanContextSerializationTest.kt b/sentry/src/test/java/io/sentry/protocol/SpanContextSerializationTest.kt index bd3bcd72c35..707daa78f10 100644 --- a/sentry/src/test/java/io/sentry/protocol/SpanContextSerializationTest.kt +++ b/sentry/src/test/java/io/sentry/protocol/SpanContextSerializationTest.kt @@ -35,6 +35,7 @@ class SpanContextSerializationTest { setTag("2a5fa3f5-7b87-487f-aaa5-84567aa73642", "4781d51a-c5af-47f2-a4ed-f030c9b3e194") setTag("29106d7d-7fa4-444f-9d34-b9d7510c69ab", "218c23ea-694a-497e-bf6d-e5f26f1ad7bd") setTag("ba9ce913-269f-4c03-882d-8ca5e6991b14", "35a74e90-8db8-4610-a411-872cbc1030ac") + setData("spanContextDataKey", "spanContextDataValue") } } private val fixture = Fixture() diff --git a/sentry/src/test/resources/json/contexts.json b/sentry/src/test/resources/json/contexts.json index 574bb019214..549ce557ba5 100644 --- a/sentry/src/test/resources/json/contexts.json +++ b/sentry/src/test/resources/json/contexts.json @@ -121,6 +121,10 @@ "2a5fa3f5-7b87-487f-aaa5-84567aa73642": "4781d51a-c5af-47f2-a4ed-f030c9b3e194", "29106d7d-7fa4-444f-9d34-b9d7510c69ab": "218c23ea-694a-497e-bf6d-e5f26f1ad7bd", "ba9ce913-269f-4c03-882d-8ca5e6991b14": "35a74e90-8db8-4610-a411-872cbc1030ac" + }, + "data": + { + "spanContextDataKey": "spanContextDataValue" } } } diff --git a/sentry/src/test/resources/json/sentry_base_event.json b/sentry/src/test/resources/json/sentry_base_event.json index afaf0408638..df2c82bce47 100644 --- a/sentry/src/test/resources/json/sentry_base_event.json +++ b/sentry/src/test/resources/json/sentry_base_event.json @@ -124,6 +124,10 @@ "2a5fa3f5-7b87-487f-aaa5-84567aa73642": "4781d51a-c5af-47f2-a4ed-f030c9b3e194", "29106d7d-7fa4-444f-9d34-b9d7510c69ab": "218c23ea-694a-497e-bf6d-e5f26f1ad7bd", "ba9ce913-269f-4c03-882d-8ca5e6991b14": "35a74e90-8db8-4610-a411-872cbc1030ac" + }, + "data": + { + "spanContextDataKey": "spanContextDataValue" } } }, diff --git a/sentry/src/test/resources/json/sentry_base_event_with_null_extra.json b/sentry/src/test/resources/json/sentry_base_event_with_null_extra.json index 018cc7aae7d..722b38f76e2 100644 --- a/sentry/src/test/resources/json/sentry_base_event_with_null_extra.json +++ b/sentry/src/test/resources/json/sentry_base_event_with_null_extra.json @@ -124,6 +124,10 @@ "2a5fa3f5-7b87-487f-aaa5-84567aa73642": "4781d51a-c5af-47f2-a4ed-f030c9b3e194", "29106d7d-7fa4-444f-9d34-b9d7510c69ab": "218c23ea-694a-497e-bf6d-e5f26f1ad7bd", "ba9ce913-269f-4c03-882d-8ca5e6991b14": "35a74e90-8db8-4610-a411-872cbc1030ac" + }, + "data": + { + "spanContextDataKey": "spanContextDataValue" } } }, diff --git a/sentry/src/test/resources/json/sentry_event.json b/sentry/src/test/resources/json/sentry_event.json index 6d0b351ed49..8f0314795d9 100644 --- a/sentry/src/test/resources/json/sentry_event.json +++ b/sentry/src/test/resources/json/sentry_event.json @@ -259,6 +259,10 @@ "2a5fa3f5-7b87-487f-aaa5-84567aa73642": "4781d51a-c5af-47f2-a4ed-f030c9b3e194", "29106d7d-7fa4-444f-9d34-b9d7510c69ab": "218c23ea-694a-497e-bf6d-e5f26f1ad7bd", "ba9ce913-269f-4c03-882d-8ca5e6991b14": "35a74e90-8db8-4610-a411-872cbc1030ac" + }, + "data": + { + "spanContextDataKey": "spanContextDataValue" } } }, diff --git a/sentry/src/test/resources/json/sentry_replay_event.json b/sentry/src/test/resources/json/sentry_replay_event.json index f026c9fee47..d3accdadcd2 100644 --- a/sentry/src/test/resources/json/sentry_replay_event.json +++ b/sentry/src/test/resources/json/sentry_replay_event.json @@ -142,6 +142,10 @@ "2a5fa3f5-7b87-487f-aaa5-84567aa73642": "4781d51a-c5af-47f2-a4ed-f030c9b3e194", "29106d7d-7fa4-444f-9d34-b9d7510c69ab": "218c23ea-694a-497e-bf6d-e5f26f1ad7bd", "ba9ce913-269f-4c03-882d-8ca5e6991b14": "35a74e90-8db8-4610-a411-872cbc1030ac" + }, + "data": + { + "spanContextDataKey": "spanContextDataValue" } } }, diff --git a/sentry/src/test/resources/json/sentry_transaction.json b/sentry/src/test/resources/json/sentry_transaction.json index 944a0bfe92d..a3229d95d22 100644 --- a/sentry/src/test/resources/json/sentry_transaction.json +++ b/sentry/src/test/resources/json/sentry_transaction.json @@ -207,6 +207,10 @@ "2a5fa3f5-7b87-487f-aaa5-84567aa73642": "4781d51a-c5af-47f2-a4ed-f030c9b3e194", "29106d7d-7fa4-444f-9d34-b9d7510c69ab": "218c23ea-694a-497e-bf6d-e5f26f1ad7bd", "ba9ce913-269f-4c03-882d-8ca5e6991b14": "35a74e90-8db8-4610-a411-872cbc1030ac" + }, + "data": + { + "spanContextDataKey": "spanContextDataValue" } } }, diff --git a/sentry/src/test/resources/json/sentry_transaction_legacy_date_format.json b/sentry/src/test/resources/json/sentry_transaction_legacy_date_format.json index 789c4fe2a93..5ac61eac8a1 100644 --- a/sentry/src/test/resources/json/sentry_transaction_legacy_date_format.json +++ b/sentry/src/test/resources/json/sentry_transaction_legacy_date_format.json @@ -207,6 +207,10 @@ "2a5fa3f5-7b87-487f-aaa5-84567aa73642": "4781d51a-c5af-47f2-a4ed-f030c9b3e194", "29106d7d-7fa4-444f-9d34-b9d7510c69ab": "218c23ea-694a-497e-bf6d-e5f26f1ad7bd", "ba9ce913-269f-4c03-882d-8ca5e6991b14": "35a74e90-8db8-4610-a411-872cbc1030ac" + }, + "data": + { + "spanContextDataKey": "spanContextDataValue" } } }, diff --git a/sentry/src/test/resources/json/sentry_transaction_no_measurement_unit.json b/sentry/src/test/resources/json/sentry_transaction_no_measurement_unit.json index 330555c1ec0..4091943ff76 100644 --- a/sentry/src/test/resources/json/sentry_transaction_no_measurement_unit.json +++ b/sentry/src/test/resources/json/sentry_transaction_no_measurement_unit.json @@ -177,6 +177,10 @@ "2a5fa3f5-7b87-487f-aaa5-84567aa73642": "4781d51a-c5af-47f2-a4ed-f030c9b3e194", "29106d7d-7fa4-444f-9d34-b9d7510c69ab": "218c23ea-694a-497e-bf6d-e5f26f1ad7bd", "ba9ce913-269f-4c03-882d-8ca5e6991b14": "35a74e90-8db8-4610-a411-872cbc1030ac" + }, + "data": + { + "spanContextDataKey": "spanContextDataValue" } } }, diff --git a/sentry/src/test/resources/json/span_context.json b/sentry/src/test/resources/json/span_context.json index 4a6e08bcc2d..c55841a391b 100644 --- a/sentry/src/test/resources/json/span_context.json +++ b/sentry/src/test/resources/json/span_context.json @@ -11,5 +11,9 @@ "2a5fa3f5-7b87-487f-aaa5-84567aa73642": "4781d51a-c5af-47f2-a4ed-f030c9b3e194", "29106d7d-7fa4-444f-9d34-b9d7510c69ab": "218c23ea-694a-497e-bf6d-e5f26f1ad7bd", "ba9ce913-269f-4c03-882d-8ca5e6991b14": "35a74e90-8db8-4610-a411-872cbc1030ac" + }, + "data": + { + "spanContextDataKey": "spanContextDataValue" } } From 82f9fe2dff61a37d06542ee0a63f6e8c6727d03d Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Mon, 30 Sep 2024 17:31:35 +0200 Subject: [PATCH 2/5] reset to 8.x.x version of submodule --- sentry-android-ndk/sentry-native | 1 - 1 file changed, 1 deletion(-) delete mode 160000 sentry-android-ndk/sentry-native diff --git a/sentry-android-ndk/sentry-native b/sentry-android-ndk/sentry-native deleted file mode 160000 index 0f1d664759c..00000000000 --- a/sentry-android-ndk/sentry-native +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0f1d664759cba187a846a562f9d55f3c62dffaa3 From 13293933d7879da0d467f053423a9bb9388d680f Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Tue, 1 Oct 2024 09:36:18 +0200 Subject: [PATCH 3/5] fix tests, fix changelog --- CHANGELOG.md | 2 +- sentry/src/test/java/io/sentry/JsonSerializerTest.kt | 3 +-- sentry/src/test/java/io/sentry/SentryTracerTest.kt | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 510af5788cf..cd6047e5363 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,7 @@ - You may now set `forceInit=true` (`force-init` for `.properties` files) to ensure a call to Sentry.init / SentryAndroid.init takes effect - Add force init option to Android Manifest ([#3675](https://github.com/getsentry/sentry-java/pull/3675)) - Use `` to ensure Sentry Android auto init is not easily overwritten -- Emit transaction.data inside contexts.trace.data ([#3642](https://github.com/getsentry/sentry-java/pull/3642)) +- Emit transaction.data inside contexts.trace.data ([#3735](https://github.com/getsentry/sentry-java/pull/3735)) ### Fixes diff --git a/sentry/src/test/java/io/sentry/JsonSerializerTest.kt b/sentry/src/test/java/io/sentry/JsonSerializerTest.kt index 0ccecabef1f..4697c66c835 100644 --- a/sentry/src/test/java/io/sentry/JsonSerializerTest.kt +++ b/sentry/src/test/java/io/sentry/JsonSerializerTest.kt @@ -855,8 +855,6 @@ class JsonSerializerTest { assertNotNull(element["spans"] as List<*>) assertEquals("myValue", (element["tags"] as Map<*, *>)["myTag"] as String) - assertEquals("dataValue", (element["extra"] as Map<*, *>)["dataKey"] as String) - val jsonSpan = (element["spans"] as List<*>)[0] as Map<*, *> assertNotNull(jsonSpan["trace_id"]) assertNotNull(jsonSpan["span_id"]) @@ -867,6 +865,7 @@ class JsonSerializerTest { assertNotNull(jsonSpan["start_timestamp"]) val jsonTrace = (element["contexts"] as Map<*, *>)["trace"] as Map<*, *> + assertEquals("dataValue", (jsonTrace["data"] as Map<*, *>)["dataKey"] as String) assertNotNull(jsonTrace["trace_id"] as String) assertNotNull(jsonTrace["span_id"] as String) assertEquals("http", jsonTrace["op"] as String) diff --git a/sentry/src/test/java/io/sentry/SentryTracerTest.kt b/sentry/src/test/java/io/sentry/SentryTracerTest.kt index a3a131ea977..3d5eca7f485 100644 --- a/sentry/src/test/java/io/sentry/SentryTracerTest.kt +++ b/sentry/src/test/java/io/sentry/SentryTracerTest.kt @@ -752,13 +752,13 @@ class SentryTracerTest { } @Test - fun `sets ITransaction data as extra in SentryTransaction`() { + fun `sets ITransaction data as tracecontext data in SentryTransaction`() { val transaction = fixture.getSut(samplingDecision = TracesSamplingDecision(true)) transaction.setData("key", "val") transaction.finish() verify(fixture.scopes).captureTransaction( check { - assertEquals("val", it.getExtra("key")) + assertEquals("val", it.contexts.trace?.data?.get("key")) }, anyOrNull(), anyOrNull(), From 2f38931698dca692e2b5e8e428da0c6c4989885e Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Tue, 1 Oct 2024 10:00:38 +0200 Subject: [PATCH 4/5] fix changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd6047e5363..f1eaccee60d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - Add force init option to Android Manifest ([#3675](https://github.com/getsentry/sentry-java/pull/3675)) - Use `` to ensure Sentry Android auto init is not easily overwritten - Emit transaction.data inside contexts.trace.data ([#3735](https://github.com/getsentry/sentry-java/pull/3735)) + - Also does not emit `transaction.data` in `exras` anymore ### Fixes From 9b041238ba04adcaf31a9e9e4c3be71c054b3efa Mon Sep 17 00:00:00 2001 From: Lukas Bloder Date: Fri, 11 Oct 2024 08:43:20 +0200 Subject: [PATCH 5/5] cr changes --- sentry/src/main/java/io/sentry/SpanContext.java | 2 +- sentry/src/main/java/io/sentry/protocol/SentryTransaction.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sentry/src/main/java/io/sentry/SpanContext.java b/sentry/src/main/java/io/sentry/SpanContext.java index 724c015eab7..91e3abd9560 100644 --- a/sentry/src/main/java/io/sentry/SpanContext.java +++ b/sentry/src/main/java/io/sentry/SpanContext.java @@ -74,7 +74,7 @@ public SpanContext( final @NotNull String operation, final @Nullable SpanId parentSpanId, final @Nullable TracesSamplingDecision samplingDecision) { - this(traceId, spanId, parentSpanId, operation, null, samplingDecision, null, "manual"); + this(traceId, spanId, parentSpanId, operation, null, samplingDecision, null, DEFAULT_ORIGIN); } @ApiStatus.Internal diff --git a/sentry/src/main/java/io/sentry/protocol/SentryTransaction.java b/sentry/src/main/java/io/sentry/protocol/SentryTransaction.java index 9b41b892aa4..2ce40cbc4df 100644 --- a/sentry/src/main/java/io/sentry/protocol/SentryTransaction.java +++ b/sentry/src/main/java/io/sentry/protocol/SentryTransaction.java @@ -93,7 +93,6 @@ public SentryTransaction(final @NotNull SentryTracer sentryTracer) { tracerContext.getStatus(), tracerContext.getOrigin()); - contexts.setTrace(tracerContextToSend); for (final Map.Entry tag : tracerContext.getTags().entrySet()) { this.setTag(tag.getKey(), tag.getValue()); } @@ -104,6 +103,8 @@ public SentryTransaction(final @NotNull SentryTracer sentryTracer) { } } + contexts.setTrace(tracerContextToSend); + this.transactionInfo = new TransactionInfo(sentryTracer.getTransactionNameSource().apiName()); final @Nullable LocalMetricsAggregator localAggregator =