diff --git a/CHANGELOG.md b/CHANGELOG.md index 9061fdeb1a..8b58a60d2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- `opentelemetry-instrumentation-celery`: Fix a memory leak where a reference to a task identifier is kept indefinitely + ([#3690](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3690)) - `opentelemetry-instrumentation-botocore`: migrate off the deprecated events API to use the logs API ([#3624](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3624)) - `opentelemetry-instrumentation-dbapi`: fix crash retrieving libpq version when enabling commenter with psycopg 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 8a13278b7b..51a85341d6 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)