diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f252e8290..9def037b0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Fixed + +- `opentelemetry-instrumentation-celery` Fix a memory leak where a reference to a task identifier is kept indefinitely + ([#3463](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3463)) + ## Version 1.36.0/0.57b0 (2025-07-29) ### Fixed diff --git a/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py index 908f158507..b9702f46dc 100644 --- a/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py @@ -362,6 +362,7 @@ def _record_histograms(self, task_id, metric_attributes): self.task_id_to_start_time.get(task_id), attributes=metric_attributes, ) + self.task_id_to_start_time.pop(task_id, None) def create_celery_metrics(self, meter) -> None: self.metrics = { diff --git a/instrumentation/opentelemetry-instrumentation-celery/tests/test_metrics.py b/instrumentation/opentelemetry-instrumentation-celery/tests/test_metrics.py index f83759317b..69dae94b81 100644 --- a/instrumentation/opentelemetry-instrumentation-celery/tests/test_metrics.py +++ b/instrumentation/opentelemetry-instrumentation-celery/tests/test_metrics.py @@ -42,6 +42,8 @@ def test_basic_metric(self): task_runtime_estimated = (default_timer() - start_time) * 1000 metrics = self.get_metrics() + self.assertEqual(CeleryInstrumentor().task_id_to_start_time, {}) + CeleryInstrumentor().uninstrument() self.assertEqual(len(metrics), 1)