Skip to content

Commit e60ce1a

Browse files
committed
Reuse unionmaps for thread bound MDCs
1 parent ce2679f commit e60ce1a

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/log/UnionMap.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,31 @@
1414
* Lazy deduplication occurs once: before iterating over entries/values, or when combining sizes.
1515
*/
1616
public final class UnionMap<K, V> extends AbstractMap<K, V> implements Serializable {
17-
private final Map<K, V> primaryMap;
18-
private final Map<K, V> secondaryMap;
17+
private Map<K, V> primaryMap;
18+
private Map<K, V> secondaryMap;
1919
private transient Set<Map.Entry<K, V>> entrySet;
2020
private transient volatile boolean deduped;
21+
private static final ThreadLocal<UnionMap<?, ?>> TL = new ThreadLocal<>();
2122

2223
public UnionMap(Map<K, V> primaryMap, Map<K, V> secondaryMap) {
2324
this.primaryMap = primaryMap;
2425
this.secondaryMap = secondaryMap;
2526
}
2627

28+
@SuppressWarnings({"unchecked"})
29+
public static <K, V> UnionMap<K, V> create(Map<K, V> primaryMap, Map<K, V> secondaryMap) {
30+
UnionMap ret = TL.get();
31+
if (ret == null) {
32+
ret = new UnionMap(primaryMap, secondaryMap);
33+
TL.set(ret);
34+
} else {
35+
ret.primaryMap = primaryMap;
36+
ret.secondaryMap = secondaryMap;
37+
ret.deduped = false;
38+
}
39+
return ret;
40+
}
41+
2742
private void dedup() {
2843
if (!deduped) {
2944
if (primaryMap.isEmpty()) {

dd-java-agent/instrumentation/logback-1/src/main/java/datadog/trace/instrumentation/logback/LoggingEventInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public static void onExit(
110110
correlationValues.put(Tags.DD_VERSION, version);
111111
}
112112

113-
mdc = null != mdc ? new UnionMap<>(mdc, correlationValues) : correlationValues;
113+
mdc = null != mdc ? UnionMap.create(mdc, correlationValues) : correlationValues;
114114
}
115115
}
116116
}

dd-java-agent/instrumentation/tinylog-2.0/src/main/java/datadog/trace/instrumentation/tinylog2/LogEntryInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public static void onExit(
103103
correlationValues.put(Tags.DD_VERSION, version);
104104
}
105105

106-
mdc = null != mdc ? new UnionMap<>(mdc, correlationValues) : correlationValues;
106+
mdc = null != mdc ? UnionMap.create(mdc, correlationValues) : correlationValues;
107107
}
108108
}
109109
}

0 commit comments

Comments
 (0)