Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## Unreleased

### Features
- Emit transaction.data inside contexts.trace.data ([#3642](https://github.com/getsentry/sentry-java/pull/3642))

## 7.14.0

### Features
Expand Down
4 changes: 4 additions & 0 deletions sentry/api/sentry.api
Original file line number Diff line number Diff line change
Expand Up @@ -2941,6 +2941,7 @@ public final class io/sentry/Span : io/sentry/ISpan {

public class io/sentry/SpanContext : io/sentry/JsonSerializable, io/sentry/JsonUnknown {
public static final field TYPE Ljava/lang/String;
protected field data Ljava/util/Map;
protected field description Ljava/lang/String;
protected field op Ljava/lang/String;
protected field origin Ljava/lang/String;
Expand All @@ -2952,6 +2953,7 @@ public class io/sentry/SpanContext : io/sentry/JsonSerializable, io/sentry/JsonU
public fun <init> (Ljava/lang/String;)V
public fun <init> (Ljava/lang/String;Lio/sentry/TracesSamplingDecision;)V
public fun equals (Ljava/lang/Object;)Z
public fun getData ()Ljava/util/Map;
public fun getDescription ()Ljava/lang/String;
public fun getOperation ()Ljava/lang/String;
public fun getOrigin ()Ljava/lang/String;
Expand All @@ -2966,6 +2968,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 setOperation (Ljava/lang/String;)V
public fun setOrigin (Ljava/lang/String;)V
Expand All @@ -2984,6 +2987,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;
Expand Down
23 changes: 23 additions & 0 deletions sentry/src/main/java/io/sentry/SpanContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ public class SpanContext implements JsonUnknown, JsonSerializable {
/** Describes the status of the Transaction. */
protected @Nullable String origin = "manual";

protected @NotNull Map<String, Object> data = new ConcurrentHashMap<>();

private @Nullable Map<String, Object> unknown;

public SpanContext(
Expand Down Expand Up @@ -213,6 +215,14 @@ public void setOrigin(final @Nullable String origin) {
this.origin = origin;
}

public @NotNull Map<String, Object> getData() {
return data;
}

public void setData(final @NotNull String key, final @NotNull Object value) {
data.put(key, value);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand Down Expand Up @@ -242,6 +252,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
Expand Down Expand Up @@ -269,6 +280,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);
Expand Down Expand Up @@ -303,6 +317,7 @@ public static final class Deserializer implements JsonDeserializer<SpanContext>
SpanStatus status = null;
String origin = null;
Map<String, String> tags = null;
Map<String, Object> data = null;

Map<String, Object> unknown = null;
while (reader.peek() == JsonToken.NAME) {
Expand Down Expand Up @@ -334,6 +349,9 @@ public static final class Deserializer implements JsonDeserializer<SpanContext>
CollectionUtils.newConcurrentHashMap(
(Map<String, String>) reader.nextObjectOrNull());
break;
case JsonKeys.DATA:
data = (Map<String, Object>) reader.nextObjectOrNull();
break;
default:
if (unknown == null) {
unknown = new ConcurrentHashMap<>();
Expand Down Expand Up @@ -374,6 +392,11 @@ public static final class Deserializer implements JsonDeserializer<SpanContext>
if (tags != null) {
spanContext.tags = tags;
}

if (data != null) {
spanContext.data = data;
}

spanContext.setUnknown(unknown);
reader.endObject();
return spanContext;
Expand Down
10 changes: 7 additions & 3 deletions sentry/src/main/java/io/sentry/protocol/SentryTransaction.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,9 @@ public SentryTransaction(final @NotNull SentryTracer sentryTracer) {
contexts.putAll(sentryTracer.getContexts());

final SpanContext tracerContext = sentryTracer.getSpanContext();
Map<String, Object> 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(),
Expand All @@ -90,15 +91,18 @@ public SentryTransaction(final @NotNull SentryTracer sentryTracer) {
tracerContext.getDescription(),
tracerContext.getSamplingDecision(),
tracerContext.getStatus(),
tracerContext.getOrigin()));
tracerContext.getOrigin());

contexts.setTrace(tracerContextToSend);
for (final Map.Entry<String, String> tag : tracerContext.getTags().entrySet()) {
this.setTag(tag.getKey(), tag.getValue());
}

final Map<String, Object> data = sentryTracer.getData();
// TODO should we remove setExtra here, or do we need it for backwards compat?
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd keep it for now

Copy link
Copy Markdown
Collaborator Author

@lbloder lbloder Sep 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@stefanosiano as per the latest discussion here I'll remove it

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@stefanosiano still in some discussions about this :) as both not setting the data in extras as well as adding data to trace.context.data might result in breaking changes for users

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Closing this for now, created a PR that targets 8.x which removes this (as both keeping and removing this would constitute a breaking change).

if (data != null) {
for (final Map.Entry<String, Object> tag : data.entrySet()) {
this.setExtra(tag.getKey(), tag.getValue());
tracerContextToSend.setData(tag.getKey(), tag.getValue());
}
}

Expand Down
6 changes: 5 additions & 1 deletion sentry/src/test/java/io/sentry/JsonSerializerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -889,7 +889,10 @@ class JsonSerializerTest {
"trace_id": "b156a475de54423d9c1571df97ec7eb6",
"span_id": "0a53026963414893",
"op": "http",
"status": "ok"
"status": "ok",
"data": {
"transactionDataKey": "transactionDataValue"
}
},
"custom": {
"some-key": "some-value"
Expand Down Expand Up @@ -930,6 +933,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"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
4 changes: 4 additions & 0 deletions sentry/src/test/resources/json/contexts.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
}
4 changes: 4 additions & 0 deletions sentry/src/test/resources/json/sentry_base_event.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
},
Expand Down
4 changes: 4 additions & 0 deletions sentry/src/test/resources/json/sentry_event.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
},
Expand Down
4 changes: 4 additions & 0 deletions sentry/src/test/resources/json/sentry_replay_event.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
},
Expand Down
4 changes: 4 additions & 0 deletions sentry/src/test/resources/json/sentry_transaction.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
},
Expand Down
3 changes: 3 additions & 0 deletions sentry/src/test/resources/json/span_context.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,8 @@
"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"
}
}