Skip to content

Commit 33fdf5c

Browse files
fix(metrics): guard _advisory access in ExplicitBucketHistogramAggregation for non-Histogram instruments
1 parent 02bcc17 commit 33fdf5c

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/aggregation.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1390,7 +1390,12 @@ def _create_aggregation(
13901390
if self._boundaries is not None:
13911391
boundaries = self._boundaries
13921392
else:
1393-
boundaries = instrument._advisory.explicit_bucket_boundaries
1393+
advisory = getattr(instrument, "_advisory", None)
1394+
boundaries = (
1395+
advisory.explicit_bucket_boundaries
1396+
if advisory is not None
1397+
else None
1398+
)
13941399

13951400
return _ExplicitBucketHistogramAggregation(
13961401
attributes,

opentelemetry-sdk/tests/metrics/test_aggregation.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,21 @@ def test_observable_gauge(self):
671671
)
672672
self.assertIsInstance(aggregation, _LastValueAggregation)
673673

674+
def test_explicit_bucket_histogram_on_instrument_without_boundaries(self):
675+
"""ExplicitBucketHistogramAggregation should not crash when applied
676+
to a non-Histogram instrument without explicit boundaries.
677+
678+
Regression test for https://github.com/open-telemetry/opentelemetry-python/issues/5009
679+
"""
680+
aggregation = ExplicitBucketHistogramAggregation()
681+
result = aggregation._create_aggregation(
682+
_Counter("test.counter", Mock(), Mock()),
683+
Mock(),
684+
_default_reservoir_factory,
685+
0,
686+
)
687+
self.assertIsInstance(result, _ExplicitBucketHistogramAggregation)
688+
674689

675690
class TestExemplarsFromAggregations(TestCase):
676691
def test_collection_simple_fixed_size_reservoir(self):

0 commit comments

Comments
 (0)