From 86f75b3bb2028e2b14300a2ac84c3996c4bd4f7c Mon Sep 17 00:00:00 2001 From: Tyler Benson Date: Wed, 20 May 2020 16:53:02 -0400 Subject: [PATCH] Register WeakMapProvider earlier in AgentInstaller Specifically it is used statically by `FieldBackedProvider` which was likely called before the `AgentTooling` class was initialized. --- .../src/main/java/datadog/trace/bootstrap/WeakMap.java | 2 +- .../java/datadog/trace/agent/tooling/AgentInstaller.java | 5 +++++ .../main/java/datadog/trace/agent/tooling/AgentTooling.java | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/WeakMap.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/WeakMap.java index 4486ff4132f..6a16cc4d0ac 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/WeakMap.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/WeakMap.java @@ -52,7 +52,7 @@ class Default implements Implementation { @Override public WeakMap get() { - log.warn("WeakMap.Supplier not registered. Returning a synchronized WeakHashMap."); + log.debug("WeakMap.Supplier not registered. Returning a synchronized WeakHashMap."); return new MapAdapter<>(Collections.synchronizedMap(new WeakHashMap())); } } diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java index 03ab1bc6ca3..fdd658a4596 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java @@ -34,6 +34,11 @@ public static Instrumentation getInstrumentation() { return INSTRUMENTATION; } + static { + // WeakMap is used by other classes below, so we need to register the provider first. + AgentTooling.registerWeakMapProvider(); + } + public static void installBytebuddyAgent(final Instrumentation inst) { if (Config.get().isTraceEnabled()) { installBytebuddyAgent(inst, false, new AgentBuilder.Listener[0]); diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentTooling.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentTooling.java index 1079e2803f2..34a5b420311 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentTooling.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentTooling.java @@ -20,7 +20,7 @@ public class AgentTooling { registerWeakMapProvider(); } - private static void registerWeakMapProvider() { + static void registerWeakMapProvider() { if (!WeakMap.Provider.isProviderRegistered()) { WeakMap.Provider.registerIfAbsent(new WeakMapSuppliers.WeakConcurrent()); // WeakMap.Provider.registerIfAbsent(new WeakMapSuppliers.WeakConcurrent.Inline());