From 27a5cf1f92e1d4953f73024240783e0e219952b0 Mon Sep 17 00:00:00 2001 From: jean-philippe bempel Date: Wed, 22 Apr 2026 15:58:20 +0200 Subject: [PATCH 1/2] Fix DebuggerAgent commonInit flag commonInitDone is not reset if the method fails, therefore it cannot be retried if we start another product or restart the same one. Force also to discover agent features/endpoints --- .../communication/ddagent/DDAgentFeaturesDiscovery.java | 5 ++++- .../main/java/com/datadog/debugger/agent/DebuggerAgent.java | 5 ++++- .../smoketest/InProductEnablementIntegrationTest.java | 6 +++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java b/communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java index 755094cc2e4..2938c6cb06e 100644 --- a/communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java +++ b/communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java @@ -182,13 +182,16 @@ private void doDiscovery(State newState) { if (log.isDebugEnabled()) { log.debug( - "discovered traceEndpoint={}, metricsEndpoint={}, supportsDropping={}, supportsLongRunning={}, dataStreamsEndpoint={}, configEndpoint={}, evpProxyEndpoint={}, telemetryProxyEndpoint={}", + "discovered traceEndpoint={}, metricsEndpoint={}, supportsDropping={}, supportsLongRunning={}, dataStreamsEndpoint={}, configEndpoint={}, logEndpoint={}, snapshotEndpoint={}, diagnosticsEndpoint={}, evpProxyEndpoint={}, telemetryProxyEndpoint={}", newState.traceEndpoint, newState.metricsEndpoint, newState.supportsDropping, newState.supportsLongRunning, newState.dataStreamsEndpoint, newState.configEndpoint, + newState.debuggerLogEndpoint, + newState.debuggerSnapshotEndpoint, + newState.debuggerDiagnosticsEndpoint, newState.evpProxyEndpoint, newState.telemetryProxyEndpoint); } 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 2cde2423fa7..cef234b7aa7 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 @@ -126,7 +126,8 @@ private static boolean commonInit(Config config) { Redaction.addUserDefinedTypes(config); DDAgentFeaturesDiscovery ddAgentFeaturesDiscovery = sharedCommunicationObjects.featuresDiscovery(config); - ddAgentFeaturesDiscovery.discoverIfOutdated(); + // force to discover because commonInit can be retried if previously failed + ddAgentFeaturesDiscovery.discover(); agentVersion = ddAgentFeaturesDiscovery.getVersion(); String diagnosticEndpoint = getDiagnosticEndpoint(config, ddAgentFeaturesDiscovery); ProbeStatusSink probeStatusSink = @@ -152,6 +153,8 @@ private static boolean commonInit(Config config) { return true; } catch (Exception ex) { LOGGER.debug("Failed to init common component for debugger agent", ex); + // reset commonInitDone to be able to retry commonInit next time + commonInitDone.set(false); return false; } } diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/InProductEnablementIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/InProductEnablementIntegrationTest.java index 5e353642736..032a184bc28 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/InProductEnablementIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/InProductEnablementIntegrationTest.java @@ -98,12 +98,16 @@ void testExceptionReplayEnablement() throws Exception { @Test @DisplayName("testExceptionReplayEnablementFailure") void testExceptionReplayEnablementFailure() throws Exception { - additionalJvmArgs.add("-Ddd.symbol.database.upload.enabled=false"); // enabled by default + additionalJvmArgs.add("-Ddd.symbol.database.upload.enabled=true"); // enabled by default additionalJvmArgs.add("-Ddd.exception.replay.enabled=true"); additionalJvmArgs.add("-Ddd.third.party.excludes=datadog.smoketest"); this.probeMockDispatcher.setDispatcher(this::noEndpointDispatch); appUrl = startAppAndAndGetUrl(); waitForSpecificLine(appUrl, "Failed to init common component for debugger agent"); + probeMockDispatcher.setDispatcher(this::datadogAgentDispatch); + setConfigOverrides(createConfigOverrides(true, true)); + waitForFeatureStarted(appUrl, "Dynamic Instrumentation"); + waitForFeatureStarted(appUrl, "Exception Replay"); } private MockResponse noEndpointDispatch(RecordedRequest request) { From 5667b1af9aa8e5cc122911267dfd9ca04bbca9fb Mon Sep 17 00:00:00 2001 From: jean-philippe bempel Date: Fri, 24 Apr 2026 16:28:49 +0200 Subject: [PATCH 2/2] fix dispatcher changes with volatile --- .../src/test/java/datadog/smoketest/BaseIntegrationTest.java | 2 +- .../datadog/smoketest/InProductEnablementIntegrationTest.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java index cc35394a502..931cca819d1 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/BaseIntegrationTest.java @@ -592,7 +592,7 @@ protected static boolean logHasErrors(Path logFilePath, Function dispatcher; + private volatile Function dispatcher; @Override public MockResponse dispatch(RecordedRequest request) throws InterruptedException { diff --git a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/InProductEnablementIntegrationTest.java b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/InProductEnablementIntegrationTest.java index 032a184bc28..5f333e8bfa5 100644 --- a/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/InProductEnablementIntegrationTest.java +++ b/dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/InProductEnablementIntegrationTest.java @@ -98,7 +98,6 @@ void testExceptionReplayEnablement() throws Exception { @Test @DisplayName("testExceptionReplayEnablementFailure") void testExceptionReplayEnablementFailure() throws Exception { - additionalJvmArgs.add("-Ddd.symbol.database.upload.enabled=true"); // enabled by default additionalJvmArgs.add("-Ddd.exception.replay.enabled=true"); additionalJvmArgs.add("-Ddd.third.party.excludes=datadog.smoketest"); this.probeMockDispatcher.setDispatcher(this::noEndpointDispatch);