From 2cc3dfe45e48d7ca39844ca9360eb44df6f34598 Mon Sep 17 00:00:00 2001 From: Sebastian Sams Date: Fri, 18 Jul 2025 07:31:16 +0000 Subject: [PATCH 1/2] [SDK] update SimpleFixedSizeExemplarReservoir default size for exponential histograms --- CHANGELOG.md | 3 +++ .../sdk/metrics/exemplar/reservoir_utils.h | 20 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d50de05e61..648c22775f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ Increment the: * [TEST] Shared otel-cpp libs linked to latest static protobuf and grpc [#3544](https://github.com/open-telemetry/opentelemetry-cpp/pull/3544) +* [SDK] Set SimpleFixedSizeExemplarReservoir default size for exponential + histograms based on maximum bucket count + ## [1.22 2025-07-11] * [DOC] Udpate link to membership document diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h index dfd10995a4..7bd1e4a540 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h @@ -5,6 +5,8 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW +# include + # include "opentelemetry/common/macros.h" # include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" # include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" @@ -27,6 +29,22 @@ static inline MapAndResetCellType GetMapAndResetCellMethod( return &ReservoirCell::GetAndResetDouble; } +static inline size_t GetSimpleFixedReservoirDefaultSize(const AggregationType agg_type, + const AggregationConfig *const agg_config) + +{ + constexpr size_t kMaxBase2ExponentialHistogramReservoirSize = 20; + + if (agg_type == AggregationType::kBase2ExponentialHistogram) + { + const auto *histogram_agg_config = + static_cast(agg_config); + return std::min(kMaxBase2ExponentialHistogramReservoirSize, histogram_agg_config->max_buckets_); + } + + return SimpleFixedSizeExemplarReservoir::kDefaultSimpleReservoirSize; +} + static inline nostd::shared_ptr GetExemplarReservoir( const AggregationType agg_type, const AggregationConfig *agg_config, @@ -52,7 +70,7 @@ static inline nostd::shared_ptr GetExemplarReservoir( } return nostd::shared_ptr(new SimpleFixedSizeExemplarReservoir( - SimpleFixedSizeExemplarReservoir::kDefaultSimpleReservoirSize, + GetSimpleFixedReservoirDefaultSize(agg_type, agg_config), SimpleFixedSizeExemplarReservoir::GetSimpleFixedSizeCellSelector(), GetMapAndResetCellMethod(instrument_descriptor))); } From d33bf038e294b3af90b40c662191ad510376b2eb Mon Sep 17 00:00:00 2001 From: Sebastian Sams Date: Fri, 18 Jul 2025 09:47:27 +0000 Subject: [PATCH 2/2] [SDK] fix MSVC compilation error --- .../opentelemetry/sdk/metrics/exemplar/reservoir_utils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h index 7bd1e4a540..6ca88411af 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h @@ -39,7 +39,8 @@ static inline size_t GetSimpleFixedReservoirDefaultSize(const AggregationType ag { const auto *histogram_agg_config = static_cast(agg_config); - return std::min(kMaxBase2ExponentialHistogramReservoirSize, histogram_agg_config->max_buckets_); + return (std::min)(kMaxBase2ExponentialHistogramReservoirSize, + histogram_agg_config->max_buckets_); } return SimpleFixedSizeExemplarReservoir::kDefaultSimpleReservoirSize;