Skip to content

Commit e84e4d4

Browse files
committed
added SpanContext.data ser/deser
1 parent d50f482 commit e84e4d4

File tree

30 files changed

+165
-20
lines changed

30 files changed

+165
-20
lines changed

sentry-android-core/src/main/java/io/sentry/android/core/internal/util/AndroidThreadChecker.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ public boolean isMainThread() {
3939
return isMainThread(Thread.currentThread());
4040
}
4141

42+
@Override
43+
public @NotNull String getCurrentThreadName() {
44+
return isMainThread() ? "main" : Thread.currentThread().getName();
45+
}
46+
4247
@Override
4348
public boolean isMainThread(final @NotNull SentryThread sentryThread) {
4449
final Long threadId = sentryThread.getId();

sentry-android-core/src/test/java/io/sentry/android/core/internal/util/AndroidThreadCheckerTest.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
44
import io.sentry.protocol.SentryThread
55
import org.junit.runner.RunWith
66
import kotlin.test.Test
7+
import kotlin.test.assertEquals
78
import kotlin.test.assertFalse
89
import kotlin.test.assertTrue
910

@@ -44,4 +45,23 @@ class AndroidThreadCheckerTest {
4445
}
4546
assertFalse(AndroidThreadChecker.getInstance().isMainThread(sentryThread))
4647
}
48+
49+
@Test
50+
fun `currentThreadName returns main when called on the main thread`() {
51+
val thread = Thread.currentThread()
52+
thread.name = "test"
53+
assertEquals("main", AndroidThreadChecker.getInstance().currentThreadName)
54+
}
55+
56+
@Test
57+
fun `currentThreadName returns the name of the current thread`() {
58+
var threadName = ""
59+
val thread = Thread {
60+
threadName = AndroidThreadChecker.getInstance().currentThreadName
61+
}
62+
thread.name = "test"
63+
thread.start()
64+
thread.join()
65+
assertEquals("test", threadName)
66+
}
4767
}

sentry-android-ndk/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ dependencies {
7171
api(projects.sentry)
7272
api(projects.sentryAndroidCore)
7373

74-
//noinspection GradleDependency
75-
implementation("io.sentry:sentry-native-ndk:0.7.5")
74+
implementation("io.sentry:sentry-native-ndk:0.7.8")
7675

7776
compileOnly(Config.CompileOnly.jetbrainsAnnotations)
7877

sentry-android-sqlite/src/test/java/io/sentry/android/sqlite/SQLiteSpanManagerTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ class SQLiteSpanManagerTest {
100100

101101
fixture.options.threadChecker = mock<IThreadChecker>()
102102
whenever(fixture.options.threadChecker.isMainThread).thenReturn(false)
103+
whenever(fixture.options.threadChecker.currentThreadName).thenReturn("test")
103104

104105
sut.performSql("sql") {}
105106
val span = fixture.sentryTracer.children.first()
@@ -114,6 +115,7 @@ class SQLiteSpanManagerTest {
114115

115116
fixture.options.threadChecker = mock<IThreadChecker>()
116117
whenever(fixture.options.threadChecker.isMainThread).thenReturn(true)
118+
whenever(fixture.options.threadChecker.currentThreadName).thenReturn("test")
117119

118120
sut.performSql("sql") {}
119121
val span = fixture.sentryTracer.children.first()

sentry-spring-jakarta/src/test/kotlin/io/sentry/spring/jakarta/webflux/SentryWebFluxTracingFilterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ class SentryWebFluxTracingFilterTest {
248248
verify(fixture.chain).filter(fixture.exchange)
249249

250250
verify(fixture.scopes, times(2)).isEnabled
251-
verify(fixture.scopes, times(2)).options
251+
verify(fixture.scopes, times(3)).options
252252
verify(fixture.scopes).continueTrace(anyOrNull(), anyOrNull())
253253
verify(fixture.scopes).addBreadcrumb(any<Breadcrumb>(), any<Hint>())
254254
verify(fixture.scopes).configureScope(any<ScopeCallback>())

sentry-spring/src/test/kotlin/io/sentry/spring/webflux/SentryWebFluxTracingFilterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ class SentryWebFluxTracingFilterTest {
249249
verify(fixture.chain).filter(fixture.exchange)
250250

251251
verify(fixture.scopes).isEnabled
252-
verify(fixture.scopes, times(2)).options
252+
verify(fixture.scopes, times(3)).options
253253
verify(fixture.scopes).continueTrace(anyOrNull(), anyOrNull())
254254
verify(fixture.scopes).addBreadcrumb(any<Breadcrumb>(), any<Hint>())
255255
verify(fixture.scopes).configureScope(any<ScopeCallback>())

sentry/api/sentry.api

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3581,6 +3581,7 @@ public class io/sentry/SpanContext : io/sentry/JsonSerializable, io/sentry/JsonU
35813581
public fun copyForChild (Ljava/lang/String;Lio/sentry/SpanId;Lio/sentry/SpanId;)Lio/sentry/SpanContext;
35823582
public fun equals (Ljava/lang/Object;)Z
35833583
public fun getBaggage ()Lio/sentry/Baggage;
3584+
public fun getData ()Ljava/util/Map;
35843585
public fun getDescription ()Ljava/lang/String;
35853586
public fun getInstrumenter ()Lio/sentry/Instrumenter;
35863587
public fun getOperation ()Ljava/lang/String;
@@ -3615,6 +3616,7 @@ public final class io/sentry/SpanContext$Deserializer : io/sentry/JsonDeserializ
36153616
}
36163617

36173618
public final class io/sentry/SpanContext$JsonKeys {
3619+
public static final field DATA Ljava/lang/String;
36183620
public static final field DESCRIPTION Ljava/lang/String;
36193621
public static final field OP Ljava/lang/String;
36203622
public static final field ORIGIN Ljava/lang/String;
@@ -6542,6 +6544,7 @@ public final class io/sentry/util/UrlUtils$UrlDetails {
65426544

65436545
public abstract interface class io/sentry/util/thread/IThreadChecker {
65446546
public abstract fun currentThreadSystemId ()J
6547+
public abstract fun getCurrentThreadName ()Ljava/lang/String;
65456548
public abstract fun isMainThread ()Z
65466549
public abstract fun isMainThread (J)Z
65476550
public abstract fun isMainThread (Lio/sentry/protocol/SentryThread;)Z
@@ -6551,6 +6554,7 @@ public abstract interface class io/sentry/util/thread/IThreadChecker {
65516554
public final class io/sentry/util/thread/NoOpThreadChecker : io/sentry/util/thread/IThreadChecker {
65526555
public fun <init> ()V
65536556
public fun currentThreadSystemId ()J
6557+
public fun getCurrentThreadName ()Ljava/lang/String;
65546558
public static fun getInstance ()Lio/sentry/util/thread/NoOpThreadChecker;
65556559
public fun isMainThread ()Z
65566560
public fun isMainThread (J)Z
@@ -6560,6 +6564,7 @@ public final class io/sentry/util/thread/NoOpThreadChecker : io/sentry/util/thre
65606564

65616565
public final class io/sentry/util/thread/ThreadChecker : io/sentry/util/thread/IThreadChecker {
65626566
public fun currentThreadSystemId ()J
6567+
public fun getCurrentThreadName ()Ljava/lang/String;
65636568
public static fun getInstance ()Lio/sentry/util/thread/ThreadChecker;
65646569
public fun isMainThread ()Z
65656570
public fun isMainThread (J)Z

sentry/src/main/java/io/sentry/SentryTracer.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.sentry.protocol.TransactionNameSource;
88
import io.sentry.util.Objects;
99
import io.sentry.util.SpanUtils;
10+
import io.sentry.util.thread.IThreadChecker;
1011
import java.util.ArrayList;
1112
import java.util.List;
1213
import java.util.ListIterator;
@@ -518,17 +519,14 @@ private ISpan createChild(
518519
// }
519520
// });
520521
// span.setDescription(description);
521-
final long threadId = scopes.getOptions().getThreadChecker().currentThreadSystemId();
522+
final @NotNull IThreadChecker threadChecker = scopes.getOptions().getThreadChecker();
522523
final SentryId profilerId = scopes.getOptions().getContinuousProfiler().getProfilerId();
523524
if (!profilerId.equals(SentryId.EMPTY_ID)) {
524525
span.setData(SpanDataConvention.PROFILER_ID, profilerId.toString());
525526
}
526-
span.setData(SpanDataConvention.THREAD_ID, String.valueOf(threadId));
527527
span.setData(
528-
SpanDataConvention.THREAD_NAME,
529-
scopes.getOptions().getThreadChecker().isMainThread()
530-
? "main"
531-
: Thread.currentThread().getName());
528+
SpanDataConvention.THREAD_ID, String.valueOf(threadChecker.currentThreadSystemId()));
529+
span.setData(SpanDataConvention.THREAD_NAME, threadChecker.getCurrentThreadName());
532530
this.children.add(span);
533531
if (compositePerformanceCollector != null) {
534532
compositePerformanceCollector.onSpanStarted(span);

sentry/src/main/java/io/sentry/SpanContext.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package io.sentry;
22

33
import com.jakewharton.nopen.annotation.Open;
4+
import io.sentry.protocol.Request;
45
import io.sentry.protocol.SentryId;
56
import io.sentry.util.CollectionUtils;
67
import io.sentry.util.Objects;
8+
import io.sentry.util.thread.IThreadChecker;
79
import io.sentry.vendor.gson.stream.JsonToken;
810
import java.io.IOException;
911
import java.util.Map;
@@ -96,11 +98,12 @@ public SpanContext(
9698
this.description = description;
9799
this.status = status;
98100
this.origin = origin;
99-
final long threadId =
100-
ScopesAdapter.getInstance().getOptions().getThreadChecker().currentThreadSystemId();
101+
final IThreadChecker threadChecker =
102+
ScopesAdapter.getInstance().getOptions().getThreadChecker();
101103
this.data = new ConcurrentHashMap<>();
102-
this.data.put(SpanDataConvention.THREAD_ID, String.valueOf(threadId));
103-
this.data.put(SpanDataConvention.THREAD_NAME, Thread.currentThread().getName());
104+
this.data.put(
105+
SpanDataConvention.THREAD_ID, String.valueOf(threadChecker.currentThreadSystemId()));
106+
this.data.put(SpanDataConvention.THREAD_NAME, threadChecker.getCurrentThreadName());
104107
}
105108

106109
/**
@@ -235,6 +238,10 @@ public void setSamplingDecision(final @Nullable TracesSamplingDecision samplingD
235238
return origin;
236239
}
237240

241+
public @NotNull Map<String, Object> getData() {
242+
return data;
243+
}
244+
238245
public void setOrigin(final @Nullable String origin) {
239246
this.origin = origin;
240247
}
@@ -296,6 +303,7 @@ public static final class JsonKeys {
296303
public static final String STATUS = "status";
297304
public static final String TAGS = "tags";
298305
public static final String ORIGIN = "origin";
306+
public static final String DATA = "data";
299307
}
300308

301309
@Override
@@ -320,6 +328,7 @@ public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger
320328
if (origin != null) {
321329
writer.name(JsonKeys.ORIGIN).value(logger, origin);
322330
}
331+
writer.name(JsonKeys.DATA).value(logger, data);
323332
if (!tags.isEmpty()) {
324333
writer.name(JsonKeys.TAGS).value(logger, tags);
325334
}
@@ -356,6 +365,7 @@ public static final class Deserializer implements JsonDeserializer<SpanContext>
356365
String description = null;
357366
SpanStatus status = null;
358367
String origin = null;
368+
Map<String, Object> data = null;
359369
Map<String, String> tags = null;
360370

361371
Map<String, Object> unknown = null;
@@ -383,6 +393,9 @@ public static final class Deserializer implements JsonDeserializer<SpanContext>
383393
case JsonKeys.ORIGIN:
384394
origin = reader.nextString();
385395
break;
396+
case Request.JsonKeys.DATA:
397+
data = (Map<String, Object>) reader.nextObjectOrNull();
398+
break;
386399
case JsonKeys.TAGS:
387400
tags =
388401
CollectionUtils.newConcurrentHashMap(
@@ -425,6 +438,9 @@ public static final class Deserializer implements JsonDeserializer<SpanContext>
425438
spanContext.setDescription(description);
426439
spanContext.setStatus(status);
427440
spanContext.setOrigin(origin);
441+
if (data != null) {
442+
spanContext.data.putAll(data);
443+
}
428444
if (tags != null) {
429445
spanContext.tags = tags;
430446
}

sentry/src/main/java/io/sentry/protocol/SentryTransaction.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public SentryTransaction(final @NotNull SentryTracer sentryTracer) {
8181

8282
final SpanContext tracerContext = sentryTracer.getSpanContext();
8383
// tags must be placed on the root of the transaction instead of contexts.trace.tags
84-
contexts.setTrace(
84+
final @NotNull SpanContext traceContext =
8585
new SpanContext(
8686
tracerContext.getTraceId(),
8787
tracerContext.getSpanId(),
@@ -90,7 +90,9 @@ public SentryTransaction(final @NotNull SentryTracer sentryTracer) {
9090
tracerContext.getDescription(),
9191
tracerContext.getSamplingDecision(),
9292
tracerContext.getStatus(),
93-
tracerContext.getOrigin()));
93+
tracerContext.getOrigin());
94+
traceContext.getData().putAll(tracerContext.getData());
95+
contexts.setTrace(traceContext);
9496
for (final Map.Entry<String, String> tag : tracerContext.getTags().entrySet()) {
9597
this.setTag(tag.getKey(), tag.getValue());
9698
}

0 commit comments

Comments
 (0)