Make context maps 'global' for a given key class name

This ensures that different instrumenters using same key class can see
each others state
This commit is contained in:
Nikolay Martynov 2018-11-02 12:59:30 -04:00
parent df0889b07d
commit 3c0ba56d2c
1 changed files with 1 additions and 6 deletions

View File

@ -11,7 +11,6 @@ import datadog.trace.bootstrap.WeakMap;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import jdk.internal.org.objectweb.asm.ClassWriter; import jdk.internal.org.objectweb.asm.ClassWriter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -298,11 +297,7 @@ public class MapBackedProvider implements InstrumentationContextProvider {
new HashMap<>(instrumenter.contextStore().size()); new HashMap<>(instrumenter.contextStore().size());
for (final String keyClassName : instrumenter.contextStore().keySet()) { for (final String keyClassName : instrumenter.contextStore().keySet()) {
final String dynamicClassName = final String dynamicClassName =
instrumenter.getClass().getName() getClass().getName() + "$ContextStore" + keyClassName.replaceAll("\\.", "\\$");
+ "$ContextStore"
+ keyClassName.replaceAll(".*([^\\.]+)$", "\\1")
+ UUID.randomUUID().toString().replace('-', '_');
dynamicClassNames.put(keyClassName, dynamicClassName); dynamicClassNames.put(keyClassName, dynamicClassName);
dynamicClasses.put(dynamicClassName, makeMapHolderClass(dynamicClassName)); dynamicClasses.put(dynamicClassName, makeMapHolderClass(dynamicClassName));
} }