diff --git a/communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java b/communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java index 1da613eada0..1c55f9ccc82 100644 --- a/communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java +++ b/communication/src/main/java/datadog/communication/ddagent/DDAgentFeaturesDiscovery.java @@ -86,8 +86,8 @@ private static class State { String metricsEndpoint; String dataStreamsEndpoint; boolean supportsLongRunning; - boolean supportsDropping; boolean supportsClientSideStats; + boolean supportsDropping; String state; String configEndpoint; String debuggerLogEndpoint; @@ -166,7 +166,7 @@ private void doDiscovery(State newState) { errorQueryingEndpoint("info", error); } if (fallback) { - newState.supportsDropping = false; + newState.supportsClientSideStats = false; newState.supportsLongRunning = false; log.debug("Falling back to probing, client dropping will be disabled"); // disable metrics unless the info endpoint is present, which prevents @@ -307,13 +307,15 @@ private boolean processInfoResponse(State newState, String response) { Boolean.TRUE.equals(map.getOrDefault("long_running_spans", false)); if (metricsEnabled) { - newState.supportsClientSideStats = !AgentVersion.isVersionBelow(newState.version, 7, 65, 0); Object canDrop = map.get("client_drop_p0s"); newState.supportsDropping = null != canDrop && ("true".equalsIgnoreCase(String.valueOf(canDrop)) || Boolean.TRUE.equals(canDrop)); + newState.supportsClientSideStats = + newState.supportsDropping && !AgentVersion.isVersionBelow(newState.version, 7, 65, 0); + Object peer_tags = map.get("peer_tags"); newState.peerTags = peer_tags instanceof List @@ -360,7 +362,6 @@ private static void discoverStatsDPort(final Map info) { public boolean supportsMetrics() { return metricsEnabled && null != discoveryState.metricsEndpoint - && discoveryState.supportsDropping && discoveryState.supportsClientSideStats; } @@ -380,10 +381,6 @@ public boolean supportsDebuggerDiagnostics() { return discoveryState.debuggerDiagnosticsEndpoint != null; } - public boolean supportsDropping() { - return discoveryState.supportsDropping; - } - public boolean supportsLongRunning() { return discoveryState.supportsLongRunning; } diff --git a/communication/src/test/groovy/datadog/communication/ddagent/DDAgentFeaturesDiscoveryTest.groovy b/communication/src/test/groovy/datadog/communication/ddagent/DDAgentFeaturesDiscoveryTest.groovy index ca662d6fd52..86f8dda7011 100644 --- a/communication/src/test/groovy/datadog/communication/ddagent/DDAgentFeaturesDiscoveryTest.groovy +++ b/communication/src/test/groovy/datadog/communication/ddagent/DDAgentFeaturesDiscoveryTest.groovy @@ -60,7 +60,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { features.getMetricsEndpoint() == V6_METRICS_ENDPOINT !features.supportsMetrics() features.getTraceEndpoint() == "v0.5/traces" - !features.supportsDropping() features.getDataStreamsEndpoint() == V01_DATASTREAMS_ENDPOINT features.supportsDataStreams() features.state() == INFO_STATE @@ -118,7 +117,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { features.getMetricsEndpoint() == V6_METRICS_ENDPOINT !features.supportsMetrics() features.getTraceEndpoint() == "v0.5/traces" - !features.supportsDropping() features.getDataStreamsEndpoint() == V01_DATASTREAMS_ENDPOINT features.supportsDataStreams() features.state() == INFO_STATE @@ -145,7 +143,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { features.getMetricsEndpoint() == V6_METRICS_ENDPOINT features.supportsMetrics() features.getTraceEndpoint() == "v0.5/traces" - features.supportsDropping() features.state() == INFO_WITH_CLIENT_DROPPING_STATE 0 * _ } @@ -201,7 +198,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { features.getMetricsEndpoint() == null !features.supportsMetrics() features.getTraceEndpoint() == "v0.5/traces" - !features.supportsDropping() !features.supportsLongRunning() features.state() == PROBE_STATE 0 * _ @@ -222,7 +218,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { features.getMetricsEndpoint() == null !features.supportsMetrics() features.getTraceEndpoint() == "v0.5/traces" - !features.supportsDropping() !features.supportsLongRunning() features.state() == PROBE_STATE 0 * _ @@ -245,7 +240,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { features.getMetricsEndpoint() == null !features.supportsMetrics() features.getTraceEndpoint() == "v0.4/traces" - !features.supportsDropping() features.state() == PROBE_STATE 0 * _ } @@ -267,7 +261,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { features.getMetricsEndpoint() == null !features.supportsMetrics() features.getTraceEndpoint() == "v0.4/traces" - !features.supportsDropping() features.state() == PROBE_STATE 0 * _ } @@ -290,7 +283,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { !features.supportsMetrics() features.getTraceEndpoint() == "v0.3/traces" !features.supportsLongRunning() - !features.supportsDropping() features.state() == PROBE_STATE 0 * _ } @@ -308,7 +300,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.5/traces" }) >> { Request request -> success(request) } 0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.6/stats" }) !features.supportsMetrics() - !features.supportsDropping() !(features as DroppingPolicy).active() features.state() == PROBE_STATE @@ -318,7 +309,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { then: "metrics and dropping not supported" 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITH_CLIENT_DROPPING_RESPONSE) } !features.supportsMetrics() - !features.supportsDropping() !(features as DroppingPolicy).active() features.state() == INFO_WITH_CLIENT_DROPPING_STATE @@ -328,7 +318,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { then: "metrics and dropping not supported" 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_RESPONSE) } !features.supportsMetrics() - !features.supportsDropping() !(features as DroppingPolicy).active() features.state() == INFO_STATE 0 * _ @@ -346,7 +335,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> notFound(request) } 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) } 0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.6/stats" }) - !features.supportsDropping() !features.supportsMetrics() !(features as DroppingPolicy).active() features.state() == PROBE_STATE @@ -357,7 +345,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { then: "metrics endpoint not probed, metrics and dropping enabled" 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITH_CLIENT_DROPPING_RESPONSE) } 0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) } - features.supportsDropping() features.supportsMetrics() (features as DroppingPolicy).active() features.state() == INFO_WITH_CLIENT_DROPPING_STATE @@ -376,7 +363,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITH_CLIENT_DROPPING_RESPONSE) } 0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) } 0 * client.newCall(_) - features.supportsDropping() features.supportsMetrics() (features as DroppingPolicy).active() features.state() == INFO_WITH_CLIENT_DROPPING_STATE @@ -388,7 +374,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> notFound(request) } 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) } 0 * client.newCall(_) - !features.supportsDropping() !features.supportsMetrics() !(features as DroppingPolicy).active() features.state() == PROBE_STATE @@ -407,7 +392,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITH_CLIENT_DROPPING_RESPONSE) } 0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) } 0 * client.newCall(_) - features.supportsDropping() features.supportsMetrics() (features as DroppingPolicy).active() features.state() == INFO_WITH_CLIENT_DROPPING_STATE @@ -418,8 +402,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { then: "metrics and dropping not supported" 1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITHOUT_METRICS_RESPONSE) } 0 * client.newCall(_) - // misconfigured agent allows dropping but not metrics - features.supportsDropping() !features.supportsMetrics() // but we don't permit dropping anyway !(features as DroppingPolicy).active() @@ -481,7 +463,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { then: 1 * client.newCall(_) >> { Request request -> infoResponse(request, INFO_WITH_PEER_TAG_BACK_PROPAGATION_RESPONSE) } features.state() == INFO_WITH_PEER_TAG_BACK_PROPAGATION_STATE - features.supportsDropping() features.peerTags().containsAll( "_dd.base_service", "active_record.db.vendor", @@ -519,7 +500,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification { infoResponse(request, response) } features.getMetricsEndpoint() == V6_METRICS_ENDPOINT - features.supportsDropping() == true features.supportsMetrics() == expected where: diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java index 3fbac80e9e4..f027c0801c1 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java @@ -289,8 +289,7 @@ public boolean publish(List> trace) { forceKeep |= publish(span, isTopLevel, spanKind); } } - healthMetrics.onClientStatTraceComputed( - counted, trace.size(), features.supportsDropping() && !forceKeep); + healthMetrics.onClientStatTraceComputed(counted, trace.size(), !forceKeep); } return forceKeep; }