|
13 | 13 | import java.text.DecimalFormatSymbols; |
14 | 14 | import java.util.ArrayList; |
15 | 15 | import java.util.Arrays; |
| 16 | +import java.util.Collections; |
16 | 17 | import java.util.HashMap; |
17 | 18 | import java.util.List; |
18 | 19 | import java.util.Locale; |
@@ -44,13 +45,13 @@ protected DecimalFormat initialValue() { |
44 | 45 | private static final DecimalFormatterThreadLocal decimalFormatter = |
45 | 46 | new DecimalFormatterThreadLocal(); |
46 | 47 |
|
47 | | - final @NotNull Map<String, String> keyValues; |
48 | | - @Nullable Double sampleRate; |
49 | | - @Nullable Double sampleRand; |
| 48 | + private final @NotNull Map<String, String> keyValues; |
| 49 | + private @Nullable Double sampleRate; |
| 50 | + private @Nullable Double sampleRand; |
50 | 51 |
|
51 | | - final @Nullable String thirdPartyHeader; |
| 52 | + private final @Nullable String thirdPartyHeader; |
52 | 53 | private boolean mutable; |
53 | | - private boolean shouldFreeze; |
| 54 | + private final boolean shouldFreeze; |
54 | 55 | final @NotNull ILogger logger; |
55 | 56 |
|
56 | 57 | @NotNull |
@@ -217,10 +218,12 @@ public Baggage( |
217 | 218 | final @Nullable Double sampleRate, |
218 | 219 | final @Nullable Double sampleRand, |
219 | 220 | final @Nullable String thirdPartyHeader, |
220 | | - boolean isMutable, |
221 | | - boolean shouldFreeze, |
| 221 | + final boolean isMutable, |
| 222 | + final boolean shouldFreeze, |
222 | 223 | final @NotNull ILogger logger) { |
223 | | - this.keyValues = keyValues; |
| 224 | + // TODO should we deep-copy the keyValues here? |
| 225 | + // if so we could optimize this by only synchronizing in case isMutable is true |
| 226 | + this.keyValues = Collections.synchronizedMap(keyValues); |
224 | 227 | this.sampleRate = sampleRate; |
225 | 228 | this.sampleRand = sampleRand; |
226 | 229 | this.logger = logger; |
@@ -440,20 +443,15 @@ public void setReplayId(final @Nullable String replayId) { |
440 | 443 | set(DSCKeys.REPLAY_ID, replayId); |
441 | 444 | } |
442 | 445 |
|
443 | | - @ApiStatus.Internal |
444 | | - public void set(final @NotNull String key, final @Nullable String value) { |
445 | | - set(key, value, false); |
446 | | - } |
447 | | - |
448 | 446 | /** |
449 | | - * Sets / updates a value |
| 447 | + * Sets / updates a value, but only if the baggage is still mutable. |
450 | 448 | * |
451 | 449 | * @param key key |
452 | 450 | * @param value value to set |
453 | | - * @param force ignores mutability of this baggage and sets the value anyways |
454 | 451 | */ |
455 | | - private void set(final @NotNull String key, final @Nullable String value, final boolean force) { |
456 | | - if (mutable || force) { |
| 452 | + @ApiStatus.Internal |
| 453 | + public void set(final @NotNull String key, final @Nullable String value) { |
| 454 | + if (mutable) { |
457 | 455 | this.keyValues.put(key, value); |
458 | 456 | } |
459 | 457 | } |
|
0 commit comments