Skip to content

Commit bb4cac3

Browse files
committed
fix(core): Stop unfreezing Baggage
1 parent 31f48eb commit bb4cac3

4 files changed

Lines changed: 26 additions & 11 deletions

File tree

sentry/src/main/java/io/sentry/Baggage.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -221,21 +221,23 @@ public Baggage(final @NotNull Baggage baggage) {
221221

222222
@ApiStatus.Internal
223223
static @NotNull Baggage copyWithOverrides(
224-
final @NotNull Baggage baggage,
224+
final @Nullable Baggage baggage,
225225
final @NotNull SentryId traceId,
226226
final @Nullable Double sampleRand) {
227+
final @NotNull Baggage source =
228+
baggage == null ? new Baggage(NoOpLogger.getInstance()) : baggage;
227229
final @NotNull ConcurrentHashMap<String, String> keyValues =
228-
new ConcurrentHashMap<>(baggage.keyValues);
230+
new ConcurrentHashMap<>(source.keyValues);
229231
keyValues.put(DSCKeys.TRACE_ID, traceId.toString());
230232

231233
return new Baggage(
232234
keyValues,
233-
baggage.sampleRate,
235+
source.sampleRate,
234236
sampleRand,
235-
baggage.thirdPartyHeader,
236-
true,
237-
false,
238-
baggage.logger);
237+
source.thirdPartyHeader,
238+
source.mutable,
239+
source.shouldFreeze,
240+
source.logger);
239241
}
240242

241243
@ApiStatus.Internal

sentry/src/main/java/io/sentry/TransactionContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public static TransactionContext fromPropagationContext(
4444
final @NotNull TransactionContext transactionContext) {
4545
final @NotNull Baggage baggage =
4646
Baggage.copyWithOverrides(
47-
propagationContext.getBaggage(),
47+
transactionContext.getBaggage(),
4848
propagationContext.getTraceId(),
4949
propagationContext.getSampleRand());
5050

sentry/src/test/java/io/sentry/BaggageTest.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ class BaggageTest {
440440
}
441441

442442
@Test
443-
fun `copy with overrides creates mutable baggage`() {
443+
fun `copy with overrides preserves frozen state`() {
444444
val baggage =
445445
Baggage.fromHeader(
446446
"sentry-sample_rand=0.1,sentry-trace_id=75302ac48a024bde9a3b3734a82e36c8",
@@ -450,14 +450,24 @@ class BaggageTest {
450450

451451
val copy = Baggage.copyWithOverrides(baggage, SentryId("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 0.2)
452452

453-
assertTrue(copy.isMutable)
454-
assertFalse(copy.isShouldFreeze)
453+
assertFalse(copy.isMutable)
454+
assertTrue(copy.isShouldFreeze)
455455
assertEquals("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", copy.traceId)
456456
assertEquals(0.2, copy.sampleRand!!, 0.0001)
457457
assertEquals("75302ac48a024bde9a3b3734a82e36c8", baggage.traceId)
458458
assertEquals(0.1, baggage.sampleRand!!, 0.0001)
459459
}
460460

461+
@Test
462+
fun `copy with overrides creates baggage when source is null`() {
463+
val copy = Baggage.copyWithOverrides(null, SentryId("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 0.2)
464+
465+
assertTrue(copy.isMutable)
466+
assertFalse(copy.isShouldFreeze)
467+
assertEquals("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", copy.traceId)
468+
assertEquals(0.2, copy.sampleRand!!, 0.0001)
469+
}
470+
461471
@Test
462472
fun `if header contains sentry values baggage is marked as shouldFreeze`() {
463473
val baggage =

sentry/src/test/java/io/sentry/TransactionContextTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class TransactionContextTest {
9999
fun `fromPropagationContextAsRoot copies non trace state`() {
100100
val propagationBaggage = Baggage(NoOpLogger.getInstance())
101101
propagationBaggage.sampleRand = 0.42
102+
propagationBaggage.publicKey = "propagation-public-key"
102103
val propagationContext =
103104
PropagationContext(
104105
SentryId("75302ac48a024bde9a3b3734a82e36c8"),
@@ -109,6 +110,7 @@ class TransactionContextTest {
109110
)
110111
val samplingDecision = TracesSamplingDecision(true, 0.3, true, 0.4)
111112
val transactionContext = TransactionContext("name", "op", samplingDecision)
113+
transactionContext.baggage!!.publicKey = "transaction-public-key"
112114
transactionContext.transactionNameSource = TransactionNameSource.ROUTE
113115
transactionContext.description = "description"
114116
transactionContext.status = SpanStatus.OK
@@ -145,6 +147,7 @@ class TransactionContextTest {
145147
assertEquals(0.4, context.samplingDecision!!.profileSampleRate)
146148
assertEquals(0.42, context.baggage!!.sampleRand)
147149
assertEquals(propagationContext.traceId.toString(), context.baggage!!.traceId)
150+
assertEquals("transaction-public-key", context.baggage!!.publicKey)
148151
assertNull(context.featureFlagBuffer.featureFlags)
149152
}
150153

0 commit comments

Comments
 (0)