Skip to content

Commit 364372d

Browse files
committed
Avoid creating dangling MetricFetchers
When using `setdefault()`, if an object already existed for that key, a `MetricFetcher` will be created anyways, only to be discarded right after it was created. Signed-off-by: Leandro Lucarella <[email protected]>
1 parent abe74d7 commit 364372d

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

RELEASE_NOTES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@
1515
- Fixed a bug that raised `CancelledError` when actor was started with `frequenz.sdk.actor.run` and stopped.
1616

1717
- Stop catching `BaseException` in `frequenz.sdk.actor.run`. Only `CancelledError` and `Exception` are caught now.
18+
19+
- Fix `MetricFetcher` leaks when a requested metric fetcher already existed.

src/frequenz/sdk/timeseries/formula_engine/_formula_engine.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -719,15 +719,15 @@ def push_metric(
719719
invalid data (e.g. due to a component stop). If None, the data from
720720
primary metric fetcher will be used.
721721
"""
722-
fetcher = self._metric_fetchers.setdefault(
723-
name,
724-
MetricFetcher(
722+
fetcher = self._metric_fetchers.get(name)
723+
if fetcher is None:
724+
fetcher = MetricFetcher(
725725
name,
726726
data_stream,
727727
nones_are_zeros=nones_are_zeros,
728728
fallback=fallback,
729-
),
730-
)
729+
)
730+
self._metric_fetchers[name] = fetcher
731731
self._steps.append(fetcher)
732732

733733
def push_constant(self, value: float) -> None:

0 commit comments

Comments
 (0)