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 d7521591efb..cb9b6e58740 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 @@ -143,20 +143,16 @@ public ConflatingMetricsAggregator( @Override public void start() { - if (isMetricsEnabled()) { - sink.register(this); - thread.start(); - cancellation = - AgentTaskScheduler.INSTANCE.scheduleAtFixedRate( - new ReportTask(), - this, - reportingInterval, - reportingInterval, - reportingIntervalTimeUnit); - log.debug("started metrics aggregator"); - } else { - log.debug("metrics not supported by trace agent"); - } + sink.register(this); + thread.start(); + cancellation = + AgentTaskScheduler.INSTANCE.scheduleAtFixedRate( + new ReportTask(), + this, + reportingInterval, + reportingInterval, + reportingIntervalTimeUnit); + log.debug("started metrics aggregator"); } private boolean isMetricsEnabled() { diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy index 498a4b4a0af..bad7eb8f587 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy @@ -463,6 +463,37 @@ class ConflatingMetricAggregatorTest extends DDSpecification { aggregator.close() } + def "should start even if the agent is not available"() { + setup: + MetricWriter writer = Mock(MetricWriter) + Sink sink = Stub(Sink) + DDAgentFeaturesDiscovery features = Mock(DDAgentFeaturesDiscovery) + features.supportsMetrics() >> false + ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, + features, sink, writer, 10, queueSize, 200, MILLISECONDS) + final spans = [ + new SimpleSpan("service" , "operation", "resource", "type", false, true, false, 0, 10, HTTP_OK) + ] + aggregator.start() + + when: + aggregator.publish(spans) + Thread.sleep(1_000) + + then: + 0 * writer._ + when: + features.supportsMetrics() >> true + aggregator.publish(spans) + Thread.sleep(1_000) + + then: + (1.._) * writer._ + + cleanup: + aggregator.close() + } + def "force flush should wait for aggregator to start"() { setup: int maxAggregates = 10