diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py index 9bec7de3e7..7bf9bdc235 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py @@ -278,9 +278,6 @@ def collect( is AggregationTemporality.DELTA ): - if current_value is None: - return None - previous_collection_start_nano = ( self._previous_collection_start_nano ) @@ -288,6 +285,9 @@ def collect( collection_start_nano ) + if current_value is None: + return None + return NumberDataPoint( attributes=self._attributes, start_time_unix_nano=previous_collection_start_nano, diff --git a/opentelemetry-sdk/tests/metrics/integration_test/test_sum_aggregation.py b/opentelemetry-sdk/tests/metrics/integration_test/test_sum_aggregation.py index 708b44f5fe..642d2f6717 100644 --- a/opentelemetry-sdk/tests/metrics/integration_test/test_sum_aggregation.py +++ b/opentelemetry-sdk/tests/metrics/integration_test/test_sum_aggregation.py @@ -16,6 +16,7 @@ from logging import ERROR from platform import system from unittest import TestCase +from time import sleep from pytest import mark @@ -345,11 +346,43 @@ def test_synchronous_delta_temporality(self): results.append(reader.get_metrics_data()) - provider.shutdown() - for metrics_data in results: self.assertIsNone(metrics_data) + results = [] + + counter.add(1) + results.append(reader.get_metrics_data()) + + sleep(0.1) + results.append(reader.get_metrics_data()) + + counter.add(2) + results.append(reader.get_metrics_data()) + + metric_data_0 = ( + results[0] + .resource_metrics[0] + .scope_metrics[0] + .metrics[0] + .data.data_points[0] + ) + metric_data_2 = ( + results[2] + .resource_metrics[0] + .scope_metrics[0] + .metrics[0] + .data.data_points[0] + ) + + self.assertIsNone(results[1]) + + self.assertGreater( + metric_data_2.start_time_unix_nano, metric_data_0.time_unix_nano + ) + + provider.shutdown() + @mark.skipif( system() != "Linux", reason=(