Skip to content

Commit 02325ad

Browse files
lbloderadinauerromtsngetsentry-bot
authored
isTraceSampling is now on by default. tracingOrigins has been replaced by tracePropagationTargets (#2255)
Co-authored-by: Alexander Dinauer <[email protected]> Co-authored-by: Roman Zavarnitsyn <[email protected]> Co-authored-by: Sentry Github Bot <[email protected]> Co-authored-by: Alexander Dinauer <[email protected]>
1 parent c92eb47 commit 02325ad

File tree

26 files changed

+408
-104
lines changed

26 files changed

+408
-104
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
- Make user segment a top level property ([#2257](https://github.com/getsentry/sentry-java/pull/2257))
88
- Replace user `other` with `data` ([#2258](https://github.com/getsentry/sentry-java/pull/2258))
9+
- `isTraceSampling` is now on by default. `tracingOrigins` has been replaced by `tracePropagationTargets` ([#2255](https://github.com/getsentry/sentry-java/pull/2255))
910

1011
## 6.5.0-beta.1
1112

sentry-android-core/src/main/java/io/sentry/android/core/ManifestMetadataReader.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.sentry.protocol.SdkVersion;
1010
import io.sentry.util.Objects;
1111
import java.util.Arrays;
12+
import java.util.Collections;
1213
import java.util.List;
1314
import java.util.Locale;
1415
import org.jetbrains.annotations.ApiStatus;
@@ -64,7 +65,10 @@ final class ManifestMetadataReader {
6465

6566
@ApiStatus.Experimental static final String TRACE_SAMPLING = "io.sentry.traces.trace-sampling";
6667

67-
static final String TRACING_ORIGINS = "io.sentry.traces.tracing-origins";
68+
// TODO: remove in favor of TRACE_PROPAGATION_TARGETS
69+
@Deprecated static final String TRACING_ORIGINS = "io.sentry.traces.tracing-origins";
70+
71+
static final String TRACE_PROPAGATION_TARGETS = "io.sentry.traces.trace-propagation-targets";
6872

6973
static final String ATTACH_THREADS = "io.sentry.attach-threads";
7074
static final String PROGUARD_UUID = "io.sentry.proguard-uuid";
@@ -264,11 +268,22 @@ static void applyMetadata(
264268
options.setIdleTimeout(idleTimeout);
265269
}
266270

267-
final List<String> tracingOrigins = readList(metadata, logger, TRACING_ORIGINS);
268-
if (tracingOrigins != null) {
269-
for (final String tracingOrigin : tracingOrigins) {
270-
options.addTracingOrigin(tracingOrigin);
271-
}
271+
@Nullable
272+
List<String> tracePropagationTargets =
273+
readList(metadata, logger, TRACE_PROPAGATION_TARGETS);
274+
275+
// TODO remove once TRACING_ORIGINS have been removed
276+
if (!metadata.containsKey(TRACE_PROPAGATION_TARGETS)
277+
&& (tracePropagationTargets == null || tracePropagationTargets.isEmpty())) {
278+
tracePropagationTargets = readList(metadata, logger, TRACING_ORIGINS);
279+
}
280+
281+
if ((metadata.containsKey(TRACE_PROPAGATION_TARGETS)
282+
|| metadata.containsKey(TRACING_ORIGINS))
283+
&& tracePropagationTargets == null) {
284+
options.setTracePropagationTargets(Collections.emptyList());
285+
} else if (tracePropagationTargets != null) {
286+
options.setTracePropagationTargets(tracePropagationTargets);
272287
}
273288

274289
options.setProguardUuid(

sentry-android-core/src/test/java/io/sentry/android/core/ManifestMetadataReaderTest.kt

Lines changed: 83 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -698,14 +698,14 @@ class ManifestMetadataReaderTest {
698698
@Test
699699
fun `applyMetadata reads traceSampling to options`() {
700700
// Arrange
701-
val bundle = bundleOf(ManifestMetadataReader.TRACE_SAMPLING to true)
701+
val bundle = bundleOf(ManifestMetadataReader.TRACE_SAMPLING to false)
702702
val context = fixture.getContext(metaData = bundle)
703703

704704
// Act
705705
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
706706

707707
// Assert
708-
assertTrue(fixture.options.isTraceSampling)
708+
assertFalse(fixture.options.isTraceSampling)
709709
}
710710

711711
@Test
@@ -717,7 +717,7 @@ class ManifestMetadataReaderTest {
717717
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
718718

719719
// Assert
720-
assertFalse(fixture.options.isTraceSampling)
720+
assertTrue(fixture.options.isTraceSampling)
721721
}
722722

723723
@Test
@@ -787,28 +787,103 @@ class ManifestMetadataReaderTest {
787787
}
788788

789789
@Test
790-
fun `applyMetadata reads tracingOrigins to options`() {
790+
fun `applyMetadata reads tracePropagationTargets to options`() {
791+
// Arrange
792+
val bundle = bundleOf(ManifestMetadataReader.TRACE_PROPAGATION_TARGETS to """localhost,^(http|https)://api\..*$""")
793+
val context = fixture.getContext(metaData = bundle)
794+
795+
// Act
796+
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
797+
798+
// Assert
799+
assertEquals(listOf("localhost", """^(http|https)://api\..*$"""), fixture.options.tracePropagationTargets)
800+
}
801+
802+
@Test
803+
fun `applyMetadata ignores tracingOrigins if tracePropagationTargets is present`() {
804+
// Arrange
805+
val bundle = bundleOf(
806+
ManifestMetadataReader.TRACE_PROPAGATION_TARGETS to """localhost,^(http|https)://api\..*$""",
807+
ManifestMetadataReader.TRACING_ORIGINS to """otherhost"""
808+
)
809+
val context = fixture.getContext(metaData = bundle)
810+
811+
// Act
812+
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
813+
814+
// Assert
815+
assertEquals(listOf("localhost", """^(http|https)://api\..*$"""), fixture.options.tracePropagationTargets)
816+
}
817+
818+
@Test
819+
fun `applyMetadata ignores tracingOrigins if tracePropagationTargets is present even if null`() {
820+
// Arrange
821+
val bundle = bundleOf(
822+
ManifestMetadataReader.TRACE_PROPAGATION_TARGETS to null,
823+
ManifestMetadataReader.TRACING_ORIGINS to """otherhost"""
824+
)
825+
val context = fixture.getContext(metaData = bundle)
826+
827+
// Act
828+
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
829+
830+
// Assert
831+
assertTrue(fixture.options.tracePropagationTargets.isEmpty())
832+
}
833+
834+
@Test
835+
fun `applyMetadata ignores tracingOrigins if tracePropagationTargets is present even if empty string`() {
836+
// Arrange
837+
val bundle = bundleOf(
838+
ManifestMetadataReader.TRACE_PROPAGATION_TARGETS to "",
839+
ManifestMetadataReader.TRACING_ORIGINS to """otherhost"""
840+
)
841+
val context = fixture.getContext(metaData = bundle)
842+
843+
// Act
844+
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
845+
846+
// Assert
847+
assertTrue(fixture.options.tracePropagationTargets.isEmpty())
848+
}
849+
850+
@Test
851+
fun `applyMetadata uses tracingOrigins if tracePropagationTargets is not present`() {
852+
// Arrange
853+
val bundle = bundleOf(ManifestMetadataReader.TRACING_ORIGINS to """otherhost""")
854+
val context = fixture.getContext(metaData = bundle)
855+
856+
// Act
857+
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
858+
859+
// Assert
860+
assertEquals(listOf("otherhost"), fixture.options.tracePropagationTargets)
861+
}
862+
863+
@Test
864+
fun `applyMetadata reads null tracePropagationTargets and sets empty list`() {
791865
// Arrange
792-
val bundle = bundleOf(ManifestMetadataReader.TRACING_ORIGINS to """localhost,^(http|https)://api\..*$""")
866+
val bundle = bundleOf(ManifestMetadataReader.TRACE_PROPAGATION_TARGETS to null)
793867
val context = fixture.getContext(metaData = bundle)
794868

795869
// Act
796870
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
797871

798872
// Assert
799-
assertEquals(listOf("localhost", """^(http|https)://api\..*$"""), fixture.options.tracingOrigins)
873+
assertTrue(fixture.options.tracePropagationTargets.isEmpty())
800874
}
801875

802876
@Test
803-
fun `applyMetadata reads tracingOrigins to options and keeps default`() {
877+
fun `applyMetadata reads tracePropagationTargets to options and keeps default`() {
804878
// Arrange
805879
val context = fixture.getContext()
806880

807881
// Act
808882
ManifestMetadataReader.applyMetadata(context, fixture.options, fixture.buildInfoProvider)
809883

810884
// Assert
811-
assertTrue(fixture.options.tracingOrigins.isEmpty())
885+
assertTrue(fixture.options.tracePropagationTargets.size == 1)
886+
assertTrue(fixture.options.tracePropagationTargets.first() == ".*")
812887
}
813888

814889
@Test

sentry-android-navigation/src/test/java/io/sentry/android/navigation/SentryNavigationListenerTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class SentryNavigationListenerTest {
5858
): SentryNavigationListener {
5959
whenever(hub.options).thenReturn(
6060
SentryOptions().apply {
61+
dsn = "http://key@localhost/proj"
6162
setTracesSampleRate(
6263
tracesSampleRate
6364
)

sentry-android-okhttp/src/main/java/io/sentry/android/okhttp/SentryOkHttpInterceptor.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import io.sentry.HubAdapter
77
import io.sentry.IHub
88
import io.sentry.ISpan
99
import io.sentry.SpanStatus
10-
import io.sentry.TracingOrigins
10+
import io.sentry.TracePropagationTargets
1111
import io.sentry.TypeCheckHint.OKHTTP_REQUEST
1212
import io.sentry.TypeCheckHint.OKHTTP_RESPONSE
1313
import okhttp3.Interceptor
@@ -37,7 +37,9 @@ class SentryOkHttpInterceptor(
3737
var code: Int? = null
3838
try {
3939
val requestBuilder = request.newBuilder()
40-
if (span != null && TracingOrigins.contain(hub.options.tracingOrigins, request.url.toString())) {
40+
if (span != null &&
41+
TracePropagationTargets.contain(hub.options.tracePropagationTargets, request.url.toString())
42+
) {
4143
span.toSentryTrace().let {
4244
requestBuilder.addHeader(it.name, it.value)
4345
}

sentry-android-okhttp/src/test/java/io/sentry/android/okhttp/SentryOkHttpInterceptorTest.kt

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class SentryOkHttpInterceptorTest {
3939
var interceptor = SentryOkHttpInterceptor(hub)
4040
val server = MockWebServer()
4141
lateinit var sentryTracer: SentryTracer
42+
lateinit var options: SentryOptions
4243

4344
@SuppressWarnings("LongParameterList")
4445
fun getSut(
@@ -47,19 +48,19 @@ class SentryOkHttpInterceptorTest {
4748
responseBody: String = "success",
4849
socketPolicy: SocketPolicy = SocketPolicy.KEEP_OPEN,
4950
beforeSpan: SentryOkHttpInterceptor.BeforeSpanCallback? = null,
50-
includeMockServerInTracingOrigins: Boolean = true
51+
includeMockServerInTracePropagationTargets: Boolean = true,
52+
keepDefaultTracePropagationTargets: Boolean = false,
5153
): OkHttpClient {
52-
whenever(hub.options).thenReturn(
53-
SentryOptions().apply {
54-
dsn = "https://[email protected]/proj"
55-
isTraceSampling = true
56-
if (includeMockServerInTracingOrigins) {
57-
tracingOrigins.add(server.hostName)
58-
} else {
59-
tracingOrigins.add("other-api")
60-
}
54+
options = SentryOptions().apply {
55+
dsn = "https://[email protected]/proj"
56+
isTraceSampling = true
57+
if (includeMockServerInTracePropagationTargets) {
58+
setTracePropagationTargets(listOf(server.hostName))
59+
} else if (!keepDefaultTracePropagationTargets) {
60+
setTracePropagationTargets(listOf("other-api"))
6161
}
62-
)
62+
}
63+
whenever(hub.options).thenReturn(options)
6364

6465
sentryTracer = SentryTracer(TransactionContext("name", "op"), hub)
6566

@@ -103,9 +104,29 @@ class SentryOkHttpInterceptorTest {
103104
assertNotNull(recorderRequest.headers[BaggageHeader.BAGGAGE_HEADER])
104105
}
105106

107+
@Test
108+
fun `when there is an active span and tracing origins contains default regex, adds sentry trace headers to the request`() {
109+
val sut = fixture.getSut(keepDefaultTracePropagationTargets = true)
110+
111+
sut.newCall(getRequest()).execute()
112+
val recorderRequest = fixture.server.takeRequest()
113+
assertNotNull(recorderRequest.headers[SentryTraceHeader.SENTRY_TRACE_HEADER])
114+
assertNotNull(recorderRequest.headers[BaggageHeader.BAGGAGE_HEADER])
115+
}
116+
106117
@Test
107118
fun `when there is an active span and server is not listed in tracing origins, does not add sentry trace headers to the request`() {
108-
val sut = fixture.getSut(includeMockServerInTracingOrigins = false)
119+
val sut = fixture.getSut(includeMockServerInTracePropagationTargets = false)
120+
sut.newCall(Request.Builder().get().url(fixture.server.url("/hello")).build()).execute()
121+
val recorderRequest = fixture.server.takeRequest()
122+
assertNull(recorderRequest.headers[SentryTraceHeader.SENTRY_TRACE_HEADER])
123+
assertNull(recorderRequest.headers[BaggageHeader.BAGGAGE_HEADER])
124+
}
125+
126+
@Test
127+
fun `when there is an active span and server tracing origins is empty, does not add sentry trace headers to the request`() {
128+
val sut = fixture.getSut()
129+
fixture.options.setTracePropagationTargets(emptyList())
109130
sut.newCall(Request.Builder().get().url(fixture.server.url("/hello")).build()).execute()
110131
val recorderRequest = fixture.server.takeRequest()
111132
assertNull(recorderRequest.headers[SentryTraceHeader.SENTRY_TRACE_HEADER])

sentry-apollo-3/src/main/java/io/sentry/apollo3/SentryApollo3HttpInterceptor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import io.sentry.IHub
1515
import io.sentry.ISpan
1616
import io.sentry.SentryLevel
1717
import io.sentry.SpanStatus
18-
import io.sentry.TracingOrigins
18+
import io.sentry.TracePropagationTargets
1919
import io.sentry.TypeCheckHint
2020

2121
class SentryApollo3HttpInterceptor @JvmOverloads constructor(private val hub: IHub = HubAdapter.getInstance(), private val beforeSpan: BeforeSpanCallback? = null) :
@@ -33,7 +33,7 @@ class SentryApollo3HttpInterceptor @JvmOverloads constructor(private val hub: IH
3333

3434
var cleanedHeaders = removeSentryInternalHeaders(request.headers).toMutableList()
3535

36-
if (TracingOrigins.contain(hub.options.tracingOrigins, request.url)) {
36+
if (TracePropagationTargets.contain(hub.options.tracePropagationTargets, request.url)) {
3737
val sentryTraceHeader = span.toSentryTrace()
3838
val baggageHeader = span.toBaggageHeader(request.headers.filter { it.name == BaggageHeader.BAGGAGE_HEADER }.map { it.value })
3939
cleanedHeaders.add(HttpHeader(sentryTraceHeader.name, sentryTraceHeader.value))

sentry-apollo-3/src/test/java/io/sentry/apollo3/SentryApollo3InterceptorWithVariablesTest.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ class SentryApollo3InterceptorWithVariablesTest {
5454
socketPolicy: SocketPolicy = SocketPolicy.KEEP_OPEN,
5555
beforeSpan: BeforeSpanCallback? = null,
5656
): ApolloClient {
57-
whenever(hub.options).thenReturn(SentryOptions())
57+
whenever(hub.options).thenReturn(
58+
SentryOptions().apply {
59+
dsn = "http://key@localhost/proj"
60+
}
61+
)
5862

5963
server.enqueue(
6064
MockResponse()

sentry-apollo/src/test/java/io/sentry/apollo/SentryApolloInterceptorTest.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,11 @@ class SentryApolloInterceptorTest {
5656
socketPolicy: SocketPolicy = SocketPolicy.KEEP_OPEN,
5757
beforeSpan: SentryApolloInterceptor.BeforeSpanCallback? = null
5858
): ApolloClient {
59-
whenever(hub.options).thenReturn(SentryOptions())
59+
whenever(hub.options).thenReturn(
60+
SentryOptions().apply {
61+
dsn = "http://key@localhost/proj"
62+
}
63+
)
6064

6165
server.enqueue(
6266
MockResponse()

sentry-openfeign/src/main/java/io/sentry/openfeign/SentryFeignClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import io.sentry.ISpan;
1414
import io.sentry.SentryTraceHeader;
1515
import io.sentry.SpanStatus;
16-
import io.sentry.TracingOrigins;
16+
import io.sentry.TracePropagationTargets;
1717
import io.sentry.util.Objects;
1818
import java.io.IOException;
1919
import java.util.ArrayList;
@@ -55,7 +55,7 @@ public Response execute(final @NotNull Request request, final @NotNull Request.O
5555

5656
final RequestWrapper requestWrapper = new RequestWrapper(request);
5757

58-
if (TracingOrigins.contain(hub.getOptions().getTracingOrigins(), url)) {
58+
if (TracePropagationTargets.contain(hub.getOptions().getTracePropagationTargets(), url)) {
5959
final SentryTraceHeader sentryTraceHeader = span.toSentryTrace();
6060
final @Nullable Collection<String> requestBaggageHeader =
6161
request.headers().get(BaggageHeader.BAGGAGE_HEADER);

0 commit comments

Comments
 (0)