From 184a2e10dda03ec48c4cc6ef88d02ff86a95d179 Mon Sep 17 00:00:00 2001 From: jean-philippe bempel Date: Tue, 4 Mar 2025 18:23:51 +0100 Subject: [PATCH] Move ClassName filtering initialization move the the classname filtering when actual feature are enabled because it adds some overhead at startup to read and parse the third-party list --- .../com/datadog/debugger/agent/DebuggerAgent.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerAgent.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerAgent.java index 2a585172849..1b2d0d49f25 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerAgent.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerAgent.java @@ -57,7 +57,7 @@ public class DebuggerAgent { private static DebuggerSink sink; private static String agentVersion; private static JsonSnapshotSerializer snapshotSerializer; - private static ClassNameFilter classNameFilter; + private static volatile ClassNameFilter classNameFilter; private static SymDBEnablement symDBEnablement; private static volatile ConfigurationUpdater configurationUpdater; private static volatile DefaultExceptionDebugger exceptionDebugger; @@ -83,7 +83,6 @@ public static synchronized void run(Instrumentation inst, SharedCommunicationObj config, diagnosticEndpoint, ddAgentFeaturesDiscovery.supportsDebuggerDiagnostics()); DebuggerSink debuggerSink = createDebuggerSink(config, probeStatusSink); debuggerSink.start(); - classNameFilter = new ClassNameFiltering(config); configurationUpdater = new ConfigurationUpdater( instrumentation, @@ -101,7 +100,6 @@ public static synchronized void run(Instrumentation inst, SharedCommunicationObj snapshotSerializer = new JsonSnapshotSerializer(); DebuggerContext.initValueSerializer(snapshotSerializer); DebuggerContext.initTracer(new DebuggerTracer(debuggerSink.getProbeStatusSink())); - DebuggerContext.initClassNameFilter(classNameFilter); if (config.isDebuggerExceptionEnabled()) { startExceptionReplay(); } @@ -128,6 +126,12 @@ public static synchronized void run(Instrumentation inst, SharedCommunicationObj TracerFlare.addReporter(DebuggerAgent::addReportToFlare); } + private static void initClassNameFilter() { + if (classNameFilter == null) { + classNameFilter = new ClassNameFiltering(Config.get()); + } + } + public static void startDynamicInstrumentation() { if (!dynamicInstrumentationEnabled.compareAndSet(false, true)) { return; @@ -143,6 +147,7 @@ public static void startDynamicInstrumentation() { } if (configurationPoller != null) { if (config.isSymbolDatabaseEnabled()) { + initClassNameFilter(); SymbolAggregator symbolAggregator = new SymbolAggregator( classNameFilter, sink.getSymbolSink(), config.getSymbolDatabaseFlushThreshold()); @@ -179,6 +184,7 @@ public static void startExceptionReplay() { return; } LOGGER.info("Starting Exception Replay"); + initClassNameFilter(); Config config = Config.get(); exceptionDebugger = new DefaultExceptionDebugger( @@ -207,6 +213,8 @@ public static void startCodeOriginForSpans() { return; } LOGGER.info("Starting Code Origin for spans"); + initClassNameFilter(); + DebuggerContext.initClassNameFilter(classNameFilter); DebuggerContext.initCodeOrigin( new DefaultCodeOriginRecorder(Config.get(), configurationUpdater)); }