From 8fd2e8f5ade0631476f45b841c4b3e9106b8169c Mon Sep 17 00:00:00 2001 From: eyalkoren <41850454+eyalkoren@users.noreply.github.com> Date: Sun, 29 Aug 2021 14:18:17 +0300 Subject: [PATCH 1/5] Replace AsyncHttpClient WeakConcurrentMap with SpanConcurrentHashMap --- .../AbstractAsyncHttpClientInstrumentation.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java b/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java index 2f73999f9e..d2fa406a12 100644 --- a/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java @@ -26,7 +26,7 @@ import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; -import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier; +import co.elastic.apm.agent.util.SpanConcurrentHashMap; import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -53,7 +53,7 @@ public abstract class AbstractAsyncHttpClientInstrumentation extends TracerAwareInstrumentation { - static final WeakConcurrentMap, Span> handlerSpanMap = WeakMapSupplier.createMap(); + static final WeakConcurrentMap, Span> handlerSpanMap = SpanConcurrentHashMap.createWeakMap(); public static final List> ASYNC_HANDLER_INSTRUMENTATIONS = Arrays.>asList( AsyncHandlerOnCompletedInstrumentation.class, From ad85dca59a3ba1238c6ff9171537bb462da80a55 Mon Sep 17 00:00:00 2001 From: eyalkoren <41850454+eyalkoren@users.noreply.github.com> Date: Sun, 29 Aug 2021 14:29:10 +0300 Subject: [PATCH 2/5] Replace Dubbo WeakConcurrentMap with SpanConcurrentHashMap --- .../apm/agent/dubbo/AlibabaResponseFutureInstrumentation.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseFutureInstrumentation.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseFutureInstrumentation.java index 3cf96d0460..a3fed718ec 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseFutureInstrumentation.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaResponseFutureInstrumentation.java @@ -22,7 +22,7 @@ import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; -import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier; +import co.elastic.apm.agent.util.SpanConcurrentHashMap; import com.alibaba.dubbo.remoting.exchange.ResponseCallback; import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap; import net.bytebuddy.asm.Advice; @@ -39,7 +39,7 @@ public class AlibabaResponseFutureInstrumentation extends AbstractAlibabaDubboInstrumentation { @VisibleForAdvice - public static final WeakConcurrentMap> callbackSpanMap = WeakMapSupplier.createMap(); + public static final WeakConcurrentMap> callbackSpanMap = SpanConcurrentHashMap.createWeakMap(); @Override public ElementMatcher getTypeMatcher() { From 3707ecbf538973a7bc1186cc0bf468143ad94ee9 Mon Sep 17 00:00:00 2001 From: eyalkoren <41850454+eyalkoren@users.noreply.github.com> Date: Sun, 29 Aug 2021 15:04:17 +0300 Subject: [PATCH 3/5] Replace Lettuce WeakConcurrentMap with SpanConcurrentHashMap --- .../apm/agent/redis/lettuce/Lettuce34Instrumentation.java | 4 ++-- .../agent/redis/lettuce/Lettuce5StartSpanInstrumentation.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/redis/lettuce/Lettuce34Instrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/redis/lettuce/Lettuce34Instrumentation.java index 7bc337c7f4..e1ee3f71bf 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/redis/lettuce/Lettuce34Instrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/redis/lettuce/Lettuce34Instrumentation.java @@ -21,7 +21,7 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.bci.VisibleForAdvice; import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier; +import co.elastic.apm.agent.util.SpanConcurrentHashMap; import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap; import com.lambdaworks.redis.protocol.RedisCommand; import net.bytebuddy.matcher.ElementMatcher; @@ -34,7 +34,7 @@ public abstract class Lettuce34Instrumentation extends TracerAwareInstrumentation { @VisibleForAdvice @SuppressWarnings("WeakerAccess") - public static final WeakConcurrentMap, Span> commandToSpan = WeakMapSupplier.createMap(); + public static final WeakConcurrentMap, Span> commandToSpan = SpanConcurrentHashMap.createWeakMap(); /** * We don't support Lettuce up to version 3.3, as the {@link RedisCommand#getType()} method is missing diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/redis/lettuce/Lettuce5StartSpanInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/redis/lettuce/Lettuce5StartSpanInstrumentation.java index 784cf962b4..4a6eb0e768 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/redis/lettuce/Lettuce5StartSpanInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/redis/lettuce/Lettuce5StartSpanInstrumentation.java @@ -22,7 +22,7 @@ import co.elastic.apm.agent.bci.VisibleForAdvice; import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.redis.RedisSpanUtils; -import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier; +import co.elastic.apm.agent.util.SpanConcurrentHashMap; import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap; import io.lettuce.core.protocol.RedisCommand; import net.bytebuddy.asm.Advice; @@ -49,7 +49,7 @@ public class Lettuce5StartSpanInstrumentation extends TracerAwareInstrumentation @VisibleForAdvice @SuppressWarnings("WeakerAccess") - public static final WeakConcurrentMap, Span> commandToSpan = WeakMapSupplier.createMap(); + public static final WeakConcurrentMap, Span> commandToSpan = SpanConcurrentHashMap.createWeakMap(); @Override public ElementMatcher getTypeMatcher() { From e8173d6e2d223b41134b8f8d9b0c2f7d4456278b Mon Sep 17 00:00:00 2001 From: eyalkoren <41850454+eyalkoren@users.noreply.github.com> Date: Sun, 29 Aug 2021 15:18:00 +0300 Subject: [PATCH 4/5] Replace WeakConcurrentMap with SpanConcurrentHashMap in external process plugin --- .../java/co/elastic/apm/agent/process/ProcessHelper.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessHelper.java b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessHelper.java index d603f41a0e..6c22749a78 100644 --- a/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessHelper.java +++ b/apm-agent-plugins/apm-process-plugin/src/main/java/co/elastic/apm/agent/process/ProcessHelper.java @@ -21,11 +21,10 @@ import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.Outcome; import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier; +import co.elastic.apm.agent.util.SpanConcurrentHashMap; import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap; import javax.annotation.Nonnull; -import java.io.File; import java.util.List; /** @@ -34,7 +33,7 @@ */ class ProcessHelper { - private static final ProcessHelper INSTANCE = new ProcessHelper(WeakMapSupplier.createMap()); + private static final ProcessHelper INSTANCE = new ProcessHelper(SpanConcurrentHashMap.createWeakMap()); private final WeakConcurrentMap inFlightSpans; From 5405a4dc74e28a91835b0cf5c14ae9ab2982bc3d Mon Sep 17 00:00:00 2001 From: eyalkoren <41850454+eyalkoren@users.noreply.github.com> Date: Mon, 13 Sep 2021 09:10:03 +0300 Subject: [PATCH 5/5] Resolve merge conflicts --- .../AbstractAsyncHttpClientInstrumentation.java | 4 ++-- .../co/elastic/apm/agent/dubbo/AlibabaCallbackHolder.java | 4 ++-- .../elastic/apm/agent/lettuce/Lettuce34Instrumentation.java | 5 +++-- .../apm/agent/lettuce/Lettuce5StartSpanInstrumentation.java | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java b/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java index 3132d0c758..ad64dcd9b5 100644 --- a/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-asynchttpclient-plugin/src/main/java/co/elastic/apm/agent/asynchttpclient/AbstractAsyncHttpClientInstrumentation.java @@ -26,7 +26,7 @@ import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.sdk.DynamicTransformer; import co.elastic.apm.agent.sdk.ElasticApmInstrumentation; -import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier; +import co.elastic.apm.agent.util.SpanConcurrentHashMap; import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; @@ -55,7 +55,7 @@ public abstract class AbstractAsyncHttpClientInstrumentation extends TracerAware public static class Helper { - static final WeakConcurrentMap, Span> handlerSpanMap = WeakMapSupplier.createMap(); + static final WeakConcurrentMap, Span> handlerSpanMap = SpanConcurrentHashMap.createWeakMap(); public static final List> ASYNC_HANDLER_INSTRUMENTATIONS = Arrays.>asList( AsyncHandlerOnCompletedInstrumentation.class, diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaCallbackHolder.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaCallbackHolder.java index ba43b54fbb..5db5770c83 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaCallbackHolder.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/AlibabaCallbackHolder.java @@ -19,10 +19,10 @@ package co.elastic.apm.agent.dubbo; import co.elastic.apm.agent.impl.transaction.AbstractSpan; -import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier; +import co.elastic.apm.agent.util.SpanConcurrentHashMap; import com.alibaba.dubbo.remoting.exchange.ResponseCallback; import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap; public class AlibabaCallbackHolder { - public static final WeakConcurrentMap> callbackSpanMap = WeakMapSupplier.createMap(); + public static final WeakConcurrentMap> callbackSpanMap = SpanConcurrentHashMap.createWeakMap(); } diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34Instrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34Instrumentation.java index 2e609f7bd9..66fdfc7637 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34Instrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34Instrumentation.java @@ -20,7 +20,7 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.impl.transaction.Span; -import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier; +import co.elastic.apm.agent.util.SpanConcurrentHashMap; import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap; import com.lambdaworks.redis.protocol.RedisCommand; import net.bytebuddy.matcher.ElementMatcher; @@ -31,7 +31,8 @@ import static co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers.classLoaderCanLoadClass; public abstract class Lettuce34Instrumentation extends TracerAwareInstrumentation { - static final WeakConcurrentMap, Span> commandToSpan = WeakMapSupplier.createMap(); + + static final WeakConcurrentMap, Span> commandToSpan = SpanConcurrentHashMap.createWeakMap(); /** * We don't support Lettuce up to version 3.3, as the {@link RedisCommand#getType()} method is missing diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StartSpanInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StartSpanInstrumentation.java index 9c97098eb2..56fcb1a7eb 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StartSpanInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StartSpanInstrumentation.java @@ -21,7 +21,7 @@ import co.elastic.apm.agent.bci.TracerAwareInstrumentation; import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.redis.RedisSpanUtils; -import co.elastic.apm.agent.sdk.weakmap.WeakMapSupplier; +import co.elastic.apm.agent.util.SpanConcurrentHashMap; import com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMap; import io.lettuce.core.protocol.RedisCommand; import net.bytebuddy.asm.Advice; @@ -46,7 +46,7 @@ */ public class Lettuce5StartSpanInstrumentation extends TracerAwareInstrumentation { - static final WeakConcurrentMap, Span> commandToSpan = WeakMapSupplier.createMap(); + static final WeakConcurrentMap, Span> commandToSpan = SpanConcurrentHashMap.createWeakMap(); @Override public ElementMatcher getTypeMatcher() {