From a9c4e76f39be183210ad99bc250097f7b50a58a8 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Mon, 16 Oct 2023 16:54:29 -0700 Subject: [PATCH 01/61] Set ExemplarFilter in SDK --- sdk/include/opentelemetry/sdk/metrics/meter_context.h | 5 +++++ sdk/include/opentelemetry/sdk/metrics/meter_provider.h | 4 ++++ sdk/src/metrics/meter_context.cc | 6 ++++++ sdk/src/metrics/meter_provider.cc | 6 ++++++ 4 files changed, 21 insertions(+) diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index 336f5da7a0..ea0ef27973 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -12,6 +12,7 @@ #include "opentelemetry/common/timestamp.h" #include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/nostd/span.h" +#include "opentelemetry/sdk/metrics/exemplar/filter.h" #include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" @@ -107,6 +108,9 @@ class MeterContext : public std::enable_shared_from_this std::unique_ptr meter_selector, std::unique_ptr view) noexcept; + void SetExemplarFilter( + std::unique_ptr exemplar_filter) noexcept; + /** * NOTE - INTERNAL method, can change in future. * Adds a meter to the list of configured meters in thread safe manner. @@ -135,6 +139,7 @@ class MeterContext : public std::enable_shared_from_this opentelemetry::sdk::resource::Resource resource_; std::vector> collectors_; std::unique_ptr views_; + std::unique_ptr exemplar_filter_; opentelemetry::common::SystemTimestamp sdk_start_ts_; std::vector> meters_; diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h index c7089844a5..f6ea866049 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h @@ -10,6 +10,7 @@ #include "opentelemetry/metrics/meter_provider.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" +#include "opentelemetry/sdk/metrics/exemplar/filter.h" #include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" @@ -100,6 +101,9 @@ class MeterProvider final : public opentelemetry::metrics::MeterProvider std::unique_ptr meter_selector, std::unique_ptr view) noexcept; + void SetExemplarFilter( + std::unique_ptr exemplar_filter) noexcept; + /** * Shutdown the meter provider. */ diff --git a/sdk/src/metrics/meter_context.cc b/sdk/src/metrics/meter_context.cc index 7a299bfc63..8c72ca654e 100644 --- a/sdk/src/metrics/meter_context.cc +++ b/sdk/src/metrics/meter_context.cc @@ -74,6 +74,12 @@ void MeterContext::AddView(std::unique_ptr instrument_select views_->AddView(std::move(instrument_selector), std::move(meter_selector), std::move(view)); } +void MeterContext::SetExemplarFilter( + std::unique_ptr exemplar_filter) noexcept +{ + exemplar_filter_ = std::move(exemplar_filter); +} + void MeterContext::AddMeter(std::shared_ptr meter) { std::lock_guard guard(meter_lock_); diff --git a/sdk/src/metrics/meter_provider.cc b/sdk/src/metrics/meter_provider.cc index 63bea5ae28..eed5008166 100644 --- a/sdk/src/metrics/meter_provider.cc +++ b/sdk/src/metrics/meter_provider.cc @@ -110,6 +110,12 @@ void MeterProvider::AddView(std::unique_ptr instrument_selec std::move(view)); } +void MeterProvider::SetExemplarFilter( + std::unique_ptr exemplar_filter) noexcept +{ + return context_->SetExemplarFilter(std::move(exemplar_filter)); +} + /** * Shutdown the meter provider. */ From aae3d3de1fe00d569712ba1a846bfe7d4a351e41 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Mon, 25 Mar 2024 14:51:29 -0700 Subject: [PATCH 02/61] draft --- ...ned_histogram_bucket_exemplar_reservoir.h} | 6 +-- .../metrics/exemplar/always_sample_filter.h | 43 --------------- .../sdk/metrics/exemplar/filter.h | 54 ------------------- .../sdk/metrics/exemplar/filter_type.h | 42 +++++++++++++++ .../exemplar/filtered_exemplar_reservoir.h | 19 ++++--- .../metrics/exemplar/never_sample_filter.h | 43 --------------- .../metrics/exemplar/no_exemplar_reservoir.h | 2 +- .../sdk/metrics/exemplar/reservoir.h | 8 +-- .../sdk/metrics/exemplar/reservoir_cell.h | 2 +- .../exemplar/reservoir_cell_selector.h | 2 +- .../simple_fixed_size_exemplar_reservoir.h | 46 ++++++++++++++++ .../exemplar/with_trace_sample_filter.h | 44 --------------- .../opentelemetry/sdk/metrics/meter_context.h | 7 ++- .../sdk/metrics/meter_provider.h | 5 +- sdk/src/metrics/CMakeLists.txt | 1 - sdk/src/metrics/exemplar/reservoir.cc | 25 ++++----- sdk/src/metrics/meter.cc | 2 +- sdk/src/metrics/meter_context.cc | 5 +- sdk/src/metrics/meter_provider.cc | 8 +-- sdk/test/metrics/exemplar/BUILD | 17 ------ sdk/test/metrics/exemplar/CMakeLists.txt | 4 +- .../histogram_exemplar_reservoir_test.cc | 5 +- 22 files changed, 141 insertions(+), 249 deletions(-) rename sdk/include/opentelemetry/sdk/metrics/exemplar/{histogram_exemplar_reservoir.h => aligned_histogram_bucket_exemplar_reservoir.h} (92%) delete mode 100644 sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h delete mode 100644 sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h create mode 100644 sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h delete mode 100644 sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h create mode 100644 sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h delete mode 100644 sdk/include/opentelemetry/sdk/metrics/exemplar/with_trace_sample_filter.h diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h similarity index 92% rename from sdk/include/opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h rename to sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index f346160107..a3d5f324b2 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -7,7 +7,7 @@ #include #include "opentelemetry/sdk/metrics/data/exemplar_data.h" -#include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" @@ -29,7 +29,7 @@ namespace sdk namespace metrics { -class HistogramExemplarReservoir : public FixedSizeExemplarReservoir +class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoir { public: @@ -39,7 +39,7 @@ class HistogramExemplarReservoir : public FixedSizeExemplarReservoir return std::shared_ptr{new HistogramCellSelector(boundaries)}; } - HistogramExemplarReservoir(size_t size, + AlignedHistogramBucketExemplarReservoir(size_t size, std::shared_ptr reservoir_cell_selector, std::shared_ptr (ReservoirCell::*map_and_reset_cell)( const opentelemetry::sdk::common::OrderedAttributeMap &attributes)) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h deleted file mode 100644 index 4a1366aa80..0000000000 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/always_sample_filter.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "opentelemetry/sdk/metrics/exemplar/filter.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace context -{ -class Context; -} // namespace context - -namespace sdk -{ -namespace metrics -{ - -class AlwaysSampleFilter final : public ExemplarFilter -{ -public: - bool ShouldSampleMeasurement( - int64_t /* value */, - const MetricAttributes & /* attributes */, - const opentelemetry::context::Context & /* context */) noexcept override - { - return true; - } - - bool ShouldSampleMeasurement( - double /* value */, - const MetricAttributes & /* attributes */, - const opentelemetry::context::Context & /* context */) noexcept override - { - return true; - } - - explicit AlwaysSampleFilter() = default; -}; -} // namespace metrics -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h deleted file mode 100644 index a5fd8966e3..0000000000 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include - -#include "opentelemetry/sdk/metrics/state/filtered_ordered_attribute_map.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace context -{ -class Context; -} // namespace context - -namespace sdk -{ -namespace common -{ -class OrderedAttributeMap; -} // namespace common - -namespace metrics -{ -using MetricAttributes = opentelemetry::sdk::metrics::FilteredOrderedAttributeMap; - -/** - * Exemplar filters are used to pre-filter measurements before attempting to store them in a - * reservoir. - */ -class ExemplarFilter -{ -public: - // Returns whether or not a reservoir should attempt to filter a measurement. - virtual bool ShouldSampleMeasurement(int64_t value, - const MetricAttributes &attributes, - const opentelemetry::context::Context &context) noexcept = 0; - - // Returns whether or not a reservoir should attempt to filter a measurement. - virtual bool ShouldSampleMeasurement(double value, - const MetricAttributes &attributes, - const opentelemetry::context::Context &context) noexcept = 0; - - virtual ~ExemplarFilter() = default; - - static std::shared_ptr GetNeverSampleFilter() noexcept; - static std::shared_ptr GetAlwaysSampleFilter() noexcept; - static std::shared_ptr GetWithTraceSampleFilter() noexcept; -}; - -} // namespace metrics -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h new file mode 100644 index 0000000000..641260b72e --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h @@ -0,0 +1,42 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/sdk/metrics/state/filtered_ordered_attribute_map.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace context +{ +class Context; +} // namespace context + +namespace sdk +{ +namespace common +{ +class OrderedAttributeMap; +} // namespace common + +namespace metrics +{ +using MetricAttributes = opentelemetry::sdk::metrics::FilteredOrderedAttributeMap; + +/** + * Exemplar filter type is used to pre-filter measurements before attempting to store them in a + * reservoir. + * https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#exemplarfilter + */ +enum class ExemplarFilterType : uint8_t +{ + kAlwaysOff, + kAlwaysOn, + kTraceBased +}; + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h index 6ed97a689e..41e56227b8 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h @@ -6,7 +6,7 @@ #include #include -#include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/version.h" @@ -29,9 +29,9 @@ class FilteredExemplarReservoir final : public ExemplarReservoir { public: - FilteredExemplarReservoir(std::shared_ptr filter, + FilteredExemplarReservoir(ExemplarFilterType filter_type, std::shared_ptr reservoir) - : filter_(filter), reservoir_(reservoir) + : filter_type_(filter_type), reservoir_(reservoir) {} void OfferMeasurement(int64_t value, @@ -39,9 +39,10 @@ class FilteredExemplarReservoir final : public ExemplarReservoir const opentelemetry::context::Context &context, const opentelemetry::common::SystemTimestamp ×tamp) noexcept override { - if (filter_->ShouldSampleMeasurement(value, attributes, context)) + if (filter_type_ == ExemplarFilterType::kAlwaysOn || filter_type_ == ExemplarFilterType::kTraceBased && hasSampledTrace(context) { reservoir_->OfferMeasurement(value, attributes, context, timestamp); + return; } } @@ -50,7 +51,7 @@ class FilteredExemplarReservoir final : public ExemplarReservoir const opentelemetry::context::Context &context, const opentelemetry::common::SystemTimestamp ×tamp) noexcept override { - if (filter_->ShouldSampleMeasurement(value, attributes, context)) + if (filter_type_ == ExemplarFilterType::kAlwaysOn || filter_type_ == ExemplarFilterType::kTraceBased && hasSampledTrace(context) { reservoir_->OfferMeasurement(value, attributes, context, timestamp); } @@ -63,8 +64,14 @@ class FilteredExemplarReservoir final : public ExemplarReservoir } private: + static bool hasSampledTrace(const opentelemetry::context::Context &context) + { + return opentelemetry::trace::GetSpan(context)->GetContext().IsValid() && + opentelemetry::trace::GetSpan(context)->GetContext().IsSampled(); + } + explicit FilteredExemplarReservoir() = default; - std::shared_ptr filter_; + ExemplarFilterType filter_type; std::shared_ptr reservoir_; }; diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h deleted file mode 100644 index 84d4ef9f77..0000000000 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/never_sample_filter.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "opentelemetry/sdk/metrics/exemplar/filter.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace context -{ -class Context; -} // namespace context - -namespace sdk -{ -namespace metrics -{ - -class NeverSampleFilter final : public ExemplarFilter -{ -public: - bool ShouldSampleMeasurement( - int64_t /* value */, - const MetricAttributes & /* attributes */, - const opentelemetry::context::Context & /* context */) noexcept override - { - return false; - } - - bool ShouldSampleMeasurement( - double /* value */, - const MetricAttributes & /* attributes */, - const opentelemetry::context::Context & /* context */) noexcept override - { - return false; - } - - explicit NeverSampleFilter() = default; -}; -} // namespace metrics -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h index edcde3c12f..086dee6a59 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h @@ -6,7 +6,7 @@ #include #include -#include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h index 3187e0da26..0a6ffd52f0 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h @@ -6,7 +6,7 @@ #include #include -#include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" #include "opentelemetry/version.h" @@ -64,11 +64,11 @@ class ExemplarReservoir virtual std::vector> CollectAndReset( const MetricAttributes &pointAttributes) noexcept = 0; - static nostd::shared_ptr GetFilteredExemplarReservoir( - std::shared_ptr filter, + static nostd::shared_ptr GetSimpleFilteredExemplarReservoir( + ExemplarFilterType filter_type, std::shared_ptr reservoir); - static nostd::shared_ptr GetHistogramExemplarReservoir( + static nostd::shared_ptr GetAlignedHistogramBucketExemplarReservoir( size_t size, std::shared_ptr reservoir_cell_selector, std::shared_ptr (ReservoirCell::*map_and_reset_cell)( diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h index 772c1cc1f1..c36fa20032 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h @@ -9,7 +9,7 @@ #include "opentelemetry/common/timestamp.h" #include "opentelemetry/nostd/variant.h" #include "opentelemetry/sdk/metrics/data/exemplar_data.h" -#include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/trace/context.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h index b3b2f09e23..a9ce65a298 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h @@ -6,7 +6,7 @@ #include #include -#include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" #include "opentelemetry/version.h" diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h new file mode 100644 index 0000000000..d3a0896faa --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h @@ -0,0 +1,46 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include "opentelemetry/sdk/metrics/data/exemplar_data.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +#include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h" +#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace common +{ +class OrderedAttributeMap; +} // namespace common + +namespace context +{ +class Context; +} // namespace context + +namespace sdk +{ +namespace metrics +{ + +class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir +{ + +public: + SimpleFixedSizeExemplarReservoir(size_t size, + std::shared_ptr reservoir_cell_selector, + std::shared_ptr (ReservoirCell::*map_and_reset_cell)( + const opentelemetry::sdk::common::OrderedAttributeMap &attributes)) + : FixedSizeExemplarReservoir(size, reservoir_cell_selector, map_and_reset_cell) + {} +}; + +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/with_trace_sample_filter.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/with_trace_sample_filter.h deleted file mode 100644 index fbc0489d3d..0000000000 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/with_trace_sample_filter.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "opentelemetry/sdk/metrics/exemplar/filter.h" -#include "opentelemetry/trace/context.h" -#include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace metrics -{ - -class WithTraceSampleFilter final : public ExemplarFilter -{ -public: - bool ShouldSampleMeasurement(int64_t /* value */, - const MetricAttributes & /* attributes */, - const opentelemetry::context::Context &context) noexcept override - { - return hasSampledTrace(context); - } - - bool ShouldSampleMeasurement(double /* value */, - const MetricAttributes & /* attributes */, - const opentelemetry::context::Context &context) noexcept override - { - return hasSampledTrace(context); - } - - explicit WithTraceSampleFilter() = default; - -private: - static bool hasSampledTrace(const opentelemetry::context::Context &context) - { - return opentelemetry::trace::GetSpan(context)->GetContext().IsValid() && - opentelemetry::trace::GetSpan(context)->GetContext().IsSampled(); - } -}; -} // namespace metrics -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index ea0ef27973..216db2c48e 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -12,7 +12,7 @@ #include "opentelemetry/common/timestamp.h" #include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/nostd/span.h" -#include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" @@ -108,8 +108,7 @@ class MeterContext : public std::enable_shared_from_this std::unique_ptr meter_selector, std::unique_ptr view) noexcept; - void SetExemplarFilter( - std::unique_ptr exemplar_filter) noexcept; + void SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type) noexcept; /** * NOTE - INTERNAL method, can change in future. @@ -139,9 +138,9 @@ class MeterContext : public std::enable_shared_from_this opentelemetry::sdk::resource::Resource resource_; std::vector> collectors_; std::unique_ptr views_; - std::unique_ptr exemplar_filter_; opentelemetry::common::SystemTimestamp sdk_start_ts_; std::vector> meters_; + metrics::ExemplarFilterType exemplar_filter_type_; #if defined(__cpp_lib_atomic_value_initialization) && \ __cpp_lib_atomic_value_initialization >= 201911L diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h index f6f9f3e058..aad37feb6c 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h @@ -10,7 +10,7 @@ #include "opentelemetry/metrics/meter_provider.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" -#include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" @@ -101,8 +101,7 @@ class OPENTELEMETRY_EXPORT MeterProvider final : public opentelemetry::metrics:: std::unique_ptr meter_selector, std::unique_ptr view) noexcept; - void SetExemplarFilter( - std::unique_ptr exemplar_filter) noexcept; + void SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type) noexcept; /** * Shutdown the meter provider. diff --git a/sdk/src/metrics/CMakeLists.txt b/sdk/src/metrics/CMakeLists.txt index 134b227893..15611d1cab 100644 --- a/sdk/src/metrics/CMakeLists.txt +++ b/sdk/src/metrics/CMakeLists.txt @@ -23,7 +23,6 @@ add_library( aggregation/lastvalue_aggregation.cc aggregation/sum_aggregation.cc data/circular_buffer.cc - exemplar/filter.cc exemplar/reservoir.cc view/instrument_selector_factory.cc view/meter_selector_factory.cc diff --git a/sdk/src/metrics/exemplar/reservoir.cc b/sdk/src/metrics/exemplar/reservoir.cc index b6f62a9885..8d75586e08 100644 --- a/sdk/src/metrics/exemplar/reservoir.cc +++ b/sdk/src/metrics/exemplar/reservoir.cc @@ -1,11 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include -#include "opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" + +#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" +#include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" @@ -15,21 +15,21 @@ namespace sdk namespace metrics { -nostd::shared_ptr ExemplarReservoir::GetFilteredExemplarReservoir( - std::shared_ptr filter, - std::shared_ptr reservoir) -{ - return nostd::shared_ptr{new FilteredExemplarReservoir{filter, reservoir}}; -} +// nostd::shared_ptr ExemplarReservoir::GetFilteredExemplarReservoir( +// ExemplarFilterType filter_type, +// std::shared_ptr reservoir) +// { +// return nostd::shared_ptr{new SimpleFixedSizeExemplarReservoir{filter_type, reservoir}}; +// } -nostd::shared_ptr ExemplarReservoir::GetHistogramExemplarReservoir( +nostd::shared_ptr ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( size_t size, std::shared_ptr reservoir_cell_selector, std::shared_ptr (ReservoirCell::*map_and_reset_cell)( const common::OrderedAttributeMap &attributes)) { return nostd::shared_ptr{ - new HistogramExemplarReservoir{size, reservoir_cell_selector, map_and_reset_cell}}; + new AlignedHistogramBucketExemplarReservoir{size, reservoir_cell_selector, map_and_reset_cell}}; } nostd::shared_ptr ExemplarReservoir::GetNoExemplarReservoir() @@ -37,6 +37,7 @@ nostd::shared_ptr ExemplarReservoir::GetNoExemplarReservoir() return nostd::shared_ptr{new NoExemplarReservoir{}}; } + } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/metrics/meter.cc b/sdk/src/metrics/meter.cc index 0ae3776111..9515362ec6 100644 --- a/sdk/src/metrics/meter.cc +++ b/sdk/src/metrics/meter.cc @@ -6,7 +6,7 @@ #include "opentelemetry/metrics/noop.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/sdk/metrics/async_instruments.h" -#include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" +#include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" #include "opentelemetry/sdk/metrics/state/observable_registry.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" diff --git a/sdk/src/metrics/meter_context.cc b/sdk/src/metrics/meter_context.cc index e6ca90df9d..b96726f7ee 100644 --- a/sdk/src/metrics/meter_context.cc +++ b/sdk/src/metrics/meter_context.cc @@ -74,10 +74,9 @@ void MeterContext::AddView(std::unique_ptr instrument_select views_->AddView(std::move(instrument_selector), std::move(meter_selector), std::move(view)); } -void MeterContext::SetExemplarFilter( - std::unique_ptr exemplar_filter) noexcept +void MeterContext::SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type) noexcept { - exemplar_filter_ = std::move(exemplar_filter); + exemplar_filter_type_ = exemplar_filter_type; } void MeterContext::AddMeter(std::shared_ptr meter) diff --git a/sdk/src/metrics/meter_provider.cc b/sdk/src/metrics/meter_provider.cc index eed5008166..6dd4a6dad2 100644 --- a/sdk/src/metrics/meter_provider.cc +++ b/sdk/src/metrics/meter_provider.cc @@ -99,21 +99,21 @@ const resource::Resource &MeterProvider::GetResource() const noexcept void MeterProvider::AddMetricReader(std::shared_ptr reader) noexcept { - return context_->AddMetricReader(reader); + context_->AddMetricReader(reader); } void MeterProvider::AddView(std::unique_ptr instrument_selector, std::unique_ptr meter_selector, std::unique_ptr view) noexcept { - return context_->AddView(std::move(instrument_selector), std::move(meter_selector), + context_->AddView(std::move(instrument_selector), std::move(meter_selector), std::move(view)); } void MeterProvider::SetExemplarFilter( - std::unique_ptr exemplar_filter) noexcept + metrics::ExemplarFilterType exemplar_filter_type) noexcept { - return context_->SetExemplarFilter(std::move(exemplar_filter)); + context_->SetExemplarFilter(exemplar_filter_type); } /** diff --git a/sdk/test/metrics/exemplar/BUILD b/sdk/test/metrics/exemplar/BUILD index 61281af745..06a9fb6f95 100644 --- a/sdk/test/metrics/exemplar/BUILD +++ b/sdk/test/metrics/exemplar/BUILD @@ -52,23 +52,6 @@ cc_test( ], ) -cc_test( - name = "always_sample_filter_test", - srcs = [ - "always_sample_filter_test.cc", - ], - tags = [ - "metrics", - "test", - ], - deps = [ - "//api", - "//sdk:headers", - "//sdk/src/metrics", - "@com_google_googletest//:gtest_main", - ], -) - cc_test( name = "reservoir_cell_test", srcs = [ diff --git a/sdk/test/metrics/exemplar/CMakeLists.txt b/sdk/test/metrics/exemplar/CMakeLists.txt index b4d5cfe793..1854a65207 100644 --- a/sdk/test/metrics/exemplar/CMakeLists.txt +++ b/sdk/test/metrics/exemplar/CMakeLists.txt @@ -3,9 +3,9 @@ foreach( testname - no_exemplar_reservoir_test never_sample_filter_test always_sample_filter_test + no_exemplar_reservoir_test histogram_exemplar_reservoir_test reservoir_cell_test - with_trace_sample_filter_test) + ) add_executable(${testname} "${testname}.cc") target_link_libraries( ${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} diff --git a/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc index 927d6bdd31..c0ce2188a1 100644 --- a/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc @@ -1,9 +1,10 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include + #include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" #include -#include OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -18,7 +19,7 @@ class HistogramExemplarReservoirTestPeer : public ::testing::Test TEST_F(HistogramExemplarReservoirTestPeer, OfferMeasurement) { std::vector boundaries{1, 5.0, 10, 15, 20}; - auto histogram_exemplar_reservoir = ExemplarReservoir::GetHistogramExemplarReservoir( + auto histogram_exemplar_reservoir = ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( boundaries.size(), HistogramExemplarReservoir::GetHistogramCellSelector(boundaries), nullptr); histogram_exemplar_reservoir->OfferMeasurement( 1.0, MetricAttributes{}, opentelemetry::context::Context{}, std::chrono::system_clock::now()); From 7bb5d478345966c363a69911a779e9cde0b441e1 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Mon, 25 Mar 2024 23:31:10 -0700 Subject: [PATCH 03/61] fix compilation --- ...gned_histogram_bucket_exemplar_reservoir.h | 12 +++++-- .../exemplar/fixed_size_exemplar_reservoir.h | 6 ++-- .../sdk/metrics/exemplar/reservoir.h | 8 +++-- .../sdk/metrics/exemplar/reservoir_cell.h | 3 ++ .../simple_fixed_size_exemplar_reservoir.h | 3 +- sdk/include/opentelemetry/sdk/metrics/meter.h | 35 +++++++++++++++++++ sdk/src/metrics/exemplar/reservoir.cc | 15 +++++--- sdk/src/metrics/meter.cc | 7 ++-- 8 files changed, 73 insertions(+), 16 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index a3d5f324b2..c5c1128569 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -41,11 +41,19 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi AlignedHistogramBucketExemplarReservoir(size_t size, std::shared_ptr reservoir_cell_selector, - std::shared_ptr (ReservoirCell::*map_and_reset_cell)( - const opentelemetry::sdk::common::OrderedAttributeMap &attributes)) + MapAndResetCellType map_and_reset_cell) : FixedSizeExemplarReservoir(size, reservoir_cell_selector, map_and_reset_cell) {} + void OfferMeasurement( + int64_t value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context, + const opentelemetry::common::SystemTimestamp & /* timestamp */) noexcept override + { + // AlignedHistogramBucketExemplarReservoir shouldn't be used with long values + } + class HistogramCellSelector : public ReservoirCellSelector { public: diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h index 509b2affce..5021aa610e 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h @@ -26,8 +26,7 @@ class FixedSizeExemplarReservoir : public ExemplarReservoir public: FixedSizeExemplarReservoir(size_t size, std::shared_ptr reservoir_cell_selector, - std::shared_ptr (ReservoirCell::*map_and_reset_cell)( - const opentelemetry::sdk::common::OrderedAttributeMap &attributes)) + MapAndResetCellType map_and_reset_cell) : storage_(size), reservoir_cell_selector_(reservoir_cell_selector), map_and_reset_cell_(map_and_reset_cell) @@ -95,8 +94,7 @@ class FixedSizeExemplarReservoir : public ExemplarReservoir explicit FixedSizeExemplarReservoir() = default; std::vector storage_; std::shared_ptr reservoir_cell_selector_; - std::shared_ptr (ReservoirCell::*map_and_reset_cell_)( - const opentelemetry::sdk::common::OrderedAttributeMap &attributes); + MapAndResetCellType map_and_reset_cell_; }; } // namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h index 0a6ffd52f0..02334f5c7a 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h @@ -68,11 +68,15 @@ class ExemplarReservoir ExemplarFilterType filter_type, std::shared_ptr reservoir); + static nostd::shared_ptr GetSimpleFixedSizeExemplarReservoir( + size_t size, + std::shared_ptr reservoir_cell_selector, + MapAndResetCellType map_and_reset_cell); + static nostd::shared_ptr GetAlignedHistogramBucketExemplarReservoir( size_t size, std::shared_ptr reservoir_cell_selector, - std::shared_ptr (ReservoirCell::*map_and_reset_cell)( - const opentelemetry::sdk::common::OrderedAttributeMap &attributes)); + MapAndResetCellType map_and_reset_cell); static nostd::shared_ptr GetNoExemplarReservoir(); }; diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h index c36fa20032..9581ae7772 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h @@ -151,6 +151,9 @@ class ReservoirCell friend class ReservoirCellTestPeer; }; +typedef std::shared_ptr (ReservoirCell::*MapAndResetCellType)( + const MetricAttributes &); + } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h index d3a0896faa..dbd681acea 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h @@ -35,8 +35,7 @@ class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir public: SimpleFixedSizeExemplarReservoir(size_t size, std::shared_ptr reservoir_cell_selector, - std::shared_ptr (ReservoirCell::*map_and_reset_cell)( - const opentelemetry::sdk::common::OrderedAttributeMap &attributes)) + MapAndResetCellType map_and_reset_cell) : FixedSizeExemplarReservoir(size, reservoir_cell_selector, map_and_reset_cell) {} }; diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 7e89d444ab..3dbef85c68 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -15,7 +15,12 @@ #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/unique_ptr.h" +#include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" +#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" +#include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" +#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/instrument_metadata_validator.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/meter_context.h" @@ -138,6 +143,7 @@ class Meter final : public opentelemetry::metrics::Meter new opentelemetry::metrics::NoopObservableInstrument("", "", "")); return noop_instrument; } + static bool ValidateInstrument(nostd::string_view name, nostd::string_view description, nostd::string_view unit) @@ -146,6 +152,35 @@ class Meter final : public opentelemetry::metrics::Meter return instrument_validator.ValidateName(name) && instrument_validator.ValidateUnit(unit) && instrument_validator.ValidateDescription(description); } + + static MapAndResetCellType GetMapAndResetCellMethod(const InstrumentDescriptor &instrument_descriptor) + { + if (instrument_descriptor.value_type_ == InstrumentValueType::kLong) + { + return &ReservoirCell::GetAndResetLong; + } + + return &ReservoirCell::GetAndResetDouble; + } + + static nostd::shared_ptr GetExemplarReservoir(const AggregationType agg_type, const AggregationConfig *agg_config, const InstrumentDescriptor &instrument_descriptor) + { + if (agg_type == AggregationType::kHistogram) + { + const auto *histogram_agg_config = static_cast(agg_config); + if (histogram_agg_config && histogram_agg_config->boundaries_.size() > 0) + { + return nostd::shared_ptr(new AlignedHistogramBucketExemplarReservoir( + histogram_agg_config->boundaries_.size(), + AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(histogram_agg_config->boundaries_), + GetMapAndResetCellMethod(instrument_descriptor))); + } + } + + return nostd::shared_ptr(new SimpleFixedSizeExemplarReservoir(1, + std::shared_ptr(nullptr), + GetMapAndResetCellMethod(instrument_descriptor))); + } }; } // namespace metrics } // namespace sdk diff --git a/sdk/src/metrics/exemplar/reservoir.cc b/sdk/src/metrics/exemplar/reservoir.cc index 8d75586e08..53bcc185dc 100644 --- a/sdk/src/metrics/exemplar/reservoir.cc +++ b/sdk/src/metrics/exemplar/reservoir.cc @@ -22,14 +22,22 @@ namespace metrics // return nostd::shared_ptr{new SimpleFixedSizeExemplarReservoir{filter_type, reservoir}}; // } +nostd::shared_ptr ExemplarReservoir::GetSimpleFixedSizeExemplarReservoir( + size_t size, + std::shared_ptr reservoir_cell_selector, + MapAndResetCellType map_and_reset_cell) +{ + return nostd::shared_ptr{ + new SimpleFixedSizeExemplarReservoir{size, reservoir_cell_selector, map_and_reset_cell}}; +} + nostd::shared_ptr ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( size_t size, std::shared_ptr reservoir_cell_selector, - std::shared_ptr (ReservoirCell::*map_and_reset_cell)( - const common::OrderedAttributeMap &attributes)) + MapAndResetCellType map_and_reset_cell) { return nostd::shared_ptr{ - new AlignedHistogramBucketExemplarReservoir{size, reservoir_cell_selector, map_and_reset_cell}}; + new AlignedHistogramBucketExemplarReservoir{size, AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(), map_and_reset_cell}}; } nostd::shared_ptr ExemplarReservoir::GetNoExemplarReservoir() @@ -37,7 +45,6 @@ nostd::shared_ptr ExemplarReservoir::GetNoExemplarReservoir() return nostd::shared_ptr{new NoExemplarReservoir{}}; } - } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/metrics/meter.cc b/sdk/src/metrics/meter.cc index 9515362ec6..750d1ca85a 100644 --- a/sdk/src/metrics/meter.cc +++ b/sdk/src/metrics/meter.cc @@ -327,7 +327,8 @@ std::unique_ptr Meter::RegisterSyncMetricStorage( auto storage = std::shared_ptr(new SyncMetricStorage( view_instr_desc, view.GetAggregationType(), &view.GetAttributesProcessor(), - ExemplarReservoir::GetNoExemplarReservoir(), view.GetAggregationConfig())); + GetExemplarReservoir(view.GetAggregationType(), view.GetAggregationConfig(), instrument_descriptor), + view.GetAggregationConfig())); storage_registry_[instrument_descriptor.name_] = storage; multi_storage->AddStorage(storage); return true; @@ -369,7 +370,9 @@ std::unique_ptr Meter::RegisterAsyncMetricStorage( view_instr_desc.description_ = view.GetDescription(); } auto storage = std::shared_ptr(new AsyncMetricStorage( - view_instr_desc, view.GetAggregationType(), ExemplarReservoir::GetNoExemplarReservoir(), + view_instr_desc, view.GetAggregationType(), + GetExemplarReservoir(view.GetAggregationType(), view.GetAggregationConfig(), + instrument_descriptor), view.GetAggregationConfig())); storage_registry_[instrument_descriptor.name_] = storage; static_cast(storages.get())->AddStorage(storage); From 968f4aee453cbe86e0f153cb51b2c8ba50bb5ed3 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 12:52:09 -0700 Subject: [PATCH 04/61] Complete SimpleFixedSizeCellSelector --- .../simple_fixed_size_exemplar_reservoir.h | 50 ++++++++++++++++++- sdk/include/opentelemetry/sdk/metrics/meter.h | 4 +- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h index dbd681acea..df7bd90c1b 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h @@ -33,12 +33,60 @@ class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir { public: + static std::shared_ptr GetSimpleFixedSizeCellSelector(size_t size) + { + return std::shared_ptr{ + new SimpleFixedSizeCellSelector{size}}; + } + SimpleFixedSizeExemplarReservoir(size_t size, std::shared_ptr reservoir_cell_selector, MapAndResetCellType map_and_reset_cell) : FixedSizeExemplarReservoir(size, reservoir_cell_selector, map_and_reset_cell) {} -}; + + class SimpleFixedSizeCellSelector : public ReservoirCellSelector + { + public: + SimpleFixedSizeCellSelector(size_t size) : size_(size) {} + + int ReservoirCellIndexFor(const std::vector &cells, + int64_t value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) override + { + return ReservoirCellIndexFor(cells, static_cast(value), attributes, context); + } + + int ReservoirCellIndexFor(const std::vector & /* cells */, + double /* value */, + const MetricAttributes & /* attributes */, + const opentelemetry::context::Context & /* context */) override + { + size_t measurement_num = measurements_seen_++; + size_t index = static_cast(-1); + + if (measurement_num < size_) + { + index = measurement_num; + } + else + { + // return random index between 0 and measurement_num + index = rand() % (measurement_num + 1); + } + + return static_cast(index); + } + + void reset() override {} + + private: + size_t measurements_seen_ = 0; + size_t size_; +}; // class SimpleFixedSizeCellSelector + +}; // class SimpleFixedSizeExemplarReservoir } // namespace metrics } // namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 3dbef85c68..305f7feb08 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -168,7 +168,9 @@ class Meter final : public opentelemetry::metrics::Meter if (agg_type == AggregationType::kHistogram) { const auto *histogram_agg_config = static_cast(agg_config); - if (histogram_agg_config && histogram_agg_config->boundaries_.size() > 0) + // Explicit bucket histogram aggregation with more than 1 bucket will use AlignedHistogramBucketExemplarReservoir. + // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#exemplar-defaults + if (histogram_agg_config != nullptr && histogram_agg_config->boundaries_.size() > 1) { return nostd::shared_ptr(new AlignedHistogramBucketExemplarReservoir( histogram_agg_config->boundaries_.size(), From 093b133c6d95e11cbd8358202b1ff35442aa2532 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 13:27:50 -0700 Subject: [PATCH 05/61] fix building tests --- .../aligned_histogram_bucket_exemplar_reservoir.h | 12 ++++++++---- .../simple_fixed_size_exemplar_reservoir.h | 6 ++++-- sdk/include/opentelemetry/sdk/metrics/meter.h | 7 ++++--- .../opentelemetry/sdk/metrics/meter_context.h | 4 +++- .../sdk/metrics/state/async_metric_storage.h | 4 ++++ .../sdk/metrics/state/sync_metric_storage.h | 4 ++++ sdk/src/metrics/meter.cc | 8 ++++++-- sdk/src/metrics/meter_context.cc | 5 +++++ sdk/test/metrics/async_metric_storage_test.cc | 14 +++++++++++--- sdk/test/metrics/cardinality_limit_test.cc | 2 ++ .../metrics/sync_metric_storage_counter_test.cc | 3 +++ .../metrics/sync_metric_storage_histogram_test.cc | 3 +++ .../sync_metric_storage_up_down_counter_test.cc | 3 +++ 13 files changed, 60 insertions(+), 15 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index c5c1128569..0451390c44 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -6,6 +6,7 @@ #include #include +#include "opentelemetry/sdk/common/global_log_handler.h" #include "opentelemetry/sdk/metrics/data/exemplar_data.h" #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h" @@ -42,7 +43,7 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi AlignedHistogramBucketExemplarReservoir(size_t size, std::shared_ptr reservoir_cell_selector, MapAndResetCellType map_and_reset_cell) - : FixedSizeExemplarReservoir(size, reservoir_cell_selector, map_and_reset_cell) + : FixedSizeExemplarReservoir(size + 1, reservoir_cell_selector, map_and_reset_cell) {} void OfferMeasurement( @@ -51,7 +52,7 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi const opentelemetry::context::Context &context, const opentelemetry::common::SystemTimestamp & /* timestamp */) noexcept override { - // AlignedHistogramBucketExemplarReservoir shouldn't be used with long values + OTEL_INTERNAL_LOG_ERROR("AlignedHistogramBucketExemplarReservoir shouldn't be used with int64_t values"); } class HistogramCellSelector : public ReservoirCellSelector @@ -64,7 +65,8 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi const MetricAttributes &attributes, const opentelemetry::context::Context &context) override { - return ReservoirCellIndexFor(cells, static_cast(value), attributes, context); + OTEL_INTERNAL_LOG_ERROR("AlignedHistogramBucketExemplarReservoir shouldn't be used with int64_t values"); + return -1; } int ReservoirCellIndexFor(const std::vector & /* cells */, @@ -80,7 +82,9 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi return static_cast(i); } } - return -1; + + // the bucket at max_size is for values greater than the last boundary + return static_cast(max_size); } private: diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h index df7bd90c1b..67976f392f 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h @@ -31,9 +31,11 @@ namespace metrics class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir { - public: - static std::shared_ptr GetSimpleFixedSizeCellSelector(size_t size) + + static const size_t kDefaultSimpleReservoirSize = 1; + + static std::shared_ptr GetSimpleFixedSizeCellSelector(size_t size = kDefaultSimpleReservoirSize) { return std::shared_ptr{ new SimpleFixedSizeCellSelector{size}}; diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 305f7feb08..49a09e6409 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -179,9 +179,10 @@ class Meter final : public opentelemetry::metrics::Meter } } - return nostd::shared_ptr(new SimpleFixedSizeExemplarReservoir(1, - std::shared_ptr(nullptr), - GetMapAndResetCellMethod(instrument_descriptor))); + return nostd::shared_ptr(new SimpleFixedSizeExemplarReservoir( + SimpleFixedSizeExemplarReservoir::kDefaultSimpleReservoirSize, + SimpleFixedSizeExemplarReservoir::GetSimpleFixedSizeCellSelector(), + GetMapAndResetCellMethod(instrument_descriptor))); } }; } // namespace metrics diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index 216db2c48e..f4d6ff7d49 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -108,7 +108,9 @@ class MeterContext : public std::enable_shared_from_this std::unique_ptr meter_selector, std::unique_ptr view) noexcept; - void SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type) noexcept; + void SetExemplarFilter(ExemplarFilterType exemplar_filter_type) noexcept; + + ExemplarFilterType GetExemplarFilter() const noexcept; /** * NOTE - INTERNAL method, can change in future. diff --git a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h index 6a01d5c7f0..4b7db3f5e2 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h @@ -10,6 +10,7 @@ #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/observer_result.h" @@ -30,6 +31,7 @@ class AsyncMetricStorage : public MetricStorage, public AsyncWritableMetricStora public: AsyncMetricStorage(InstrumentDescriptor instrument_descriptor, const AggregationType aggregation_type, + ExemplarFilterType exempler_filter_type, nostd::shared_ptr &&exemplar_reservoir OPENTELEMETRY_MAYBE_UNUSED, const AggregationConfig *aggregation_config) @@ -38,6 +40,7 @@ class AsyncMetricStorage : public MetricStorage, public AsyncWritableMetricStora cumulative_hash_map_(new AttributesHashMap()), delta_hash_map_(new AttributesHashMap()), #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + exemplar_filter_type_(exempler_filter_type), exemplar_reservoir_(exemplar_reservoir), #endif temporal_metric_storage_(instrument_descriptor, aggregation_type, aggregation_config) @@ -131,6 +134,7 @@ class AsyncMetricStorage : public MetricStorage, public AsyncWritableMetricStora std::unique_ptr delta_hash_map_; opentelemetry::common::SpinLockMutex hashmap_lock_; #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + ExemplarFilterType exemplar_filter_type_; nostd::shared_ptr exemplar_reservoir_; #endif TemporalMetricStorage temporal_metric_storage_; diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index 6168415ff1..c20c85e30b 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -17,6 +17,7 @@ #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" #include "opentelemetry/sdk/metrics/state/metric_collector.h" @@ -38,6 +39,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage SyncMetricStorage(InstrumentDescriptor instrument_descriptor, const AggregationType aggregation_type, const AttributesProcessor *attributes_processor, + ExemplarFilterType exempler_filter_type, nostd::shared_ptr &&exemplar_reservoir OPENTELEMETRY_MAYBE_UNUSED, const AggregationConfig *aggregation_config, @@ -46,6 +48,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage attributes_hashmap_(new AttributesHashMap(attributes_limit)), attributes_processor_(attributes_processor), #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + exemplar_filter_type_(exempler_filter_type), exemplar_reservoir_(exemplar_reservoir), #endif temporal_metric_storage_(instrument_descriptor, aggregation_type, aggregation_config) @@ -167,6 +170,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage std::function()> create_default_aggregation_; const AttributesProcessor *attributes_processor_; #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + ExemplarFilterType exemplar_filter_type_; nostd::shared_ptr exemplar_reservoir_; #endif TemporalMetricStorage temporal_metric_storage_; diff --git a/sdk/src/metrics/meter.cc b/sdk/src/metrics/meter.cc index 750d1ca85a..21d0d0bae9 100644 --- a/sdk/src/metrics/meter.cc +++ b/sdk/src/metrics/meter.cc @@ -310,10 +310,11 @@ std::unique_ptr Meter::RegisterSyncMetricStorage( return nullptr; } auto view_registry = ctx->GetViewRegistry(); + auto exemplar_filter_type = ctx->GetExemplarFilter(); std::unique_ptr storages(new SyncMultiMetricStorage()); auto success = view_registry->FindViews( - instrument_descriptor, *scope_, [this, &instrument_descriptor, &storages](const View &view) { + instrument_descriptor, *scope_, [this, &instrument_descriptor, &storages, exemplar_filter_type](const View &view) { auto view_instr_desc = instrument_descriptor; if (!view.GetName().empty()) { @@ -327,6 +328,7 @@ std::unique_ptr Meter::RegisterSyncMetricStorage( auto storage = std::shared_ptr(new SyncMetricStorage( view_instr_desc, view.GetAggregationType(), &view.GetAttributesProcessor(), + exemplar_filter_type, GetExemplarReservoir(view.GetAggregationType(), view.GetAggregationConfig(), instrument_descriptor), view.GetAggregationConfig())); storage_registry_[instrument_descriptor.name_] = storage; @@ -356,10 +358,11 @@ std::unique_ptr Meter::RegisterAsyncMetricStorage( return nullptr; } auto view_registry = ctx->GetViewRegistry(); + auto exemplar_filter_type = ctx->GetExemplarFilter(); std::unique_ptr storages(new AsyncMultiMetricStorage()); auto success = view_registry->FindViews( instrument_descriptor, *GetInstrumentationScope(), - [this, &instrument_descriptor, &storages](const View &view) { + [this, &instrument_descriptor, &storages, exemplar_filter_type](const View &view) { auto view_instr_desc = instrument_descriptor; if (!view.GetName().empty()) { @@ -371,6 +374,7 @@ std::unique_ptr Meter::RegisterAsyncMetricStorage( } auto storage = std::shared_ptr(new AsyncMetricStorage( view_instr_desc, view.GetAggregationType(), + exemplar_filter_type, GetExemplarReservoir(view.GetAggregationType(), view.GetAggregationConfig(), instrument_descriptor), view.GetAggregationConfig())); diff --git a/sdk/src/metrics/meter_context.cc b/sdk/src/metrics/meter_context.cc index b96726f7ee..ea3c6db4dd 100644 --- a/sdk/src/metrics/meter_context.cc +++ b/sdk/src/metrics/meter_context.cc @@ -79,6 +79,11 @@ void MeterContext::SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter exemplar_filter_type_ = exemplar_filter_type; } +ExemplarFilterType MeterContext::GetExemplarFilter() const noexcept +{ + return exemplar_filter_type_; +} + void MeterContext::AddMeter(std::shared_ptr meter) { std::lock_guard guard(meter_lock_); diff --git a/sdk/test/metrics/async_metric_storage_test.cc b/sdk/test/metrics/async_metric_storage_test.cc index 7b43fea14d..858f64524a 100644 --- a/sdk/test/metrics/async_metric_storage_test.cc +++ b/sdk/test/metrics/async_metric_storage_test.cc @@ -5,6 +5,7 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/sdk/metrics/async_instruments.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/meter_context.h" @@ -55,7 +56,9 @@ TEST_P(WritableMetricStorageTestFixture, TestAggregation) collectors.push_back(collector); opentelemetry::sdk::metrics::AsyncMetricStorage storage( - instr_desc, AggregationType::kSum, ExemplarReservoir::GetNoExemplarReservoir(), nullptr); + instr_desc, AggregationType::kSum, + ExemplarFilterType::kAlwaysOff, + ExemplarReservoir::GetNoExemplarReservoir(), nullptr); int64_t get_count1 = 20; int64_t put_count1 = 10; std::unordered_map measurements1 = { @@ -146,7 +149,10 @@ TEST_P(WritableMetricStorageTestUpDownFixture, TestAggregation) collectors.push_back(collector); opentelemetry::sdk::metrics::AsyncMetricStorage storage( - instr_desc, AggregationType::kDefault, ExemplarReservoir::GetNoExemplarReservoir(), nullptr); + instr_desc, AggregationType::kDefault, + ExemplarFilterType::kAlwaysOff, + ExemplarReservoir::GetNoExemplarReservoir(), + nullptr); int64_t get_count1 = 20; int64_t put_count1 = 10; std::unordered_map measurements1 = { @@ -236,7 +242,9 @@ TEST_P(WritableMetricStorageTestObservableGaugeFixture, TestAggregation) collectors.push_back(collector); opentelemetry::sdk::metrics::AsyncMetricStorage storage( - instr_desc, AggregationType::kLastValue, ExemplarReservoir::GetNoExemplarReservoir(), + instr_desc, AggregationType::kLastValue, + ExemplarFilterType::kAlwaysOff, + ExemplarReservoir::GetNoExemplarReservoir(), nullptr); int64_t freq_cpu0 = 3; int64_t freq_cpu1 = 5; diff --git a/sdk/test/metrics/cardinality_limit_test.cc b/sdk/test/metrics/cardinality_limit_test.cc index 621241557b..932fc8807f 100644 --- a/sdk/test/metrics/cardinality_limit_test.cc +++ b/sdk/test/metrics/cardinality_limit_test.cc @@ -4,6 +4,7 @@ #include "common.h" #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/sdk/metrics/aggregation/sum_aggregation.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" @@ -67,6 +68,7 @@ TEST_P(WritableMetricStorageCardinalityLimitTestFixture, LongCounterSumAggregati std::unique_ptr default_attributes_processor{ new DefaultAttributesProcessor{}}; SyncMetricStorage storage(instr_desc, AggregationType::kSum, default_attributes_processor.get(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), nullptr, attributes_limit); long record_value = 100; diff --git a/sdk/test/metrics/sync_metric_storage_counter_test.cc b/sdk/test/metrics/sync_metric_storage_counter_test.cc index e27a9f5a24..c01340a2ad 100644 --- a/sdk/test/metrics/sync_metric_storage_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_counter_test.cc @@ -6,6 +6,7 @@ #include #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" @@ -37,6 +38,7 @@ TEST_P(WritableMetricStorageTestFixture, LongCounterSumAggregation) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), nullptr); storage.RecordLong(10, KeyValueIterableView>(attributes_get), @@ -174,6 +176,7 @@ TEST_P(WritableMetricStorageTestFixture, DoubleCounterSumAggregation) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), nullptr); storage.RecordDouble(10.0, diff --git a/sdk/test/metrics/sync_metric_storage_histogram_test.cc b/sdk/test/metrics/sync_metric_storage_histogram_test.cc index 3da2b0538e..b44262be9d 100644 --- a/sdk/test/metrics/sync_metric_storage_histogram_test.cc +++ b/sdk/test/metrics/sync_metric_storage_histogram_test.cc @@ -5,6 +5,7 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" @@ -38,6 +39,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, LongHistogram) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kHistogram, default_attributes_processor.get(), + ExemplarFilterType::kAlwaysOff, NoExemplarReservoir::GetNoExemplarReservoir(), nullptr); storage.RecordLong(10, KeyValueIterableView>(attributes_get), @@ -176,6 +178,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, DoubleHistogram) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kHistogram, default_attributes_processor.get(), + ExemplarFilterType::kAlwaysOff, NoExemplarReservoir::GetNoExemplarReservoir(), nullptr); storage.RecordDouble(10.0, diff --git a/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc b/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc index 15077b428a..d2281831e1 100644 --- a/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc @@ -5,6 +5,7 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" @@ -37,6 +38,7 @@ TEST_P(WritableMetricStorageTestFixture, LongUpDownCounterSumAggregation) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), nullptr); int64_t val1 = 10, val2 = 30, val3 = -5, val4 = -10; @@ -184,6 +186,7 @@ TEST_P(WritableMetricStorageTestFixture, DoubleUpDownCounterSumAggregation) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), nullptr); storage.RecordDouble(10.0, From 3df58f4ee411c01a1a7c4aade806297f898b6dc7 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 13:44:57 -0700 Subject: [PATCH 06/61] Enable in sync metric strorage --- .../sdk/metrics/state/sync_metric_storage.h | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index c20c85e30b..6be0c1794e 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -69,7 +69,11 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage return; } #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - exemplar_reservoir_->OfferMeasurement(value, {}, context, std::chrono::system_clock::now()); + // TODO: fixme + if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + { + exemplar_reservoir_->OfferMeasurement(value, {}, context, std::chrono::system_clock::now()); + } #endif static size_t hash = opentelemetry::sdk::common::GetHash(""); std::lock_guard guard(attribute_hashmap_lock_); @@ -86,8 +90,11 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage return; } #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - exemplar_reservoir_->OfferMeasurement(value, attributes, context, - std::chrono::system_clock::now()); + // TODO: fixme + if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + { + exemplar_reservoir_->OfferMeasurement(value, attributes, context, std::chrono::system_clock::now()); + } #endif auto hash = opentelemetry::sdk::common::GetHashForAttributeMap( attributes, [this](nostd::string_view key) { @@ -116,7 +123,10 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage return; } #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - exemplar_reservoir_->OfferMeasurement(value, {}, context, std::chrono::system_clock::now()); + if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + { + exemplar_reservoir_->OfferMeasurement(value, {}, context, std::chrono::system_clock::now()); + } #endif static size_t hash = opentelemetry::sdk::common::GetHash(""); std::lock_guard guard(attribute_hashmap_lock_); @@ -129,16 +139,22 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage OPENTELEMETRY_MAYBE_UNUSED) noexcept override { #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - exemplar_reservoir_->OfferMeasurement(value, attributes, context, - std::chrono::system_clock::now()); + if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + { + exemplar_reservoir_->OfferMeasurement(value, attributes, context, + std::chrono::system_clock::now()); + } #endif if (instrument_descriptor_.value_type_ != InstrumentValueType::kDouble) { return; } #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - exemplar_reservoir_->OfferMeasurement(value, attributes, context, - std::chrono::system_clock::now()); + if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + { + exemplar_reservoir_->OfferMeasurement(value, attributes, context, + std::chrono::system_clock::now()); + } #endif auto hash = opentelemetry::sdk::common::GetHashForAttributeMap( attributes, [this](nostd::string_view key) { From ce10f0c7c220bf0b681c30f5ffa2b41bcaf6320a Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 14:42:19 -0700 Subject: [PATCH 07/61] Enable sampling based on trace --- .../sdk/metrics/state/async_metric_storage.h | 5 +++- .../sdk/metrics/state/sync_metric_storage.h | 30 ++++++++++++++----- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h index 4b7db3f5e2..c241ffde9d 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h @@ -57,8 +57,11 @@ class AsyncMetricStorage : public MetricStorage, public AsyncWritableMetricStora for (auto &measurement : measurements) { #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - exemplar_reservoir_->OfferMeasurement(measurement.second, {}, {}, + if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn) + { + exemplar_reservoir_->OfferMeasurement(measurement.second, {}, {}, std::chrono::system_clock::now()); + } #endif auto aggr = DefaultAggregation::CreateAggregation(aggregation_type_, instrument_descriptor_); diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index 6be0c1794e..f3992d410d 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -22,7 +22,6 @@ #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" #include "opentelemetry/sdk/metrics/state/metric_collector.h" #include "opentelemetry/sdk/metrics/state/metric_storage.h" - #include "opentelemetry/sdk/metrics/state/temporal_metric_storage.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" #include "opentelemetry/version.h" @@ -35,6 +34,23 @@ namespace metrics class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage { +static inline bool EnableExamplarFilter(ExemplarFilterType filter_type, const opentelemetry::context::Context &context) +{ + if (filter_type == ExemplarFilterType::kAlwaysOn) + { + return true; + } + else if (filter_type == ExemplarFilterType::kTraceBased) + { + auto active_span = context.GetValue(opentelemetry::trace::kSpanKey); + if (nostd::holds_alternative>(active_span)) + { + return nostd::get>(active_span)->GetContext().IsSampled(); + } + } + return false; +} + public: SyncMetricStorage(InstrumentDescriptor instrument_descriptor, const AggregationType aggregation_type, @@ -69,8 +85,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage return; } #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - // TODO: fixme - if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + if (EnableExamplarFilter(exemplar_filter_type_, context)) { exemplar_reservoir_->OfferMeasurement(value, {}, context, std::chrono::system_clock::now()); } @@ -90,8 +105,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage return; } #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - // TODO: fixme - if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + if (EnableExamplarFilter(exemplar_filter_type_, context)) { exemplar_reservoir_->OfferMeasurement(value, attributes, context, std::chrono::system_clock::now()); } @@ -123,7 +137,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage return; } #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + if (EnableExamplarFilter(exemplar_filter_type_, context)) { exemplar_reservoir_->OfferMeasurement(value, {}, context, std::chrono::system_clock::now()); } @@ -139,7 +153,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage OPENTELEMETRY_MAYBE_UNUSED) noexcept override { #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + if (EnableExamplarFilter(exemplar_filter_type_, context)) { exemplar_reservoir_->OfferMeasurement(value, attributes, context, std::chrono::system_clock::now()); @@ -150,7 +164,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage return; } #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn || exemplar_filter_type_ == ExemplarFilterType::kTraceBased) + if (EnableExamplarFilter(exemplar_filter_type_, context)) { exemplar_reservoir_->OfferMeasurement(value, attributes, context, std::chrono::system_clock::now()); From 6254bb24ea62da90dea5f736c402b77179b86941 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 15:00:36 -0700 Subject: [PATCH 08/61] Fix a header file path --- .../sdk/metrics/state/sync_metric_storage.h | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index f3992d410d..9dfe44d3c4 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -36,19 +36,10 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage static inline bool EnableExamplarFilter(ExemplarFilterType filter_type, const opentelemetry::context::Context &context) { - if (filter_type == ExemplarFilterType::kAlwaysOn) - { - return true; - } - else if (filter_type == ExemplarFilterType::kTraceBased) - { - auto active_span = context.GetValue(opentelemetry::trace::kSpanKey); - if (nostd::holds_alternative>(active_span)) - { - return nostd::get>(active_span)->GetContext().IsSampled(); - } - } - return false; + return filter_type == ExemplarFilterType::kAlwaysOn || + filter_type == ExemplarFilterType::kTraceBased && + opentelemetry::trace::GetSpan(context)->GetContext().IsValid() && + opentelemetry::trace::GetSpan(context)->GetContext().IsSampled(); } public: From 3816caa0c7b3b5d239810d9a39306780c4b2433a Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 16:03:27 -0700 Subject: [PATCH 09/61] Move all exemplar code into preview macro --- ...gned_histogram_bucket_exemplar_reservoir.h | 4 +++ .../sdk/metrics/exemplar/filter_type.h | 4 +++ .../exemplar/filtered_exemplar_reservoir.h | 4 +++ .../exemplar/fixed_size_exemplar_reservoir.h | 4 +++ .../metrics/exemplar/no_exemplar_reservoir.h | 4 +++ .../sdk/metrics/exemplar/reservoir.h | 4 +++ .../sdk/metrics/exemplar/reservoir_cell.h | 4 +++ .../exemplar/reservoir_cell_selector.h | 4 +++ .../simple_fixed_size_exemplar_reservoir.h | 4 +++ sdk/include/opentelemetry/sdk/metrics/meter.h | 5 +++ .../opentelemetry/sdk/metrics/meter_context.h | 8 +++++ .../sdk/metrics/meter_provider.h | 8 +++++ .../sdk/metrics/state/async_metric_storage.h | 11 +++++-- .../sdk/metrics/state/sync_metric_storage.h | 13 ++++++-- sdk/src/metrics/exemplar/reservoir.cc | 11 +++---- sdk/src/metrics/meter.cc | 32 +++++++++++++++---- sdk/test/metrics/async_metric_storage_test.cc | 13 +++++++- sdk/test/metrics/cardinality_limit_test.cc | 7 +++- .../histogram_exemplar_reservoir_test.cc | 4 +++ .../sync_metric_storage_counter_test.cc | 16 ++++++++-- .../sync_metric_storage_histogram_test.cc | 16 ++++++++-- ...ync_metric_storage_up_down_counter_test.cc | 15 +++++++-- 22 files changed, 166 insertions(+), 29 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index 0451390c44..504d45feab 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -3,6 +3,8 @@ #pragma once +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include @@ -99,3 +101,5 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h index 641260b72e..5dfa0f2e21 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h @@ -3,6 +3,8 @@ #pragma once +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include "opentelemetry/sdk/metrics/state/filtered_ordered_attribute_map.h" @@ -40,3 +42,5 @@ enum class ExemplarFilterType : uint8_t } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h index 41e56227b8..71982604eb 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h @@ -3,6 +3,8 @@ #pragma once +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include @@ -78,3 +80,5 @@ class FilteredExemplarReservoir final : public ExemplarReservoir } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h index 5021aa610e..0fd0837b38 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h @@ -3,6 +3,8 @@ #pragma once +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include @@ -100,3 +102,5 @@ class FixedSizeExemplarReservoir : public ExemplarReservoir } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h index 086dee6a59..931fab9959 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h @@ -3,6 +3,8 @@ #pragma once +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include @@ -61,3 +63,5 @@ class NoExemplarReservoir final : public ExemplarReservoir } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h index 02334f5c7a..4bd9a120de 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h @@ -3,6 +3,8 @@ #pragma once +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include @@ -84,3 +86,5 @@ class ExemplarReservoir } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h index 9581ae7772..186e557154 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h @@ -3,6 +3,8 @@ #pragma once +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include @@ -157,3 +159,5 @@ typedef std::shared_ptr (ReservoirCell::*MapAndResetCellType)( } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h index a9ce65a298..dc920374e5 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h @@ -3,6 +3,8 @@ #pragma once +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include @@ -45,3 +47,5 @@ class ReservoirCellSelector } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h index 67976f392f..3ac757fb20 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h @@ -3,6 +3,8 @@ #pragma once +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include @@ -93,3 +95,5 @@ class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 49a09e6409..5d51b92f26 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -153,6 +153,8 @@ class Meter final : public opentelemetry::metrics::Meter instrument_validator.ValidateDescription(description); } +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + static MapAndResetCellType GetMapAndResetCellMethod(const InstrumentDescriptor &instrument_descriptor) { if (instrument_descriptor.value_type_ == InstrumentValueType::kLong) @@ -184,6 +186,9 @@ class Meter final : public opentelemetry::metrics::Meter SimpleFixedSizeExemplarReservoir::GetSimpleFixedSizeCellSelector(), GetMapAndResetCellMethod(instrument_descriptor))); } + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW + }; } // namespace metrics } // namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index f4d6ff7d49..92b4d84c31 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -12,7 +12,11 @@ #include "opentelemetry/common/timestamp.h" #include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/nostd/span.h" + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +#endif + #include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" @@ -108,10 +112,14 @@ class MeterContext : public std::enable_shared_from_this std::unique_ptr meter_selector, std::unique_ptr view) noexcept; +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + void SetExemplarFilter(ExemplarFilterType exemplar_filter_type) noexcept; ExemplarFilterType GetExemplarFilter() const noexcept; +#endif + /** * NOTE - INTERNAL method, can change in future. * Adds a meter to the list of configured meters in thread safe manner. diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h index aad37feb6c..4c85b46d1d 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h @@ -10,7 +10,11 @@ #include "opentelemetry/metrics/meter_provider.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +#endif + #include "opentelemetry/sdk/metrics/view/view_registry.h" #include "opentelemetry/sdk/resource/resource.h" #include "opentelemetry/version.h" @@ -101,8 +105,12 @@ class OPENTELEMETRY_EXPORT MeterProvider final : public opentelemetry::metrics:: std::unique_ptr meter_selector, std::unique_ptr view) noexcept; +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + void SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type) noexcept; +#endif + /** * Shutdown the meter provider. */ diff --git a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h index c241ffde9d..147bcff179 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h @@ -10,8 +10,12 @@ #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#endif + #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/observer_result.h" #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" @@ -31,9 +35,10 @@ class AsyncMetricStorage : public MetricStorage, public AsyncWritableMetricStora public: AsyncMetricStorage(InstrumentDescriptor instrument_descriptor, const AggregationType aggregation_type, +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType exempler_filter_type, - nostd::shared_ptr &&exemplar_reservoir - OPENTELEMETRY_MAYBE_UNUSED, + nostd::shared_ptr &&exemplar_reservoir, +#endif const AggregationConfig *aggregation_config) : instrument_descriptor_(instrument_descriptor), aggregation_type_{aggregation_type}, @@ -145,4 +150,4 @@ class AsyncMetricStorage : public MetricStorage, public AsyncWritableMetricStora } // namespace metrics } // namespace sdk -OPENTELEMETRY_END_NAMESPACE +OPENTELEMETRY_END_NAMESPACE \ No newline at end of file diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index 9dfe44d3c4..81b3bc3f8a 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -17,8 +17,12 @@ #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#endif + #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" #include "opentelemetry/sdk/metrics/state/metric_collector.h" #include "opentelemetry/sdk/metrics/state/metric_storage.h" @@ -34,6 +38,8 @@ namespace metrics class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage { +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + static inline bool EnableExamplarFilter(ExemplarFilterType filter_type, const opentelemetry::context::Context &context) { return filter_type == ExemplarFilterType::kAlwaysOn || @@ -42,13 +48,16 @@ static inline bool EnableExamplarFilter(ExemplarFilterType filter_type, const op opentelemetry::trace::GetSpan(context)->GetContext().IsSampled(); } +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW + public: SyncMetricStorage(InstrumentDescriptor instrument_descriptor, const AggregationType aggregation_type, const AttributesProcessor *attributes_processor, +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType exempler_filter_type, - nostd::shared_ptr &&exemplar_reservoir - OPENTELEMETRY_MAYBE_UNUSED, + nostd::shared_ptr &&exemplar_reservoir, +#endif const AggregationConfig *aggregation_config, size_t attributes_limit = kAggregationCardinalityLimit) : instrument_descriptor_(instrument_descriptor), diff --git a/sdk/src/metrics/exemplar/reservoir.cc b/sdk/src/metrics/exemplar/reservoir.cc index 53bcc185dc..ec3969e028 100644 --- a/sdk/src/metrics/exemplar/reservoir.cc +++ b/sdk/src/metrics/exemplar/reservoir.cc @@ -3,6 +3,8 @@ #include +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" @@ -15,13 +17,6 @@ namespace sdk namespace metrics { -// nostd::shared_ptr ExemplarReservoir::GetFilteredExemplarReservoir( -// ExemplarFilterType filter_type, -// std::shared_ptr reservoir) -// { -// return nostd::shared_ptr{new SimpleFixedSizeExemplarReservoir{filter_type, reservoir}}; -// } - nostd::shared_ptr ExemplarReservoir::GetSimpleFixedSizeExemplarReservoir( size_t size, std::shared_ptr reservoir_cell_selector, @@ -48,3 +43,5 @@ nostd::shared_ptr ExemplarReservoir::GetNoExemplarReservoir() } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/src/metrics/meter.cc b/sdk/src/metrics/meter.cc index 21d0d0bae9..1c71102f32 100644 --- a/sdk/src/metrics/meter.cc +++ b/sdk/src/metrics/meter.cc @@ -1,12 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/metrics/meter.h" #include + +#include "opentelemetry/sdk/metrics/meter.h" #include "opentelemetry/metrics/noop.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/sdk/metrics/async_instruments.h" -#include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" #include "opentelemetry/sdk/metrics/state/observable_registry.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" @@ -309,12 +309,20 @@ std::unique_ptr Meter::RegisterSyncMetricStorage( << "The metric context is invalid"); return nullptr; } + auto view_registry = ctx->GetViewRegistry(); - auto exemplar_filter_type = ctx->GetExemplarFilter(); std::unique_ptr storages(new SyncMultiMetricStorage()); +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + auto exemplar_filter_type = ctx->GetExemplarFilter(); +#endif + auto success = view_registry->FindViews( - instrument_descriptor, *scope_, [this, &instrument_descriptor, &storages, exemplar_filter_type](const View &view) { + instrument_descriptor, *scope_, [this, &instrument_descriptor, &storages +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + , exemplar_filter_type +#endif + ](const View &view) { auto view_instr_desc = instrument_descriptor; if (!view.GetName().empty()) { @@ -328,8 +336,10 @@ std::unique_ptr Meter::RegisterSyncMetricStorage( auto storage = std::shared_ptr(new SyncMetricStorage( view_instr_desc, view.GetAggregationType(), &view.GetAttributesProcessor(), +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW exemplar_filter_type, GetExemplarReservoir(view.GetAggregationType(), view.GetAggregationConfig(), instrument_descriptor), +#endif view.GetAggregationConfig())); storage_registry_[instrument_descriptor.name_] = storage; multi_storage->AddStorage(storage); @@ -358,11 +368,19 @@ std::unique_ptr Meter::RegisterAsyncMetricStorage( return nullptr; } auto view_registry = ctx->GetViewRegistry(); - auto exemplar_filter_type = ctx->GetExemplarFilter(); std::unique_ptr storages(new AsyncMultiMetricStorage()); + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + auto exemplar_filter_type = ctx->GetExemplarFilter(); +#endif + auto success = view_registry->FindViews( instrument_descriptor, *GetInstrumentationScope(), - [this, &instrument_descriptor, &storages, exemplar_filter_type](const View &view) { + [this, &instrument_descriptor, &storages +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + , exemplar_filter_type +#endif + ](const View &view) { auto view_instr_desc = instrument_descriptor; if (!view.GetName().empty()) { @@ -374,9 +392,11 @@ std::unique_ptr Meter::RegisterAsyncMetricStorage( } auto storage = std::shared_ptr(new AsyncMetricStorage( view_instr_desc, view.GetAggregationType(), +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW exemplar_filter_type, GetExemplarReservoir(view.GetAggregationType(), view.GetAggregationConfig(), instrument_descriptor), +#endif view.GetAggregationConfig())); storage_registry_[instrument_descriptor.name_] = storage; static_cast(storages.get())->AddStorage(storage); diff --git a/sdk/test/metrics/async_metric_storage_test.cc b/sdk/test/metrics/async_metric_storage_test.cc index 858f64524a..4374af9415 100644 --- a/sdk/test/metrics/async_metric_storage_test.cc +++ b/sdk/test/metrics/async_metric_storage_test.cc @@ -5,8 +5,12 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/sdk/metrics/async_instruments.h" + +#ifdef ENABLE_METRICS_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#endif + #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/meter_context.h" #include "opentelemetry/sdk/metrics/metric_reader.h" @@ -57,8 +61,11 @@ TEST_P(WritableMetricStorageTestFixture, TestAggregation) opentelemetry::sdk::metrics::AsyncMetricStorage storage( instr_desc, AggregationType::kSum, +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), nullptr); + ExemplarReservoir::GetNoExemplarReservoir(), +#endif + nullptr); int64_t get_count1 = 20; int64_t put_count1 = 10; std::unordered_map measurements1 = { @@ -150,8 +157,10 @@ TEST_P(WritableMetricStorageTestUpDownFixture, TestAggregation) opentelemetry::sdk::metrics::AsyncMetricStorage storage( instr_desc, AggregationType::kDefault, +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), +#endif nullptr); int64_t get_count1 = 20; int64_t put_count1 = 10; @@ -243,8 +252,10 @@ TEST_P(WritableMetricStorageTestObservableGaugeFixture, TestAggregation) opentelemetry::sdk::metrics::AsyncMetricStorage storage( instr_desc, AggregationType::kLastValue, +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), +#endif nullptr); int64_t freq_cpu0 = 3; int64_t freq_cpu1 = 5; diff --git a/sdk/test/metrics/cardinality_limit_test.cc b/sdk/test/metrics/cardinality_limit_test.cc index 932fc8807f..3633a8d40e 100644 --- a/sdk/test/metrics/cardinality_limit_test.cc +++ b/sdk/test/metrics/cardinality_limit_test.cc @@ -4,7 +4,9 @@ #include "common.h" #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/sdk/metrics/aggregation/sum_aggregation.h" +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +#endif #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" @@ -68,8 +70,11 @@ TEST_P(WritableMetricStorageCardinalityLimitTestFixture, LongCounterSumAggregati std::unique_ptr default_attributes_processor{ new DefaultAttributesProcessor{}}; SyncMetricStorage storage(instr_desc, AggregationType::kSum, default_attributes_processor.get(), +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), nullptr, attributes_limit); + ExemplarReservoir::GetNoExemplarReservoir(), +#endif + nullptr, attributes_limit); long record_value = 100; // add 9 unique metric points, and 6 more above limit. diff --git a/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc index c0ce2188a1..884768c4eb 100644 --- a/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" @@ -33,3 +35,5 @@ TEST_F(HistogramExemplarReservoirTestPeer, OfferMeasurement) } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file diff --git a/sdk/test/metrics/sync_metric_storage_counter_test.cc b/sdk/test/metrics/sync_metric_storage_counter_test.cc index c01340a2ad..cbceb376ce 100644 --- a/sdk/test/metrics/sync_metric_storage_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_counter_test.cc @@ -6,8 +6,12 @@ #include #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/nostd/shared_ptr.h" + +#if ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" +#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#endif + #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" @@ -38,8 +42,11 @@ TEST_P(WritableMetricStorageTestFixture, LongCounterSumAggregation) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), nullptr); + ExemplarReservoir::GetNoExemplarReservoir(), +#endif + nullptr); storage.RecordLong(10, KeyValueIterableView>(attributes_get), opentelemetry::context::Context{}); @@ -176,8 +183,11 @@ TEST_P(WritableMetricStorageTestFixture, DoubleCounterSumAggregation) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), nullptr); + ExemplarReservoir::GetNoExemplarReservoir(), +#endif + nullptr); storage.RecordDouble(10.0, KeyValueIterableView>(attributes_get), diff --git a/sdk/test/metrics/sync_metric_storage_histogram_test.cc b/sdk/test/metrics/sync_metric_storage_histogram_test.cc index b44262be9d..e859b73513 100644 --- a/sdk/test/metrics/sync_metric_storage_histogram_test.cc +++ b/sdk/test/metrics/sync_metric_storage_histogram_test.cc @@ -5,8 +5,12 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/nostd/shared_ptr.h" + +#ifdef ENABLE_METRICS_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" +#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +#endif + #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" @@ -39,8 +43,11 @@ TEST_P(WritableMetricStorageHistogramTestFixture, LongHistogram) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kHistogram, default_attributes_processor.get(), +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, - NoExemplarReservoir::GetNoExemplarReservoir(), nullptr); + ExemplarReservoir::GetNoExemplarReservoir(), +#endif + nullptr); storage.RecordLong(10, KeyValueIterableView>(attributes_get), opentelemetry::context::Context{}); @@ -178,8 +185,11 @@ TEST_P(WritableMetricStorageHistogramTestFixture, DoubleHistogram) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kHistogram, default_attributes_processor.get(), +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, - NoExemplarReservoir::GetNoExemplarReservoir(), nullptr); + ExemplarReservoir::GetNoExemplarReservoir(), +#endif + nullptr); storage.RecordDouble(10.0, KeyValueIterableView>(attributes_get), diff --git a/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc b/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc index d2281831e1..b04288bcbc 100644 --- a/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc @@ -5,8 +5,11 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/nostd/shared_ptr.h" + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" +#endif + #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" #include "opentelemetry/sdk/metrics/view/attributes_processor.h" @@ -38,8 +41,11 @@ TEST_P(WritableMetricStorageTestFixture, LongUpDownCounterSumAggregation) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), nullptr); + ExemplarReservoir::GetNoExemplarReservoir(), +#endif + nullptr); int64_t val1 = 10, val2 = 30, val3 = -5, val4 = -10; storage.RecordLong(val1, KeyValueIterableView>(attributes_get), @@ -186,8 +192,11 @@ TEST_P(WritableMetricStorageTestFixture, DoubleUpDownCounterSumAggregation) new DefaultAttributesProcessor{}}; opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), nullptr); + ExemplarReservoir::GetNoExemplarReservoir(), +#endif + nullptr); storage.RecordDouble(10.0, KeyValueIterableView>(attributes_get), From 6e124ce93e5b3d545a70ecc3e8e44cf14ba0c150 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 16:08:33 -0700 Subject: [PATCH 10/61] Add one more preview macro --- sdk/include/opentelemetry/sdk/metrics/meter.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 5d51b92f26..0a1216089a 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -18,9 +18,13 @@ #include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" + +#if ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" +#endif + #include "opentelemetry/sdk/metrics/instrument_metadata_validator.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/meter_context.h" From d76710a5a7cb26e901568065c9a658ab6ee97941 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 16:11:17 -0700 Subject: [PATCH 11/61] One more macro guard --- sdk/include/opentelemetry/sdk/metrics/meter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 0a1216089a..500090c798 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -17,9 +17,9 @@ #include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" -#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" #if ENABLE_METRICS_EXEMPLAR_PREVIEW +#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" #include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" From 1bd55500007094b5e6aa9d4ec42c620509c42030 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 16:21:03 -0700 Subject: [PATCH 12/61] Fix format --- ...gned_histogram_bucket_exemplar_reservoir.h | 31 ++++++++++-------- .../sdk/metrics/exemplar/filter_type.h | 6 ++-- .../exemplar/filtered_exemplar_reservoir.h | 10 +++--- .../exemplar/fixed_size_exemplar_reservoir.h | 18 +++++------ .../metrics/exemplar/no_exemplar_reservoir.h | 10 +++--- .../sdk/metrics/exemplar/reservoir.h | 16 +++++----- .../sdk/metrics/exemplar/reservoir_cell.h | 18 +++++------ .../exemplar/reservoir_cell_selector.h | 10 +++--- .../simple_fixed_size_exemplar_reservoir.h | 31 +++++++++--------- sdk/include/opentelemetry/sdk/metrics/meter.h | 32 +++++++++++-------- .../opentelemetry/sdk/metrics/meter_context.h | 2 +- .../sdk/metrics/meter_provider.h | 2 +- .../sdk/metrics/state/async_metric_storage.h | 6 ++-- .../sdk/metrics/state/attributes_hashmap.h | 2 +- .../sdk/metrics/state/sync_metric_storage.h | 26 ++++++++------- sdk/src/metrics/exemplar/reservoir.cc | 15 +++++---- sdk/src/metrics/meter.cc | 22 +++++++------ sdk/src/metrics/meter_provider.cc | 6 ++-- sdk/test/metrics/async_metric_storage_test.cc | 15 ++++----- sdk/test/metrics/cardinality_limit_test.cc | 2 +- .../histogram_exemplar_reservoir_test.cc | 6 ++-- .../sync_metric_storage_counter_test.cc | 14 ++++---- .../sync_metric_storage_histogram_test.cc | 14 ++++---- ...ync_metric_storage_up_down_counter_test.cc | 8 ++--- 24 files changed, 163 insertions(+), 159 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index 504d45feab..2768c4ed60 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -5,16 +5,16 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include -#include +# include +# include -#include "opentelemetry/sdk/common/global_log_handler.h" -#include "opentelemetry/sdk/metrics/data/exemplar_data.h" -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" -#include "opentelemetry/version.h" +# include "opentelemetry/sdk/common/global_log_handler.h" +# include "opentelemetry/sdk/metrics/data/exemplar_data.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace common @@ -42,9 +42,10 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi return std::shared_ptr{new HistogramCellSelector(boundaries)}; } - AlignedHistogramBucketExemplarReservoir(size_t size, - std::shared_ptr reservoir_cell_selector, - MapAndResetCellType map_and_reset_cell) + AlignedHistogramBucketExemplarReservoir( + size_t size, + std::shared_ptr reservoir_cell_selector, + MapAndResetCellType map_and_reset_cell) : FixedSizeExemplarReservoir(size + 1, reservoir_cell_selector, map_and_reset_cell) {} @@ -54,7 +55,8 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi const opentelemetry::context::Context &context, const opentelemetry::common::SystemTimestamp & /* timestamp */) noexcept override { - OTEL_INTERNAL_LOG_ERROR("AlignedHistogramBucketExemplarReservoir shouldn't be used with int64_t values"); + OTEL_INTERNAL_LOG_ERROR( + "AlignedHistogramBucketExemplarReservoir shouldn't be used with int64_t values"); } class HistogramCellSelector : public ReservoirCellSelector @@ -67,7 +69,8 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi const MetricAttributes &attributes, const opentelemetry::context::Context &context) override { - OTEL_INTERNAL_LOG_ERROR("AlignedHistogramBucketExemplarReservoir shouldn't be used with int64_t values"); + OTEL_INTERNAL_LOG_ERROR( + "AlignedHistogramBucketExemplarReservoir shouldn't be used with int64_t values"); return -1; } diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h index 5dfa0f2e21..3d3d322fdf 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h @@ -5,10 +5,10 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include +# include -#include "opentelemetry/sdk/metrics/state/filtered_ordered_attribute_map.h" -#include "opentelemetry/version.h" +# include "opentelemetry/sdk/metrics/state/filtered_ordered_attribute_map.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace context diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h index 71982604eb..8edd1d4d69 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h @@ -5,12 +5,12 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include -#include +# include +# include -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" -#include "opentelemetry/version.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace common diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h index 0fd0837b38..09ca5e9bbc 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h @@ -5,16 +5,16 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include -#include +# include +# include -#include "opentelemetry/context/context.h" -#include "opentelemetry/nostd/function_ref.h" -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/sdk/common/attribute_utils.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" +# include "opentelemetry/context/context.h" +# include "opentelemetry/nostd/function_ref.h" +# include "opentelemetry/nostd/shared_ptr.h" +# include "opentelemetry/sdk/common/attribute_utils.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h index 931fab9959..439697c197 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h @@ -5,12 +5,12 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include -#include +# include +# include -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" -#include "opentelemetry/version.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace common diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h index 4bd9a120de..12fd7c30c3 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h @@ -5,12 +5,12 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include -#include +# include +# include -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" -#include "opentelemetry/version.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace common @@ -71,9 +71,9 @@ class ExemplarReservoir std::shared_ptr reservoir); static nostd::shared_ptr GetSimpleFixedSizeExemplarReservoir( - size_t size, - std::shared_ptr reservoir_cell_selector, - MapAndResetCellType map_and_reset_cell); + size_t size, + std::shared_ptr reservoir_cell_selector, + MapAndResetCellType map_and_reset_cell); static nostd::shared_ptr GetAlignedHistogramBucketExemplarReservoir( size_t size, diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h index 186e557154..7aa2bdf298 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h @@ -5,15 +5,15 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include -#include - -#include "opentelemetry/common/timestamp.h" -#include "opentelemetry/nostd/variant.h" -#include "opentelemetry/sdk/metrics/data/exemplar_data.h" -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/trace/context.h" -#include "opentelemetry/version.h" +# include +# include + +# include "opentelemetry/common/timestamp.h" +# include "opentelemetry/nostd/variant.h" +# include "opentelemetry/sdk/metrics/data/exemplar_data.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/trace/context.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace context diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h index dc920374e5..a75a26aec7 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h @@ -5,12 +5,12 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include -#include +# include +# include -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" -#include "opentelemetry/version.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace context diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h index 3ac757fb20..88f8233244 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h @@ -5,15 +5,15 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include -#include +# include +# include -#include "opentelemetry/sdk/metrics/data/exemplar_data.h" -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" -#include "opentelemetry/version.h" +# include "opentelemetry/sdk/metrics/data/exemplar_data.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" +# include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace common @@ -34,13 +34,12 @@ namespace metrics class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir { public: - static const size_t kDefaultSimpleReservoirSize = 1; - static std::shared_ptr GetSimpleFixedSizeCellSelector(size_t size = kDefaultSimpleReservoirSize) + static std::shared_ptr GetSimpleFixedSizeCellSelector( + size_t size = kDefaultSimpleReservoirSize) { - return std::shared_ptr{ - new SimpleFixedSizeCellSelector{size}}; + return std::shared_ptr{new SimpleFixedSizeCellSelector{size}}; } SimpleFixedSizeExemplarReservoir(size_t size, @@ -68,7 +67,7 @@ class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir const opentelemetry::context::Context & /* context */) override { size_t measurement_num = measurements_seen_++; - size_t index = static_cast(-1); + size_t index = static_cast(-1); if (measurement_num < size_) { @@ -84,13 +83,13 @@ class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir } void reset() override {} - + private: size_t measurements_seen_ = 0; size_t size_; -}; // class SimpleFixedSizeCellSelector + }; // class SimpleFixedSizeCellSelector -}; // class SimpleFixedSizeExemplarReservoir +}; // class SimpleFixedSizeExemplarReservoir } // namespace metrics } // namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 500090c798..84040acf7f 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -19,10 +19,10 @@ #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" #if ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" -#include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" +# include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" +# include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" #endif #include "opentelemetry/sdk/metrics/instrument_metadata_validator.h" @@ -159,7 +159,8 @@ class Meter final : public opentelemetry::metrics::Meter #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - static MapAndResetCellType GetMapAndResetCellMethod(const InstrumentDescriptor &instrument_descriptor) + static MapAndResetCellType GetMapAndResetCellMethod( + const InstrumentDescriptor &instrument_descriptor) { if (instrument_descriptor.value_type_ == InstrumentValueType::kLong) { @@ -169,30 +170,35 @@ class Meter final : public opentelemetry::metrics::Meter return &ReservoirCell::GetAndResetDouble; } - static nostd::shared_ptr GetExemplarReservoir(const AggregationType agg_type, const AggregationConfig *agg_config, const InstrumentDescriptor &instrument_descriptor) + static nostd::shared_ptr GetExemplarReservoir( + const AggregationType agg_type, + const AggregationConfig *agg_config, + const InstrumentDescriptor &instrument_descriptor) { if (agg_type == AggregationType::kHistogram) { - const auto *histogram_agg_config = static_cast(agg_config); - // Explicit bucket histogram aggregation with more than 1 bucket will use AlignedHistogramBucketExemplarReservoir. + const auto *histogram_agg_config = + static_cast(agg_config); + // Explicit bucket histogram aggregation with more than 1 bucket will use + // AlignedHistogramBucketExemplarReservoir. // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#exemplar-defaults if (histogram_agg_config != nullptr && histogram_agg_config->boundaries_.size() > 1) { return nostd::shared_ptr(new AlignedHistogramBucketExemplarReservoir( histogram_agg_config->boundaries_.size(), - AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(histogram_agg_config->boundaries_), + AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector( + histogram_agg_config->boundaries_), GetMapAndResetCellMethod(instrument_descriptor))); } } return nostd::shared_ptr(new SimpleFixedSizeExemplarReservoir( - SimpleFixedSizeExemplarReservoir::kDefaultSimpleReservoirSize, - SimpleFixedSizeExemplarReservoir::GetSimpleFixedSizeCellSelector(), - GetMapAndResetCellMethod(instrument_descriptor))); + SimpleFixedSizeExemplarReservoir::kDefaultSimpleReservoirSize, + SimpleFixedSizeExemplarReservoir::GetSimpleFixedSizeCellSelector(), + GetMapAndResetCellMethod(instrument_descriptor))); } #endif // ENABLE_METRICS_EXEMPLAR_PREVIEW - }; } // namespace metrics } // namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index 92b4d84c31..dae0a214c0 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -14,7 +14,7 @@ #include "opentelemetry/nostd/span.h" #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #endif #include "opentelemetry/sdk/metrics/view/view_registry.h" diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h index 4c85b46d1d..8aa8eae245 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h @@ -12,7 +12,7 @@ #include "opentelemetry/nostd/string_view.h" #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #endif #include "opentelemetry/sdk/metrics/view/view_registry.h" diff --git a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h index 147bcff179..9b5d59507c 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h @@ -12,8 +12,8 @@ #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #endif #include "opentelemetry/sdk/metrics/instruments.h" @@ -65,7 +65,7 @@ class AsyncMetricStorage : public MetricStorage, public AsyncWritableMetricStora if (exemplar_filter_type_ == ExemplarFilterType::kAlwaysOn) { exemplar_reservoir_->OfferMeasurement(measurement.second, {}, {}, - std::chrono::system_clock::now()); + std::chrono::system_clock::now()); } #endif diff --git a/sdk/include/opentelemetry/sdk/metrics/state/attributes_hashmap.h b/sdk/include/opentelemetry/sdk/metrics/state/attributes_hashmap.h index 43c67cb804..a509080318 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/attributes_hashmap.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/attributes_hashmap.h @@ -28,7 +28,7 @@ const std::string kAttributesLimitOverflowKey = "otel.metrics.overflow"; const bool kAttributesLimitOverflowValue = true; const size_t kOverflowAttributesHash = opentelemetry::sdk::common::GetHashForAttributeMap( {{kAttributesLimitOverflowKey, - kAttributesLimitOverflowValue}}); // precalculated for optimization + kAttributesLimitOverflowValue}}); // precalculated for optimization class AttributeHashGenerator { diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index 81b3bc3f8a..dbce59fe3f 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -19,8 +19,8 @@ #include "opentelemetry/sdk/metrics/aggregation/default_aggregation.h" #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #endif #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" @@ -38,15 +38,16 @@ namespace metrics class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage { -#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -static inline bool EnableExamplarFilter(ExemplarFilterType filter_type, const opentelemetry::context::Context &context) -{ - return filter_type == ExemplarFilterType::kAlwaysOn || - filter_type == ExemplarFilterType::kTraceBased && - opentelemetry::trace::GetSpan(context)->GetContext().IsValid() && - opentelemetry::trace::GetSpan(context)->GetContext().IsSampled(); -} + static inline bool EnableExamplarFilter(ExemplarFilterType filter_type, + const opentelemetry::context::Context &context) + { + return filter_type == ExemplarFilterType::kAlwaysOn || + filter_type == ExemplarFilterType::kTraceBased && + opentelemetry::trace::GetSpan(context)->GetContext().IsValid() && + opentelemetry::trace::GetSpan(context)->GetContext().IsSampled(); + } #endif // ENABLE_METRICS_EXEMPLAR_PREVIEW @@ -54,7 +55,7 @@ static inline bool EnableExamplarFilter(ExemplarFilterType filter_type, const op SyncMetricStorage(InstrumentDescriptor instrument_descriptor, const AggregationType aggregation_type, const AttributesProcessor *attributes_processor, -#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW ExemplarFilterType exempler_filter_type, nostd::shared_ptr &&exemplar_reservoir, #endif @@ -107,7 +108,8 @@ static inline bool EnableExamplarFilter(ExemplarFilterType filter_type, const op #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW if (EnableExamplarFilter(exemplar_filter_type_, context)) { - exemplar_reservoir_->OfferMeasurement(value, attributes, context, std::chrono::system_clock::now()); + exemplar_reservoir_->OfferMeasurement(value, attributes, context, + std::chrono::system_clock::now()); } #endif auto hash = opentelemetry::sdk::common::GetHashForAttributeMap( diff --git a/sdk/src/metrics/exemplar/reservoir.cc b/sdk/src/metrics/exemplar/reservoir.cc index ec3969e028..f62c01cc69 100644 --- a/sdk/src/metrics/exemplar/reservoir.cc +++ b/sdk/src/metrics/exemplar/reservoir.cc @@ -5,11 +5,11 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" +# include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" +# include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -31,8 +31,9 @@ nostd::shared_ptr ExemplarReservoir::GetAlignedHistogramBucke std::shared_ptr reservoir_cell_selector, MapAndResetCellType map_and_reset_cell) { - return nostd::shared_ptr{ - new AlignedHistogramBucketExemplarReservoir{size, AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(), map_and_reset_cell}}; + return nostd::shared_ptr{new AlignedHistogramBucketExemplarReservoir{ + size, AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(), + map_and_reset_cell}}; } nostd::shared_ptr ExemplarReservoir::GetNoExemplarReservoir() diff --git a/sdk/src/metrics/meter.cc b/sdk/src/metrics/meter.cc index 1c71102f32..587dd65f63 100644 --- a/sdk/src/metrics/meter.cc +++ b/sdk/src/metrics/meter.cc @@ -3,10 +3,10 @@ #include -#include "opentelemetry/sdk/metrics/meter.h" #include "opentelemetry/metrics/noop.h" #include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/sdk/metrics/async_instruments.h" +#include "opentelemetry/sdk/metrics/meter.h" #include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" #include "opentelemetry/sdk/metrics/state/observable_registry.h" #include "opentelemetry/sdk/metrics/state/sync_metric_storage.h" @@ -318,11 +318,13 @@ std::unique_ptr Meter::RegisterSyncMetricStorage( #endif auto success = view_registry->FindViews( - instrument_descriptor, *scope_, [this, &instrument_descriptor, &storages + instrument_descriptor, *scope_, + [this, &instrument_descriptor, &storages #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - , exemplar_filter_type + , + exemplar_filter_type #endif - ](const View &view) { + ](const View &view) { auto view_instr_desc = instrument_descriptor; if (!view.GetName().empty()) { @@ -338,7 +340,8 @@ std::unique_ptr Meter::RegisterSyncMetricStorage( view_instr_desc, view.GetAggregationType(), &view.GetAttributesProcessor(), #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW exemplar_filter_type, - GetExemplarReservoir(view.GetAggregationType(), view.GetAggregationConfig(), instrument_descriptor), + GetExemplarReservoir(view.GetAggregationType(), view.GetAggregationConfig(), + instrument_descriptor), #endif view.GetAggregationConfig())); storage_registry_[instrument_descriptor.name_] = storage; @@ -369,7 +372,7 @@ std::unique_ptr Meter::RegisterAsyncMetricStorage( } auto view_registry = ctx->GetViewRegistry(); std::unique_ptr storages(new AsyncMultiMetricStorage()); - + #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW auto exemplar_filter_type = ctx->GetExemplarFilter(); #endif @@ -378,9 +381,10 @@ std::unique_ptr Meter::RegisterAsyncMetricStorage( instrument_descriptor, *GetInstrumentationScope(), [this, &instrument_descriptor, &storages #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - , exemplar_filter_type + , + exemplar_filter_type #endif - ](const View &view) { + ](const View &view) { auto view_instr_desc = instrument_descriptor; if (!view.GetName().empty()) { @@ -396,7 +400,7 @@ std::unique_ptr Meter::RegisterAsyncMetricStorage( exemplar_filter_type, GetExemplarReservoir(view.GetAggregationType(), view.GetAggregationConfig(), instrument_descriptor), -#endif +#endif view.GetAggregationConfig())); storage_registry_[instrument_descriptor.name_] = storage; static_cast(storages.get())->AddStorage(storage); diff --git a/sdk/src/metrics/meter_provider.cc b/sdk/src/metrics/meter_provider.cc index 6dd4a6dad2..e075fac9aa 100644 --- a/sdk/src/metrics/meter_provider.cc +++ b/sdk/src/metrics/meter_provider.cc @@ -106,12 +106,10 @@ void MeterProvider::AddView(std::unique_ptr instrument_selec std::unique_ptr meter_selector, std::unique_ptr view) noexcept { - context_->AddView(std::move(instrument_selector), std::move(meter_selector), - std::move(view)); + context_->AddView(std::move(instrument_selector), std::move(meter_selector), std::move(view)); } -void MeterProvider::SetExemplarFilter( - metrics::ExemplarFilterType exemplar_filter_type) noexcept +void MeterProvider::SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type) noexcept { context_->SetExemplarFilter(exemplar_filter_type); } diff --git a/sdk/test/metrics/async_metric_storage_test.cc b/sdk/test/metrics/async_metric_storage_test.cc index 4374af9415..b412d2b8e2 100644 --- a/sdk/test/metrics/async_metric_storage_test.cc +++ b/sdk/test/metrics/async_metric_storage_test.cc @@ -7,8 +7,8 @@ #include "opentelemetry/sdk/metrics/async_instruments.h" #ifdef ENABLE_METRICS_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #endif #include "opentelemetry/sdk/metrics/instruments.h" @@ -62,9 +62,8 @@ TEST_P(WritableMetricStorageTestFixture, TestAggregation) opentelemetry::sdk::metrics::AsyncMetricStorage storage( instr_desc, AggregationType::kSum, #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), -#endif + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), +#endif nullptr); int64_t get_count1 = 20; int64_t put_count1 = 10; @@ -158,8 +157,7 @@ TEST_P(WritableMetricStorageTestUpDownFixture, TestAggregation) opentelemetry::sdk::metrics::AsyncMetricStorage storage( instr_desc, AggregationType::kDefault, #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), #endif nullptr); int64_t get_count1 = 20; @@ -253,8 +251,7 @@ TEST_P(WritableMetricStorageTestObservableGaugeFixture, TestAggregation) opentelemetry::sdk::metrics::AsyncMetricStorage storage( instr_desc, AggregationType::kLastValue, #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), #endif nullptr); int64_t freq_cpu0 = 3; diff --git a/sdk/test/metrics/cardinality_limit_test.cc b/sdk/test/metrics/cardinality_limit_test.cc index 3633a8d40e..8c2edb4b0c 100644 --- a/sdk/test/metrics/cardinality_limit_test.cc +++ b/sdk/test/metrics/cardinality_limit_test.cc @@ -5,7 +5,7 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/sdk/metrics/aggregation/sum_aggregation.h" #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #endif #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" diff --git a/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc index 884768c4eb..41a6204d24 100644 --- a/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc @@ -3,10 +3,10 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include +# include -#include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" -#include +# include +# include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk diff --git a/sdk/test/metrics/sync_metric_storage_counter_test.cc b/sdk/test/metrics/sync_metric_storage_counter_test.cc index cbceb376ce..c3a61f710b 100644 --- a/sdk/test/metrics/sync_metric_storage_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_counter_test.cc @@ -8,8 +8,8 @@ #include "opentelemetry/nostd/shared_ptr.h" #if ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #endif #include "opentelemetry/sdk/metrics/instruments.h" @@ -34,7 +34,7 @@ TEST_P(WritableMetricStorageTestFixture, LongCounterSumAggregation) int64_t expected_total_get_requests = 0; int64_t expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kCounter, - InstrumentValueType::kLong}; + InstrumentValueType::kLong}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; @@ -43,8 +43,7 @@ TEST_P(WritableMetricStorageTestFixture, LongCounterSumAggregation) opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), #endif nullptr); @@ -175,7 +174,7 @@ TEST_P(WritableMetricStorageTestFixture, DoubleCounterSumAggregation) double expected_total_get_requests = 0; double expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kCounter, - InstrumentValueType::kDouble}; + InstrumentValueType::kDouble}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; @@ -184,8 +183,7 @@ TEST_P(WritableMetricStorageTestFixture, DoubleCounterSumAggregation) opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), #endif nullptr); diff --git a/sdk/test/metrics/sync_metric_storage_histogram_test.cc b/sdk/test/metrics/sync_metric_storage_histogram_test.cc index e859b73513..6063cdf89b 100644 --- a/sdk/test/metrics/sync_metric_storage_histogram_test.cc +++ b/sdk/test/metrics/sync_metric_storage_histogram_test.cc @@ -7,8 +7,8 @@ #include "opentelemetry/nostd/shared_ptr.h" #ifdef ENABLE_METRICS_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#include "opentelemetry/sdk/metrics/exemplar/reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #endif #include "opentelemetry/sdk/metrics/instruments.h" @@ -35,7 +35,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, LongHistogram) int64_t expected_total_get_requests = 0; int64_t expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kHistogram, - InstrumentValueType::kLong}; + InstrumentValueType::kLong}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; @@ -44,8 +44,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, LongHistogram) opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kHistogram, default_attributes_processor.get(), #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), #endif nullptr); @@ -177,7 +176,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, DoubleHistogram) double expected_total_get_requests = 0; double expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kHistogram, - InstrumentValueType::kDouble}; + InstrumentValueType::kDouble}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; @@ -186,8 +185,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, DoubleHistogram) opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kHistogram, default_attributes_processor.get(), #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), #endif nullptr); diff --git a/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc b/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc index b04288bcbc..216574a587 100644 --- a/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_up_down_counter_test.cc @@ -7,7 +7,7 @@ #include "opentelemetry/nostd/shared_ptr.h" #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #endif #include "opentelemetry/sdk/metrics/instruments.h" @@ -42,8 +42,7 @@ TEST_P(WritableMetricStorageTestFixture, LongUpDownCounterSumAggregation) opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), #endif nullptr); @@ -193,8 +192,7 @@ TEST_P(WritableMetricStorageTestFixture, DoubleUpDownCounterSumAggregation) opentelemetry::sdk::metrics::SyncMetricStorage storage( instr_desc, AggregationType::kSum, default_attributes_processor.get(), #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - ExemplarFilterType::kAlwaysOff, - ExemplarReservoir::GetNoExemplarReservoir(), + ExemplarFilterType::kAlwaysOff, ExemplarReservoir::GetNoExemplarReservoir(), #endif nullptr); From e651a37c50ab1094a2b3ac17917dec2373d28a3f Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 16:32:44 -0700 Subject: [PATCH 13/61] Remove unused file --- .../exemplar/filtered_exemplar_reservoir.h | 84 ------------------- 1 file changed, 84 deletions(-) delete mode 100644 sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h deleted file mode 100644 index 8edd1d4d69..0000000000 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filtered_exemplar_reservoir.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - -# include -# include - -# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" -# include "opentelemetry/version.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace common -{ -class SystemTimestamp; -} // namespace common - -namespace context -{ -class Context; -} // namespace context - -namespace sdk -{ -namespace metrics -{ -class FilteredExemplarReservoir final : public ExemplarReservoir -{ - -public: - FilteredExemplarReservoir(ExemplarFilterType filter_type, - std::shared_ptr reservoir) - : filter_type_(filter_type), reservoir_(reservoir) - {} - - void OfferMeasurement(int64_t value, - const MetricAttributes &attributes, - const opentelemetry::context::Context &context, - const opentelemetry::common::SystemTimestamp ×tamp) noexcept override - { - if (filter_type_ == ExemplarFilterType::kAlwaysOn || filter_type_ == ExemplarFilterType::kTraceBased && hasSampledTrace(context) - { - reservoir_->OfferMeasurement(value, attributes, context, timestamp); - return; - } - } - - void OfferMeasurement(double value, - const MetricAttributes &attributes, - const opentelemetry::context::Context &context, - const opentelemetry::common::SystemTimestamp ×tamp) noexcept override - { - if (filter_type_ == ExemplarFilterType::kAlwaysOn || filter_type_ == ExemplarFilterType::kTraceBased && hasSampledTrace(context) - { - reservoir_->OfferMeasurement(value, attributes, context, timestamp); - } - } - - std::vector> CollectAndReset( - const MetricAttributes &pointAttributes) noexcept override - { - return reservoir_->CollectAndReset(pointAttributes); - } - -private: - static bool hasSampledTrace(const opentelemetry::context::Context &context) - { - return opentelemetry::trace::GetSpan(context)->GetContext().IsValid() && - opentelemetry::trace::GetSpan(context)->GetContext().IsSampled(); - } - - explicit FilteredExemplarReservoir() = default; - ExemplarFilterType filter_type; - std::shared_ptr reservoir_; -}; - -} // namespace metrics -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE - -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file From 5f132c52a82421031bf0b2ef874850fc208d4829 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 16:42:18 -0700 Subject: [PATCH 14/61] Rename test --- sdk/test/metrics/exemplar/BUILD | 4 ++-- sdk/test/metrics/exemplar/CMakeLists.txt | 2 +- ...cc => aligned_histogram_bucket_exemplar_reservoir_test.cc} | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename sdk/test/metrics/exemplar/{histogram_exemplar_reservoir_test.cc => aligned_histogram_bucket_exemplar_reservoir_test.cc} (85%) diff --git a/sdk/test/metrics/exemplar/BUILD b/sdk/test/metrics/exemplar/BUILD index 06a9fb6f95..2d13dd400d 100644 --- a/sdk/test/metrics/exemplar/BUILD +++ b/sdk/test/metrics/exemplar/BUILD @@ -70,9 +70,9 @@ cc_test( ) cc_test( - name = "histogram_exemplar_reservoir_test", + name = "aligned_histogram_bucket_exemplar_reservoir_test", srcs = [ - "histogram_exemplar_reservoir_test.cc", + "aligned_histogram_bucket_exemplar_reservoir_test.cc", ], tags = [ "metrics", diff --git a/sdk/test/metrics/exemplar/CMakeLists.txt b/sdk/test/metrics/exemplar/CMakeLists.txt index 1854a65207..dc382f72ca 100644 --- a/sdk/test/metrics/exemplar/CMakeLists.txt +++ b/sdk/test/metrics/exemplar/CMakeLists.txt @@ -4,7 +4,7 @@ foreach( testname no_exemplar_reservoir_test - histogram_exemplar_reservoir_test reservoir_cell_test + aligned_histogram_bucket_exemplar_reservoir_test reservoir_cell_test ) add_executable(${testname} "${testname}.cc") target_link_libraries( diff --git a/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc similarity index 85% rename from sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc rename to sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc index 41a6204d24..ffdb2c76f9 100644 --- a/sdk/test/metrics/exemplar/histogram_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc @@ -6,7 +6,7 @@ # include # include -# include "opentelemetry/sdk/metrics/exemplar/histogram_exemplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -22,7 +22,7 @@ TEST_F(HistogramExemplarReservoirTestPeer, OfferMeasurement) { std::vector boundaries{1, 5.0, 10, 15, 20}; auto histogram_exemplar_reservoir = ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( - boundaries.size(), HistogramExemplarReservoir::GetHistogramCellSelector(boundaries), nullptr); + boundaries.size(), AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(boundaries), nullptr); histogram_exemplar_reservoir->OfferMeasurement( 1.0, MetricAttributes{}, opentelemetry::context::Context{}, std::chrono::system_clock::now()); histogram_exemplar_reservoir->OfferMeasurement(static_cast(1), MetricAttributes{}, From a2f6e9e16e64771eae3d118e47da834957507f59 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 16:52:05 -0700 Subject: [PATCH 15/61] More format --- .../opentelemetry/sdk/metrics/state/attributes_hashmap.h | 2 +- sdk/test/metrics/exemplar/CMakeLists.txt | 7 +++---- .../aligned_histogram_bucket_exemplar_reservoir_test.cc | 3 ++- sdk/test/metrics/sync_metric_storage_counter_test.cc | 4 ++-- sdk/test/metrics/sync_metric_storage_histogram_test.cc | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/state/attributes_hashmap.h b/sdk/include/opentelemetry/sdk/metrics/state/attributes_hashmap.h index a509080318..43c67cb804 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/attributes_hashmap.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/attributes_hashmap.h @@ -28,7 +28,7 @@ const std::string kAttributesLimitOverflowKey = "otel.metrics.overflow"; const bool kAttributesLimitOverflowValue = true; const size_t kOverflowAttributesHash = opentelemetry::sdk::common::GetHashForAttributeMap( {{kAttributesLimitOverflowKey, - kAttributesLimitOverflowValue}}); // precalculated for optimization + kAttributesLimitOverflowValue}}); // precalculated for optimization class AttributeHashGenerator { diff --git a/sdk/test/metrics/exemplar/CMakeLists.txt b/sdk/test/metrics/exemplar/CMakeLists.txt index dc382f72ca..36d3d76822 100644 --- a/sdk/test/metrics/exemplar/CMakeLists.txt +++ b/sdk/test/metrics/exemplar/CMakeLists.txt @@ -1,10 +1,9 @@ # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 -foreach( - testname - no_exemplar_reservoir_test - aligned_histogram_bucket_exemplar_reservoir_test reservoir_cell_test +foreach(testname + no_exemplar_reservoir_test + aligned_histogram_bucket_exemplar_reservoir_test reservoir_cell_test ) add_executable(${testname} "${testname}.cc") target_link_libraries( diff --git a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc index ffdb2c76f9..81fbdd2b4c 100644 --- a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc @@ -22,7 +22,8 @@ TEST_F(HistogramExemplarReservoirTestPeer, OfferMeasurement) { std::vector boundaries{1, 5.0, 10, 15, 20}; auto histogram_exemplar_reservoir = ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( - boundaries.size(), AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(boundaries), nullptr); + boundaries.size(), + AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(boundaries), nullptr); histogram_exemplar_reservoir->OfferMeasurement( 1.0, MetricAttributes{}, opentelemetry::context::Context{}, std::chrono::system_clock::now()); histogram_exemplar_reservoir->OfferMeasurement(static_cast(1), MetricAttributes{}, diff --git a/sdk/test/metrics/sync_metric_storage_counter_test.cc b/sdk/test/metrics/sync_metric_storage_counter_test.cc index c3a61f710b..fa597c3f8f 100644 --- a/sdk/test/metrics/sync_metric_storage_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_counter_test.cc @@ -34,7 +34,7 @@ TEST_P(WritableMetricStorageTestFixture, LongCounterSumAggregation) int64_t expected_total_get_requests = 0; int64_t expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kCounter, - InstrumentValueType::kLong}; + InstrumentValueType::kLong}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; @@ -174,7 +174,7 @@ TEST_P(WritableMetricStorageTestFixture, DoubleCounterSumAggregation) double expected_total_get_requests = 0; double expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kCounter, - InstrumentValueType::kDouble}; + InstrumentValueType::kDouble}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; diff --git a/sdk/test/metrics/sync_metric_storage_histogram_test.cc b/sdk/test/metrics/sync_metric_storage_histogram_test.cc index 6063cdf89b..aac2f73fa8 100644 --- a/sdk/test/metrics/sync_metric_storage_histogram_test.cc +++ b/sdk/test/metrics/sync_metric_storage_histogram_test.cc @@ -35,7 +35,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, LongHistogram) int64_t expected_total_get_requests = 0; int64_t expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kHistogram, - InstrumentValueType::kLong}; + InstrumentValueType::kLong}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; @@ -176,7 +176,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, DoubleHistogram) double expected_total_get_requests = 0; double expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kHistogram, - InstrumentValueType::kDouble}; + InstrumentValueType::kDouble}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; From 01a34555ad8e05fe37c513575c7f5d1367525f86 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 16:58:28 -0700 Subject: [PATCH 16/61] Even more formatting --- sdk/test/metrics/exemplar/CMakeLists.txt | 5 ++--- sdk/test/metrics/sync_metric_storage_counter_test.cc | 4 ++-- sdk/test/metrics/sync_metric_storage_histogram_test.cc | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/sdk/test/metrics/exemplar/CMakeLists.txt b/sdk/test/metrics/exemplar/CMakeLists.txt index 36d3d76822..04a715b2f8 100644 --- a/sdk/test/metrics/exemplar/CMakeLists.txt +++ b/sdk/test/metrics/exemplar/CMakeLists.txt @@ -2,9 +2,8 @@ # SPDX-License-Identifier: Apache-2.0 foreach(testname - no_exemplar_reservoir_test - aligned_histogram_bucket_exemplar_reservoir_test reservoir_cell_test - ) + no_exemplar_reservoir_test + aligned_histogram_bucket_exemplar_reservoir_test reservoir_cell_test) add_executable(${testname} "${testname}.cc") target_link_libraries( ${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} diff --git a/sdk/test/metrics/sync_metric_storage_counter_test.cc b/sdk/test/metrics/sync_metric_storage_counter_test.cc index fa597c3f8f..f63a658820 100644 --- a/sdk/test/metrics/sync_metric_storage_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_counter_test.cc @@ -34,7 +34,7 @@ TEST_P(WritableMetricStorageTestFixture, LongCounterSumAggregation) int64_t expected_total_get_requests = 0; int64_t expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kCounter, - InstrumentValueType::kLong}; + InstrumentValueType::kLong}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; @@ -174,7 +174,7 @@ TEST_P(WritableMetricStorageTestFixture, DoubleCounterSumAggregation) double expected_total_get_requests = 0; double expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kCounter, - InstrumentValueType::kDouble}; + InstrumentValueType::kDouble}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; diff --git a/sdk/test/metrics/sync_metric_storage_histogram_test.cc b/sdk/test/metrics/sync_metric_storage_histogram_test.cc index aac2f73fa8..fb678c8e35 100644 --- a/sdk/test/metrics/sync_metric_storage_histogram_test.cc +++ b/sdk/test/metrics/sync_metric_storage_histogram_test.cc @@ -35,7 +35,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, LongHistogram) int64_t expected_total_get_requests = 0; int64_t expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kHistogram, - InstrumentValueType::kLong}; + InstrumentValueType::kLong}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; @@ -176,7 +176,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, DoubleHistogram) double expected_total_get_requests = 0; double expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kHistogram, - InstrumentValueType::kDouble}; + InstrumentValueType::kDouble}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; From f4d8eb750f46b3f1820a008b2bacbb95a84f5e32 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 17:00:42 -0700 Subject: [PATCH 17/61] Fix macro name for test --- sdk/test/metrics/async_metric_storage_test.cc | 2 +- sdk/test/metrics/sync_metric_storage_histogram_test.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test/metrics/async_metric_storage_test.cc b/sdk/test/metrics/async_metric_storage_test.cc index b412d2b8e2..3b72e99d96 100644 --- a/sdk/test/metrics/async_metric_storage_test.cc +++ b/sdk/test/metrics/async_metric_storage_test.cc @@ -6,7 +6,7 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/sdk/metrics/async_instruments.h" -#ifdef ENABLE_METRICS_PREVIEW +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW # include "opentelemetry/sdk/metrics/exemplar/filter_type.h" # include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #endif diff --git a/sdk/test/metrics/sync_metric_storage_histogram_test.cc b/sdk/test/metrics/sync_metric_storage_histogram_test.cc index fb678c8e35..7b78ef6c27 100644 --- a/sdk/test/metrics/sync_metric_storage_histogram_test.cc +++ b/sdk/test/metrics/sync_metric_storage_histogram_test.cc @@ -6,7 +6,7 @@ #include "opentelemetry/common/key_value_iterable_view.h" #include "opentelemetry/nostd/shared_ptr.h" -#ifdef ENABLE_METRICS_PREVIEW +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW # include "opentelemetry/sdk/metrics/exemplar/filter_type.h" # include "opentelemetry/sdk/metrics/exemplar/reservoir.h" #endif From 5e41d602822118f65f4bee5203ab5b22c852aa25 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 17:03:18 -0700 Subject: [PATCH 18/61] More format clean --- sdk/test/metrics/sync_metric_storage_counter_test.cc | 2 +- sdk/test/metrics/sync_metric_storage_histogram_test.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test/metrics/sync_metric_storage_counter_test.cc b/sdk/test/metrics/sync_metric_storage_counter_test.cc index f63a658820..20448a7fb8 100644 --- a/sdk/test/metrics/sync_metric_storage_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_counter_test.cc @@ -34,7 +34,7 @@ TEST_P(WritableMetricStorageTestFixture, LongCounterSumAggregation) int64_t expected_total_get_requests = 0; int64_t expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kCounter, - InstrumentValueType::kLong}; + InstrumentValueType::kLong}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; diff --git a/sdk/test/metrics/sync_metric_storage_histogram_test.cc b/sdk/test/metrics/sync_metric_storage_histogram_test.cc index 7b78ef6c27..5ded7f3b46 100644 --- a/sdk/test/metrics/sync_metric_storage_histogram_test.cc +++ b/sdk/test/metrics/sync_metric_storage_histogram_test.cc @@ -35,7 +35,7 @@ TEST_P(WritableMetricStorageHistogramTestFixture, LongHistogram) int64_t expected_total_get_requests = 0; int64_t expected_total_put_requests = 0; InstrumentDescriptor instr_desc = {"name", "desc", "1unit", InstrumentType::kHistogram, - InstrumentValueType::kLong}; + InstrumentValueType::kLong}; std::map attributes_get = {{"RequestType", "GET"}}; std::map attributes_put = {{"RequestType", "PUT"}}; From 02f2c21841679af95a134a787e739ee0ba0dfabc Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 17:16:55 -0700 Subject: [PATCH 19/61] Comment out unused parameters --- .../exemplar/aligned_histogram_bucket_exemplar_reservoir.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index 2768c4ed60..c3c170f7d8 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -50,9 +50,9 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi {} void OfferMeasurement( - int64_t value, - const MetricAttributes &attributes, - const opentelemetry::context::Context &context, + int64_t /* value */, + const MetricAttributes & /* attributes */, + const opentelemetry::context::Context & /* context */, const opentelemetry::common::SystemTimestamp & /* timestamp */) noexcept override { OTEL_INTERNAL_LOG_ERROR( From 490745362a85e1caac4b6b2617d967c5ddad92c5 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 17:28:04 -0700 Subject: [PATCH 20/61] Comment out more unused parameters --- .../aligned_histogram_bucket_exemplar_reservoir.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index c3c170f7d8..7feeec4aac 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -64,10 +64,10 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi public: HistogramCellSelector(const std::vector &boundaries) : boundaries_(boundaries) {} - int ReservoirCellIndexFor(const std::vector &cells, - int64_t value, - const MetricAttributes &attributes, - const opentelemetry::context::Context &context) override + int ReservoirCellIndexFor(const std::vector & /* cells */, + int64_t /* value */, + const MetricAttributes & /* attributes */, + const opentelemetry::context::Context & /* context */) override { OTEL_INTERNAL_LOG_ERROR( "AlignedHistogramBucketExemplarReservoir shouldn't be used with int64_t values"); From 7240b1ba9db6fc61ddeb3095c39394b5a38391a4 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 19:09:47 -0700 Subject: [PATCH 21/61] Add parenthesis to boolean expression --- .../opentelemetry/sdk/metrics/state/sync_metric_storage.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h index dbce59fe3f..b35958b3e1 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -44,9 +44,9 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage const opentelemetry::context::Context &context) { return filter_type == ExemplarFilterType::kAlwaysOn || - filter_type == ExemplarFilterType::kTraceBased && - opentelemetry::trace::GetSpan(context)->GetContext().IsValid() && - opentelemetry::trace::GetSpan(context)->GetContext().IsSampled(); + (filter_type == ExemplarFilterType::kTraceBased && + opentelemetry::trace::GetSpan(context)->GetContext().IsValid() && + opentelemetry::trace::GetSpan(context)->GetContext().IsSampled()); } #endif // ENABLE_METRICS_EXEMPLAR_PREVIEW From e7c61d6e9eedeb8e2017e43c27082ee9049717a9 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 19:15:33 -0700 Subject: [PATCH 22/61] Fix warning of hidden override --- .../exemplar/aligned_histogram_bucket_exemplar_reservoir.h | 2 ++ .../sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index 7feeec4aac..357bb77e79 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -49,6 +49,8 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi : FixedSizeExemplarReservoir(size + 1, reservoir_cell_selector, map_and_reset_cell) {} + using FixedSizeExemplarReservoir::OfferMeasurement; + void OfferMeasurement( int64_t /* value */, const MetricAttributes & /* attributes */, diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h index 09ca5e9bbc..ab127f59b8 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h @@ -34,6 +34,8 @@ class FixedSizeExemplarReservoir : public ExemplarReservoir map_and_reset_cell_(map_and_reset_cell) {} + using ExemplarReservoir::OfferMeasurement; + void OfferMeasurement( int64_t value, const MetricAttributes &attributes, From aca22e9b9e44a21d7dfebd07d9ad7c29fe420105 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 19:46:18 -0700 Subject: [PATCH 23/61] Comment out unused var 2 --- sdk/src/metrics/exemplar/reservoir.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/metrics/exemplar/reservoir.cc b/sdk/src/metrics/exemplar/reservoir.cc index f62c01cc69..f47a37b188 100644 --- a/sdk/src/metrics/exemplar/reservoir.cc +++ b/sdk/src/metrics/exemplar/reservoir.cc @@ -28,7 +28,7 @@ nostd::shared_ptr ExemplarReservoir::GetSimpleFixedSizeExempl nostd::shared_ptr ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( size_t size, - std::shared_ptr reservoir_cell_selector, + std::shared_ptr /* reservoir_cell_selector */, MapAndResetCellType map_and_reset_cell) { return nostd::shared_ptr{new AlignedHistogramBucketExemplarReservoir{ From a60e01c1fc0e8f1237b79d6f3c1e4a82f67740c1 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 19:52:58 -0700 Subject: [PATCH 24/61] Delete unused source file --- sdk/src/metrics/exemplar/filter.cc | 35 ------------------------------ 1 file changed, 35 deletions(-) delete mode 100644 sdk/src/metrics/exemplar/filter.cc diff --git a/sdk/src/metrics/exemplar/filter.cc b/sdk/src/metrics/exemplar/filter.cc deleted file mode 100644 index d74f024858..0000000000 --- a/sdk/src/metrics/exemplar/filter.cc +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#include "opentelemetry/sdk/metrics/exemplar/filter.h" -#include "opentelemetry/sdk/metrics/exemplar/always_sample_filter.h" -#include "opentelemetry/sdk/metrics/exemplar/never_sample_filter.h" -#include "opentelemetry/sdk/metrics/exemplar/with_trace_sample_filter.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace metrics -{ - -std::shared_ptr ExemplarFilter::GetNeverSampleFilter() noexcept -{ - static std::shared_ptr neverSampleFilter{new NeverSampleFilter{}}; - return neverSampleFilter; -} - -std::shared_ptr ExemplarFilter::GetAlwaysSampleFilter() noexcept -{ - static std::shared_ptr alwaysSampleFilter{new AlwaysSampleFilter{}}; - return alwaysSampleFilter; -} - -std::shared_ptr ExemplarFilter::GetWithTraceSampleFilter() noexcept -{ - std::shared_ptr withTraceSampleFilter{new WithTraceSampleFilter{}}; - return withTraceSampleFilter; -} - -} // namespace metrics -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE From 772f2b8164085861af8651780f6b9cb31a926b3e Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 19:56:49 -0700 Subject: [PATCH 25/61] Add one more macro --- sdk/include/opentelemetry/sdk/metrics/meter_context.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index dae0a214c0..9976fb2f4a 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -150,7 +150,10 @@ class MeterContext : public std::enable_shared_from_this std::unique_ptr views_; opentelemetry::common::SystemTimestamp sdk_start_ts_; std::vector> meters_; + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW metrics::ExemplarFilterType exemplar_filter_type_; +#endif #if defined(__cpp_lib_atomic_value_initialization) && \ __cpp_lib_atomic_value_initialization >= 201911L From 1288e9330a92008f2ad6900b033fcaf7baedca99 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 20:00:38 -0700 Subject: [PATCH 26/61] One more macro in meter_context.cc --- sdk/src/metrics/meter_context.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/src/metrics/meter_context.cc b/sdk/src/metrics/meter_context.cc index ea3c6db4dd..2b5ef3148c 100644 --- a/sdk/src/metrics/meter_context.cc +++ b/sdk/src/metrics/meter_context.cc @@ -74,6 +74,8 @@ void MeterContext::AddView(std::unique_ptr instrument_select views_->AddView(std::move(instrument_selector), std::move(meter_selector), std::move(view)); } +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + void MeterContext::SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type) noexcept { exemplar_filter_type_ = exemplar_filter_type; @@ -84,6 +86,8 @@ ExemplarFilterType MeterContext::GetExemplarFilter() const noexcept return exemplar_filter_type_; } +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW + void MeterContext::AddMeter(std::shared_ptr meter) { std::lock_guard guard(meter_lock_); From 06193ce267da99d056bdc1a34d0024d0fda602f6 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 20:05:39 -0700 Subject: [PATCH 27/61] Remove deleted test in bazel build --- sdk/test/metrics/exemplar/BUILD | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/sdk/test/metrics/exemplar/BUILD b/sdk/test/metrics/exemplar/BUILD index 2d13dd400d..66f6d4c319 100644 --- a/sdk/test/metrics/exemplar/BUILD +++ b/sdk/test/metrics/exemplar/BUILD @@ -18,23 +18,6 @@ cc_test( ], ) -cc_test( - name = "with_trace_sample_filter_test", - srcs = [ - "with_trace_sample_filter_test.cc", - ], - tags = [ - "metrics", - "test", - ], - deps = [ - "//api", - "//sdk:headers", - "//sdk/src/metrics", - "@com_google_googletest//:gtest_main", - ], -) - cc_test( name = "never_sample_filter_test", srcs = [ From 77f6e120cdd86379ee76e8d50b987f387d836f0b Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 20:09:25 -0700 Subject: [PATCH 28/61] One more macro --- sdk/src/metrics/meter_provider.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/src/metrics/meter_provider.cc b/sdk/src/metrics/meter_provider.cc index e075fac9aa..943ae137bd 100644 --- a/sdk/src/metrics/meter_provider.cc +++ b/sdk/src/metrics/meter_provider.cc @@ -109,11 +109,15 @@ void MeterProvider::AddView(std::unique_ptr instrument_selec context_->AddView(std::move(instrument_selector), std::move(meter_selector), std::move(view)); } +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + void MeterProvider::SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type) noexcept { context_->SetExemplarFilter(exemplar_filter_type); } +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW + /** * Shutdown the meter provider. */ From a28d8a18dee05ddb8af1f1deae631eeed765aaca Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 20:47:33 -0700 Subject: [PATCH 29/61] Add macro to test file --- sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc index ac86350af4..295796d04a 100644 --- a/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" #include @@ -16,3 +18,5 @@ TEST(NoExemplarReservoir, OfferMeasurement) auto exemplar_data = reservoir->CollectAndReset(MetricAttributes{}); ASSERT_TRUE(exemplar_data.empty()); } + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file From 2efb7f7a400fbd312896e0061b43d21510cc81a0 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 20:53:20 -0700 Subject: [PATCH 30/61] Format test code --- sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc index 295796d04a..31da9d7744 100644 --- a/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc @@ -3,8 +3,8 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" -#include +# include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" +# include using namespace opentelemetry::sdk::metrics; From c7e4e720fad1b6d551748cd9f1541e055f712e36 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 21:15:32 -0700 Subject: [PATCH 31/61] add header file --- sdk/test/metrics/sync_metric_storage_counter_test.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/test/metrics/sync_metric_storage_counter_test.cc b/sdk/test/metrics/sync_metric_storage_counter_test.cc index 20448a7fb8..220abe6b94 100644 --- a/sdk/test/metrics/sync_metric_storage_counter_test.cc +++ b/sdk/test/metrics/sync_metric_storage_counter_test.cc @@ -5,6 +5,7 @@ #include #include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/context/context.h" #include "opentelemetry/nostd/shared_ptr.h" #if ENABLE_METRICS_EXEMPLAR_PREVIEW From 44737aa231da27264a7a1f634552ba525a5871df Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 21:27:45 -0700 Subject: [PATCH 32/61] Fix one more test --- sdk/test/metrics/exemplar/reservoir_cell_test.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sdk/test/metrics/exemplar/reservoir_cell_test.cc b/sdk/test/metrics/exemplar/reservoir_cell_test.cc index 7522a36312..53e35a5a8d 100644 --- a/sdk/test/metrics/exemplar/reservoir_cell_test.cc +++ b/sdk/test/metrics/exemplar/reservoir_cell_test.cc @@ -1,8 +1,10 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" -#include +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + +# include "opentelemetry/sdk/metrics/exemplar/reservoir_cell.h" +# include OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -70,3 +72,5 @@ TEST_F(ReservoirCellTestPeer, Filtered) } // namespace metrics } // namespace sdk OPENTELEMETRY_END_NAMESPACE + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file From 798fc1930272d5e5b3f77901e68912a19f39ca7c Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 21:35:07 -0700 Subject: [PATCH 33/61] Add context header file --- sdk/test/metrics/multi_metric_storage_test.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sdk/test/metrics/multi_metric_storage_test.cc b/sdk/test/metrics/multi_metric_storage_test.cc index e7e4151f09..29613fecd3 100644 --- a/sdk/test/metrics/multi_metric_storage_test.cc +++ b/sdk/test/metrics/multi_metric_storage_test.cc @@ -3,7 +3,12 @@ #include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" #include "opentelemetry/common/key_value_iterable_view.h" +#include "opentelemetry/context/context.h" + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW + #include "opentelemetry/sdk/metrics/instruments.h" #include From 36bd04084ac83bfcb6bf4f989584b1ef041f7453 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 21:38:08 -0700 Subject: [PATCH 34/61] Add one more header --- .../opentelemetry/sdk/metrics/state/metric_storage.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h index 277b45fbb6..abeebf45a8 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/metric_storage.h @@ -7,6 +7,7 @@ #include #include "opentelemetry/common/timestamp.h" +#include "opentelemetry/context/context.h" #include "opentelemetry/nostd/function_ref.h" #include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/metrics/data/metric_data.h" @@ -20,11 +21,6 @@ namespace common class KeyValueIterable; } // namespace common -namespace context -{ -class Context; -} // namespace context - namespace sdk { namespace metrics From 729142ffaa03522e1f2cbeb2c3d4a2f0b2fd8960 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 21:47:02 -0700 Subject: [PATCH 35/61] format --- sdk/test/metrics/multi_metric_storage_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test/metrics/multi_metric_storage_test.cc b/sdk/test/metrics/multi_metric_storage_test.cc index 29613fecd3..97c5a438ee 100644 --- a/sdk/test/metrics/multi_metric_storage_test.cc +++ b/sdk/test/metrics/multi_metric_storage_test.cc @@ -6,7 +6,7 @@ #include "opentelemetry/context/context.h" #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h" #endif // ENABLE_METRICS_EXEMPLAR_PREVIEW #include "opentelemetry/sdk/metrics/instruments.h" From fab7bf04b7afb0c7e3e4cf9aaf89eeb1e4300035 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 21:54:56 -0700 Subject: [PATCH 36/61] Add new lines --- .../exemplar/aligned_histogram_bucket_exemplar_reservoir.h | 2 +- sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h | 2 +- .../sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h | 2 +- sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h | 2 +- sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h | 2 +- .../sdk/metrics/exemplar/reservoir_cell_selector.h | 2 +- .../sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index 357bb77e79..6b7fb11bf3 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -107,4 +107,4 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h index 3d3d322fdf..83cf7531fb 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/filter_type.h @@ -43,4 +43,4 @@ enum class ExemplarFilterType : uint8_t } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h index ab127f59b8..55f9ed876e 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/fixed_size_exemplar_reservoir.h @@ -105,4 +105,4 @@ class FixedSizeExemplarReservoir : public ExemplarReservoir } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h index 12fd7c30c3..ef1df1c9a5 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir.h @@ -87,4 +87,4 @@ class ExemplarReservoir } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h index 7aa2bdf298..03941870c0 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h @@ -160,4 +160,4 @@ typedef std::shared_ptr (ReservoirCell::*MapAndResetCellType)( } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h index a75a26aec7..79136ed9e8 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h @@ -48,4 +48,4 @@ class ReservoirCellSelector } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h index 88f8233244..56ac117736 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h @@ -95,4 +95,4 @@ class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW From 46b15f5468064e6bcb3778345c06f7df19e457e6 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 22:35:33 -0700 Subject: [PATCH 37/61] One more newline --- .../opentelemetry/sdk/metrics/state/async_metric_storage.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h index 9b5d59507c..14e9a3fbfa 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/async_metric_storage.h @@ -150,4 +150,4 @@ class AsyncMetricStorage : public MetricStorage, public AsyncWritableMetricStora } // namespace metrics } // namespace sdk -OPENTELEMETRY_END_NAMESPACE \ No newline at end of file +OPENTELEMETRY_END_NAMESPACE From 239e730cfd2cecb52730ac9fb050f599c75b5a63 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 22:41:16 -0700 Subject: [PATCH 38/61] One more macro --- sdk/test/metrics/exemplar/never_sample_filter_test.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/test/metrics/exemplar/never_sample_filter_test.cc b/sdk/test/metrics/exemplar/never_sample_filter_test.cc index e00d9f2962..11ae1cabac 100644 --- a/sdk/test/metrics/exemplar/never_sample_filter_test.cc +++ b/sdk/test/metrics/exemplar/never_sample_filter_test.cc @@ -5,6 +5,8 @@ #include "opentelemetry/context/context.h" #include "opentelemetry/sdk/metrics/exemplar/filter.h" +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + using namespace opentelemetry::sdk::metrics; TEST(NeverSampleFilter, SampleMeasurement) @@ -15,3 +17,5 @@ TEST(NeverSampleFilter, SampleMeasurement) ASSERT_FALSE(filter->ShouldSampleMeasurement(static_cast(1), MetricAttributes{}, opentelemetry::context::Context{})); } + +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW From 82b45f29b6dcc27c8171e59543d03d2a68f6780e Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 22:56:11 -0700 Subject: [PATCH 39/61] add one more newline --- .../opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h index 439697c197..66486f0cd4 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/no_exemplar_reservoir.h @@ -64,4 +64,4 @@ class NoExemplarReservoir final : public ExemplarReservoir } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW From 04c0d5957519cff9a2659824575e1eb1c2acf8da Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 23:19:26 -0700 Subject: [PATCH 40/61] add more newline --- sdk/src/metrics/exemplar/reservoir.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/metrics/exemplar/reservoir.cc b/sdk/src/metrics/exemplar/reservoir.cc index f47a37b188..2e1f76b4cc 100644 --- a/sdk/src/metrics/exemplar/reservoir.cc +++ b/sdk/src/metrics/exemplar/reservoir.cc @@ -45,4 +45,4 @@ nostd::shared_ptr ExemplarReservoir::GetNoExemplarReservoir() } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW From 3b802778674b84c2f6a9dd7f94e687e8e0457e7e Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Tue, 26 Mar 2024 23:49:13 -0700 Subject: [PATCH 41/61] More newline --- .../aligned_histogram_bucket_exemplar_reservoir_test.cc | 2 +- sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc | 2 +- sdk/test/metrics/exemplar/reservoir_cell_test.cc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc index 81fbdd2b4c..f46f6001cb 100644 --- a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc @@ -37,4 +37,4 @@ TEST_F(HistogramExemplarReservoirTestPeer, OfferMeasurement) } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW diff --git a/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc index 31da9d7744..6739152b05 100644 --- a/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc @@ -19,4 +19,4 @@ TEST(NoExemplarReservoir, OfferMeasurement) ASSERT_TRUE(exemplar_data.empty()); } -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW diff --git a/sdk/test/metrics/exemplar/reservoir_cell_test.cc b/sdk/test/metrics/exemplar/reservoir_cell_test.cc index 53e35a5a8d..2ce00ff3ba 100644 --- a/sdk/test/metrics/exemplar/reservoir_cell_test.cc +++ b/sdk/test/metrics/exemplar/reservoir_cell_test.cc @@ -73,4 +73,4 @@ TEST_F(ReservoirCellTestPeer, Filtered) } // namespace sdk OPENTELEMETRY_END_NAMESPACE -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW \ No newline at end of file +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW From 1410a42980bb1ac34dd4819fcfe6f35ac2120aae Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 00:06:58 -0700 Subject: [PATCH 42/61] One more fix --- sdk/test/metrics/exemplar/never_sample_filter_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test/metrics/exemplar/never_sample_filter_test.cc b/sdk/test/metrics/exemplar/never_sample_filter_test.cc index 11ae1cabac..9f0649653b 100644 --- a/sdk/test/metrics/exemplar/never_sample_filter_test.cc +++ b/sdk/test/metrics/exemplar/never_sample_filter_test.cc @@ -3,7 +3,7 @@ #include #include "opentelemetry/context/context.h" -#include "opentelemetry/sdk/metrics/exemplar/filter.h" +#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW From 1d9047c3548c6789231b032470f4b2128406de51 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 06:42:30 -0700 Subject: [PATCH 43/61] Fix test --- sdk/test/metrics/exemplar/never_sample_filter_test.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test/metrics/exemplar/never_sample_filter_test.cc b/sdk/test/metrics/exemplar/never_sample_filter_test.cc index 9f0649653b..27959bfddc 100644 --- a/sdk/test/metrics/exemplar/never_sample_filter_test.cc +++ b/sdk/test/metrics/exemplar/never_sample_filter_test.cc @@ -1,12 +1,12 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + #include #include "opentelemetry/context/context.h" #include "opentelemetry/sdk/metrics/exemplar/filter_type.h" -#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - using namespace opentelemetry::sdk::metrics; TEST(NeverSampleFilter, SampleMeasurement) From d0f8cca0913e9cbedc483c6b777f2e7bd92db3cb Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 06:46:35 -0700 Subject: [PATCH 44/61] format --- sdk/test/metrics/exemplar/never_sample_filter_test.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/test/metrics/exemplar/never_sample_filter_test.cc b/sdk/test/metrics/exemplar/never_sample_filter_test.cc index 27959bfddc..925d0b0d56 100644 --- a/sdk/test/metrics/exemplar/never_sample_filter_test.cc +++ b/sdk/test/metrics/exemplar/never_sample_filter_test.cc @@ -3,9 +3,9 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW -#include -#include "opentelemetry/context/context.h" -#include "opentelemetry/sdk/metrics/exemplar/filter_type.h" +# include +# include "opentelemetry/context/context.h" +# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" using namespace opentelemetry::sdk::metrics; From 6aec1f4ca81ad8f224560825ad3f6a8148e5f308 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 07:11:29 -0700 Subject: [PATCH 45/61] Remove unused test --- sdk/test/metrics/exemplar/BUILD | 17 --------------- .../exemplar/never_sample_filter_test.cc | 21 ------------------- 2 files changed, 38 deletions(-) delete mode 100644 sdk/test/metrics/exemplar/never_sample_filter_test.cc diff --git a/sdk/test/metrics/exemplar/BUILD b/sdk/test/metrics/exemplar/BUILD index 66f6d4c319..413780b7d5 100644 --- a/sdk/test/metrics/exemplar/BUILD +++ b/sdk/test/metrics/exemplar/BUILD @@ -18,23 +18,6 @@ cc_test( ], ) -cc_test( - name = "never_sample_filter_test", - srcs = [ - "never_sample_filter_test.cc", - ], - tags = [ - "metrics", - "test", - ], - deps = [ - "//api", - "//sdk:headers", - "//sdk/src/metrics", - "@com_google_googletest//:gtest_main", - ], -) - cc_test( name = "reservoir_cell_test", srcs = [ diff --git a/sdk/test/metrics/exemplar/never_sample_filter_test.cc b/sdk/test/metrics/exemplar/never_sample_filter_test.cc deleted file mode 100644 index 925d0b0d56..0000000000 --- a/sdk/test/metrics/exemplar/never_sample_filter_test.cc +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - -# include -# include "opentelemetry/context/context.h" -# include "opentelemetry/sdk/metrics/exemplar/filter_type.h" - -using namespace opentelemetry::sdk::metrics; - -TEST(NeverSampleFilter, SampleMeasurement) -{ - auto filter = opentelemetry::sdk::metrics::ExemplarFilter::GetNeverSampleFilter(); - ASSERT_FALSE( - filter->ShouldSampleMeasurement(1.0, MetricAttributes{}, opentelemetry::context::Context{})); - ASSERT_FALSE(filter->ShouldSampleMeasurement(static_cast(1), MetricAttributes{}, - opentelemetry::context::Context{})); -} - -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW From 6cc25e4227de201053c1a494d3c25f0ebebc44ae Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 09:26:03 -0700 Subject: [PATCH 46/61] Collect variable origin on valgrind --- ci/do_ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 3da87e587d..44270a4703 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -485,7 +485,7 @@ elif [[ "$1" == "bazel.tsan" ]]; then exit 0 elif [[ "$1" == "bazel.valgrind" ]]; then bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC //... - bazel $BAZEL_STARTUP_OPTIONS test --run_under="/usr/bin/valgrind --leak-check=full --error-exitcode=1 --suppressions=\"${SRC_DIR}/ci/valgrind-suppressions\"" $BAZEL_TEST_OPTIONS_ASYNC //... + bazel $BAZEL_STARTUP_OPTIONS test --run_under="/usr/bin/valgrind --leak-check=full --track-origins=yes --error-exitcode=1 --suppressions=\"${SRC_DIR}/ci/valgrind-suppressions\"" $BAZEL_TEST_OPTIONS_ASYNC //... exit 0 elif [[ "$1" == "bazel.e2e" ]]; then cd examples/e2e From 25077c988b464dc96e75c8f05b7b851a6e346049 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 11:29:28 -0700 Subject: [PATCH 47/61] Set exemplar type default to AlwaysOff --- sdk/include/opentelemetry/sdk/metrics/meter_context.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index 9976fb2f4a..2dfa2db56e 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -152,7 +152,7 @@ class MeterContext : public std::enable_shared_from_this std::vector> meters_; #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - metrics::ExemplarFilterType exemplar_filter_type_; + metrics::ExemplarFilterType exemplar_filter_type_ = metrics::ExemplarFilterType::kAlwaysOff; #endif #if defined(__cpp_lib_atomic_value_initialization) && \ From 2ee526787158d8ca0aa5b2eb50f59a9694f6d242 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 11:43:51 -0700 Subject: [PATCH 48/61] Set default parameter for MeterProvider::SetExemplarFilter --- sdk/include/opentelemetry/sdk/metrics/meter_provider.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h index 8aa8eae245..ddeb6d96ac 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_provider.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_provider.h @@ -107,7 +107,8 @@ class OPENTELEMETRY_EXPORT MeterProvider final : public opentelemetry::metrics:: #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - void SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type) noexcept; + void SetExemplarFilter(metrics::ExemplarFilterType exemplar_filter_type = + metrics::ExemplarFilterType::kTraceBased) noexcept; #endif From 1ef26dd9a9f070de6d7376cdd7e75cf054ec4879 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 11:44:09 -0700 Subject: [PATCH 49/61] Revert "Collect variable origin on valgrind" This reverts commit 6cc25e4227de201053c1a494d3c25f0ebebc44ae. --- CHANGELOG.md | 5 +++++ ci/do_ci.sh | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccb629074e..0e42041950 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ Increment the: [#2530](https://github.com/open-telemetry/opentelemetry-cpp/pull/2530) * [EXPORTER] Support URL-encoded values for `OTEL_EXPORTER_OTLP_HEADERS` [#2579](https://github.com/open-telemetry/opentelemetry-cpp/pull/2579) +* [SDK] Update ExemplarFilter and ExemplarReservoir for spec + [#2372](https://github.com/open-telemetry/opentelemetry-cpp/pull/2372) Important changes: @@ -33,6 +35,9 @@ Important changes: * [SDK] Change OTLP HTTP content_type default to binary [#2558](https://github.com/open-telemetry/opentelemetry-cpp/pull/2558) +Notes on experimental features: +* [] + ## [1.14.2] 2024-02-27 * [SDK] Fix observable attributes drop diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 44270a4703..3da87e587d 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -485,7 +485,7 @@ elif [[ "$1" == "bazel.tsan" ]]; then exit 0 elif [[ "$1" == "bazel.valgrind" ]]; then bazel $BAZEL_STARTUP_OPTIONS build $BAZEL_OPTIONS_ASYNC //... - bazel $BAZEL_STARTUP_OPTIONS test --run_under="/usr/bin/valgrind --leak-check=full --track-origins=yes --error-exitcode=1 --suppressions=\"${SRC_DIR}/ci/valgrind-suppressions\"" $BAZEL_TEST_OPTIONS_ASYNC //... + bazel $BAZEL_STARTUP_OPTIONS test --run_under="/usr/bin/valgrind --leak-check=full --error-exitcode=1 --suppressions=\"${SRC_DIR}/ci/valgrind-suppressions\"" $BAZEL_TEST_OPTIONS_ASYNC //... exit 0 elif [[ "$1" == "bazel.e2e" ]]; then cd examples/e2e From 2271886aeeb6394c62e2b5f150e5e83c9efb3536 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 13:06:05 -0700 Subject: [PATCH 50/61] Update changelog --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e42041950..86deb1fc03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,7 +36,11 @@ Important changes: [#2558](https://github.com/open-telemetry/opentelemetry-cpp/pull/2558) Notes on experimental features: -* [] + +* [#2327](https://github.com/open-telemetry/opentelemetry-cpp/issues/2327) + introduced `MeterProvider::SetExemplar()` which accepts en + `ExemplarFilterType` enumeration with `kAlwaysOff`, `kAlwaysOn` and + `kTraceBased`. ## [1.14.2] 2024-02-27 From 3ccbdaa65bdd21f42d698b80518c10e89d038290 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 16:05:41 -0700 Subject: [PATCH 51/61] Fix oob indexing --- .../exemplar/simple_fixed_size_exemplar_reservoir.h | 12 +++++++++++- sdk/include/opentelemetry/sdk/metrics/meter.h | 3 +++ .../metrics/state/filtered_ordered_attribute_map.cc | 4 ++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h index 56ac117736..0bc36eb08e 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h @@ -66,6 +66,11 @@ class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir const MetricAttributes & /* attributes */, const opentelemetry::context::Context & /* context */) override { + // + // The simple reservoir sampling algorithm from the spec below is used. + // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#simplefixedsizeexemplarreservoir + // + size_t measurement_num = measurements_seen_++; size_t index = static_cast(-1); @@ -76,7 +81,12 @@ class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir else { // return random index between 0 and measurement_num - index = rand() % (measurement_num + 1); + size_t random_index = rand() % (measurement_num + 1); + + if (random_index < size_) + { + index = random_index; + } } return static_cast(index); diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 84040acf7f..7e62324250 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -179,9 +179,12 @@ class Meter final : public opentelemetry::metrics::Meter { const auto *histogram_agg_config = static_cast(agg_config); + + // // Explicit bucket histogram aggregation with more than 1 bucket will use // AlignedHistogramBucketExemplarReservoir. // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#exemplar-defaults + // if (histogram_agg_config != nullptr && histogram_agg_config->boundaries_.size() > 1) { return nostd::shared_ptr(new AlignedHistogramBucketExemplarReservoir( diff --git a/sdk/src/metrics/state/filtered_ordered_attribute_map.cc b/sdk/src/metrics/state/filtered_ordered_attribute_map.cc index 1af0fe0d92..54552cab11 100644 --- a/sdk/src/metrics/state/filtered_ordered_attribute_map.cc +++ b/sdk/src/metrics/state/filtered_ordered_attribute_map.cc @@ -16,7 +16,7 @@ FilteredOrderedAttributeMap::FilteredOrderedAttributeMap( { attributes.ForEachKeyValue( [&](nostd::string_view key, opentelemetry::common::AttributeValue value) noexcept { - if (processor && processor->isPresent(key)) + if (!processor || processor->isPresent(key)) { SetAttribute(key, value); } @@ -32,7 +32,7 @@ FilteredOrderedAttributeMap::FilteredOrderedAttributeMap( { for (auto &kv : attributes) { - if (processor && processor->isPresent(kv.first)) + if (!processor || processor->isPresent(kv.first)) { SetAttribute(kv.first, kv.second); } From 48ce87fdba641a749135b2922cf32d0beaf3e2fb Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 16:21:00 -0700 Subject: [PATCH 52/61] Use random number generator from common --- .../metrics/exemplar/simple_fixed_size_exemplar_reservoir.h | 4 ++-- sdk/src/common/fast_random_number_generator.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h index 0bc36eb08e..99e659bf30 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h @@ -14,6 +14,7 @@ # include "opentelemetry/sdk/metrics/exemplar/reservoir.h" # include "opentelemetry/sdk/metrics/exemplar/reservoir_cell_selector.h" # include "opentelemetry/version.h" +# include "src/common/random.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace common @@ -80,8 +81,7 @@ class SimpleFixedSizeExemplarReservoir : public FixedSizeExemplarReservoir } else { - // return random index between 0 and measurement_num - size_t random_index = rand() % (measurement_num + 1); + size_t random_index = sdk::common::Random::GenerateRandom64() % measurement_num; if (random_index < size_) { diff --git a/sdk/src/common/fast_random_number_generator.h b/sdk/src/common/fast_random_number_generator.h index 9887f2f3b3..13e6c738d1 100644 --- a/sdk/src/common/fast_random_number_generator.h +++ b/sdk/src/common/fast_random_number_generator.h @@ -70,9 +70,9 @@ class FastRandomNumberGenerator reinterpret_cast(state_.data() + state_.size())); } - static constexpr uint64_t min() noexcept { return 0; } + static constexpr uint64_t(min)() noexcept { return 0; } - static constexpr uint64_t max() noexcept { return std::numeric_limits::max(); } + static constexpr uint64_t(max)() noexcept { return (std::numeric_limits::max)(); } private: std::array state_{}; From ebf4bbd977c0c2c1e4b81eddf5e456bc304acc54 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 17:04:48 -0700 Subject: [PATCH 53/61] add test --- ...gned_histogram_bucket_exemplar_reservoir.h | 2 +- sdk/src/metrics/exemplar/reservoir.cc | 5 ++--- ...istogram_bucket_exemplar_reservoir_test.cc | 19 +++++++++++++++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index 6b7fb11bf3..d4bd5cfd68 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -90,7 +90,7 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi } } - // the bucket at max_size is for values greater than the last boundary + // The bucket at max_size is for values greater than the last boundary return static_cast(max_size); } diff --git a/sdk/src/metrics/exemplar/reservoir.cc b/sdk/src/metrics/exemplar/reservoir.cc index 2e1f76b4cc..d695587a91 100644 --- a/sdk/src/metrics/exemplar/reservoir.cc +++ b/sdk/src/metrics/exemplar/reservoir.cc @@ -28,12 +28,11 @@ nostd::shared_ptr ExemplarReservoir::GetSimpleFixedSizeExempl nostd::shared_ptr ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( size_t size, - std::shared_ptr /* reservoir_cell_selector */, + std::shared_ptr reservoir_cell_selector, MapAndResetCellType map_and_reset_cell) { return nostd::shared_ptr{new AlignedHistogramBucketExemplarReservoir{ - size, AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(), - map_and_reset_cell}}; + size, reservoir_cell_selector, map_and_reset_cell}}; } nostd::shared_ptr ExemplarReservoir::GetNoExemplarReservoir() diff --git a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc index f46f6001cb..ff35d2ebfe 100644 --- a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc @@ -13,12 +13,27 @@ namespace sdk { namespace metrics { -class HistogramExemplarReservoirTestPeer : public ::testing::Test +class AlignedHistogramBucketExemplarReservoirTestPeer : public ::testing::Test { public: }; -TEST_F(HistogramExemplarReservoirTestPeer, OfferMeasurement) +TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement) +{ + std::vector boundaries{1, 5.0, 10, 15, 20}; + auto histogram_exemplar_reservoir = ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( + boundaries.size(), + AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(boundaries), nullptr); + histogram_exemplar_reservoir->OfferMeasurement( + 1.0, MetricAttributes{}, opentelemetry::context::Context{}, std::chrono::system_clock::now()); + histogram_exemplar_reservoir->OfferMeasurement(static_cast(1), MetricAttributes{}, + opentelemetry::context::Context{}, + std::chrono::system_clock::now()); + auto exemplar_data = histogram_exemplar_reservoir->CollectAndReset(MetricAttributes{}); + ASSERT_TRUE(exemplar_data.empty()); +} + +TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement1) { std::vector boundaries{1, 5.0, 10, 15, 20}; auto histogram_exemplar_reservoir = ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( From a7c7973c6a46d92b4ae45407c0704be36cd52a4e Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 17:09:32 -0700 Subject: [PATCH 54/61] Add int64_t support to HistogramCellSelector --- ...gned_histogram_bucket_exemplar_reservoir.h | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h index d4bd5cfd68..2690493d7d 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h @@ -49,31 +49,17 @@ class AlignedHistogramBucketExemplarReservoir : public FixedSizeExemplarReservoi : FixedSizeExemplarReservoir(size + 1, reservoir_cell_selector, map_and_reset_cell) {} - using FixedSizeExemplarReservoir::OfferMeasurement; - - void OfferMeasurement( - int64_t /* value */, - const MetricAttributes & /* attributes */, - const opentelemetry::context::Context & /* context */, - const opentelemetry::common::SystemTimestamp & /* timestamp */) noexcept override - { - OTEL_INTERNAL_LOG_ERROR( - "AlignedHistogramBucketExemplarReservoir shouldn't be used with int64_t values"); - } - class HistogramCellSelector : public ReservoirCellSelector { public: HistogramCellSelector(const std::vector &boundaries) : boundaries_(boundaries) {} - int ReservoirCellIndexFor(const std::vector & /* cells */, - int64_t /* value */, - const MetricAttributes & /* attributes */, - const opentelemetry::context::Context & /* context */) override + int ReservoirCellIndexFor(const std::vector &cells, + int64_t value, + const MetricAttributes &attributes, + const opentelemetry::context::Context &context) override { - OTEL_INTERNAL_LOG_ERROR( - "AlignedHistogramBucketExemplarReservoir shouldn't be used with int64_t values"); - return -1; + return ReservoirCellIndexFor(cells, static_cast(value), attributes, context); } int ReservoirCellIndexFor(const std::vector & /* cells */, From 1c922012a5c81d2b9bb691fcf55058a714e544c5 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 17:13:09 -0700 Subject: [PATCH 55/61] Add random lib dependence for bazel --- sdk/src/metrics/BUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/src/metrics/BUILD b/sdk/src/metrics/BUILD index c230f6a637..ff8d244da1 100644 --- a/sdk/src/metrics/BUILD +++ b/sdk/src/metrics/BUILD @@ -12,6 +12,7 @@ cc_library( "//api", "//sdk:headers", "//sdk/src/common:global_log_handler", + "//sdk/src/common:random", "//sdk/src/resource", ], ) From 0cfec22849f8dc43ee02ae32b60843b7ff8273f9 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 20:24:10 -0700 Subject: [PATCH 56/61] Move utils function to a separate file --- .../sdk/metrics/exemplar/reservoir_utils.h | 62 +++++++++++++++++++ sdk/include/opentelemetry/sdk/metrics/meter.h | 54 ---------------- sdk/src/metrics/meter.cc | 6 ++ ...istogram_bucket_exemplar_reservoir_test.cc | 4 +- 4 files changed, 71 insertions(+), 55 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h new file mode 100644 index 0000000000..dfd10995a4 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_utils.h @@ -0,0 +1,62 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW + +# include "opentelemetry/common/macros.h" +# include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" +# include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" +# include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" +# include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace metrics +{ +static inline MapAndResetCellType GetMapAndResetCellMethod( + const InstrumentDescriptor &instrument_descriptor) +{ + if (instrument_descriptor.value_type_ == InstrumentValueType::kLong) + { + return &ReservoirCell::GetAndResetLong; + } + + return &ReservoirCell::GetAndResetDouble; +} + +static inline nostd::shared_ptr GetExemplarReservoir( + const AggregationType agg_type, + const AggregationConfig *agg_config, + const InstrumentDescriptor &instrument_descriptor) +{ + if (agg_type == AggregationType::kHistogram) + { + const auto *histogram_agg_config = static_cast(agg_config); + + // + // Explicit bucket histogram aggregation with more than 1 bucket will use + // AlignedHistogramBucketExemplarReservoir. + // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#exemplar-defaults + // + if (histogram_agg_config != nullptr && histogram_agg_config->boundaries_.size() > 1) + { + return nostd::shared_ptr(new AlignedHistogramBucketExemplarReservoir( + histogram_agg_config->boundaries_.size(), + AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector( + histogram_agg_config->boundaries_), + GetMapAndResetCellMethod(instrument_descriptor))); + } + } + + return nostd::shared_ptr(new SimpleFixedSizeExemplarReservoir( + SimpleFixedSizeExemplarReservoir::kDefaultSimpleReservoirSize, + SimpleFixedSizeExemplarReservoir::GetSimpleFixedSizeCellSelector(), + GetMapAndResetCellMethod(instrument_descriptor))); +} +} // namespace metrics +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE +#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW diff --git a/sdk/include/opentelemetry/sdk/metrics/meter.h b/sdk/include/opentelemetry/sdk/metrics/meter.h index 7e62324250..b29bede012 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter.h @@ -17,14 +17,6 @@ #include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/instrumentationscope/instrumentation_scope.h" - -#if ENABLE_METRICS_EXEMPLAR_PREVIEW -# include "opentelemetry/sdk/metrics/aggregation/aggregation_config.h" -# include "opentelemetry/sdk/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir.h" -# include "opentelemetry/sdk/metrics/exemplar/reservoir.h" -# include "opentelemetry/sdk/metrics/exemplar/simple_fixed_size_exemplar_reservoir.h" -#endif - #include "opentelemetry/sdk/metrics/instrument_metadata_validator.h" #include "opentelemetry/sdk/metrics/instruments.h" #include "opentelemetry/sdk/metrics/meter_context.h" @@ -156,52 +148,6 @@ class Meter final : public opentelemetry::metrics::Meter return instrument_validator.ValidateName(name) && instrument_validator.ValidateUnit(unit) && instrument_validator.ValidateDescription(description); } - -#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW - - static MapAndResetCellType GetMapAndResetCellMethod( - const InstrumentDescriptor &instrument_descriptor) - { - if (instrument_descriptor.value_type_ == InstrumentValueType::kLong) - { - return &ReservoirCell::GetAndResetLong; - } - - return &ReservoirCell::GetAndResetDouble; - } - - static nostd::shared_ptr GetExemplarReservoir( - const AggregationType agg_type, - const AggregationConfig *agg_config, - const InstrumentDescriptor &instrument_descriptor) - { - if (agg_type == AggregationType::kHistogram) - { - const auto *histogram_agg_config = - static_cast(agg_config); - - // - // Explicit bucket histogram aggregation with more than 1 bucket will use - // AlignedHistogramBucketExemplarReservoir. - // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#exemplar-defaults - // - if (histogram_agg_config != nullptr && histogram_agg_config->boundaries_.size() > 1) - { - return nostd::shared_ptr(new AlignedHistogramBucketExemplarReservoir( - histogram_agg_config->boundaries_.size(), - AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector( - histogram_agg_config->boundaries_), - GetMapAndResetCellMethod(instrument_descriptor))); - } - } - - return nostd::shared_ptr(new SimpleFixedSizeExemplarReservoir( - SimpleFixedSizeExemplarReservoir::kDefaultSimpleReservoirSize, - SimpleFixedSizeExemplarReservoir::GetSimpleFixedSizeCellSelector(), - GetMapAndResetCellMethod(instrument_descriptor))); - } - -#endif // ENABLE_METRICS_EXEMPLAR_PREVIEW }; } // namespace metrics } // namespace sdk diff --git a/sdk/src/metrics/meter.cc b/sdk/src/metrics/meter.cc index 587dd65f63..763cdcbe02 100644 --- a/sdk/src/metrics/meter.cc +++ b/sdk/src/metrics/meter.cc @@ -5,7 +5,13 @@ #include "opentelemetry/metrics/noop.h" #include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/sdk/common/attributemap_hash.h" #include "opentelemetry/sdk/metrics/async_instruments.h" + +#ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW +# include "opentelemetry/sdk/metrics/exemplar/reservoir_utils.h" +#endif + #include "opentelemetry/sdk/metrics/meter.h" #include "opentelemetry/sdk/metrics/state/multi_metric_storage.h" #include "opentelemetry/sdk/metrics/state/observable_registry.h" diff --git a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc index ff35d2ebfe..1c6707cc34 100644 --- a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc @@ -35,10 +35,12 @@ TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement) TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement1) { + __debugbreak(); std::vector boundaries{1, 5.0, 10, 15, 20}; auto histogram_exemplar_reservoir = ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( boundaries.size(), - AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(boundaries), nullptr); + AlignedHistogramBucketExemplarReservoir::GetHistogramCellSelector(boundaries), + &ReservoirCell::GetAndResetDouble); histogram_exemplar_reservoir->OfferMeasurement( 1.0, MetricAttributes{}, opentelemetry::context::Context{}, std::chrono::system_clock::now()); histogram_exemplar_reservoir->OfferMeasurement(static_cast(1), MetricAttributes{}, From 166233909c3431a9f620e88527c90637efe55377 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 20:31:45 -0700 Subject: [PATCH 57/61] Revert test code --- .../exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc index 1c6707cc34..a6f2c9d968 100644 --- a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc @@ -35,7 +35,6 @@ TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement) TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement1) { - __debugbreak(); std::vector boundaries{1, 5.0, 10, 15, 20}; auto histogram_exemplar_reservoir = ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( boundaries.size(), From a1e6c94b5f4fa28e0da8c3c74229448ae67341c8 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 20:37:10 -0700 Subject: [PATCH 58/61] Fix test --- .../aligned_histogram_bucket_exemplar_reservoir_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc index a6f2c9d968..93bd4bcccb 100644 --- a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc @@ -46,7 +46,7 @@ TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement1) opentelemetry::context::Context{}, std::chrono::system_clock::now()); auto exemplar_data = histogram_exemplar_reservoir->CollectAndReset(MetricAttributes{}); - ASSERT_TRUE(exemplar_data.empty()); + ASSERT_FALSE(exemplar_data.empty()); } } // namespace metrics From ea56f06c034a9aa923a658d146e5fd80712c2f70 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Wed, 27 Mar 2024 23:02:50 -0700 Subject: [PATCH 59/61] Improve testcase name --- .../aligned_histogram_bucket_exemplar_reservoir_test.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc index 93bd4bcccb..487a0414a0 100644 --- a/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/aligned_histogram_bucket_exemplar_reservoir_test.cc @@ -33,7 +33,7 @@ TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement) ASSERT_TRUE(exemplar_data.empty()); } -TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement1) +TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurementWithNonEmptyCollection) { std::vector boundaries{1, 5.0, 10, 15, 20}; auto histogram_exemplar_reservoir = ExemplarReservoir::GetAlignedHistogramBucketExemplarReservoir( @@ -46,7 +46,7 @@ TEST_F(AlignedHistogramBucketExemplarReservoirTestPeer, OfferMeasurement1) opentelemetry::context::Context{}, std::chrono::system_clock::now()); auto exemplar_data = histogram_exemplar_reservoir->CollectAndReset(MetricAttributes{}); - ASSERT_FALSE(exemplar_data.empty()); + ASSERT_TRUE(!exemplar_data.empty()); } } // namespace metrics From 699d7e3f4f5d29a6fd9ffe9b7399e9bbe2cd1729 Mon Sep 17 00:00:00 2001 From: Marc Alff Date: Tue, 16 Apr 2024 23:34:26 +0200 Subject: [PATCH 60/61] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 454d44c6c4..9dbb4d578d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,7 +69,7 @@ Important changes: Notes on experimental features: -* [#2327](https://github.com/open-telemetry/opentelemetry-cpp/issues/2327) +* [#2372](https://github.com/open-telemetry/opentelemetry-cpp/issues/2372) introduced `MeterProvider::SetExemplar()` which accepts en `ExemplarFilterType` enumeration with `kAlwaysOff`, `kAlwaysOn` and `kTraceBased`. From f2e0df3ffce9db657d95ed4aa6e428a09d079b0c Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Mon, 22 Apr 2024 14:20:38 -0700 Subject: [PATCH 61/61] Fix changelog --- CHANGELOG.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc161166fd..9381363300 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,16 @@ Increment the: ## [Unreleased] +* [SDK] Update ExemplarFilter and ExemplarReservoir for spec + [#2372](https://github.com/open-telemetry/opentelemetry-cpp/pull/2372) + +Notes on experimental features: + +* [#2372](https://github.com/open-telemetry/opentelemetry-cpp/issues/2372) + introduced `MeterProvider::SetExemplar()` which accepts en + `ExemplarFilterType` enumeration with `kAlwaysOff`, `kAlwaysOn` and + `kTraceBased`. + ## [1.15.0] 2024-04-21 * [EXPORTER] Change OTLP HTTP content_type default to binary @@ -78,8 +88,6 @@ Increment the: [#2631](https://github.com/open-telemetry/opentelemetry-cpp/pull/2631) * [SDK] DefaultLogHandler to print errors to std::cerr, add LogLevel::None [#2622](https://github.com/open-telemetry/opentelemetry-cpp/pull/2622) -* [SDK] Update ExemplarFilter and ExemplarReservoir for spec - [#2372](https://github.com/open-telemetry/opentelemetry-cpp/pull/2372) * [SEMANTIC CONVENTIONS] Upgrade to semantic convention 1.25.0 [#2633](https://github.com/open-telemetry/opentelemetry-cpp/pull/2633) * [DOC] Add readme and examples for OTLP FILE exporters. @@ -126,13 +134,6 @@ Important changes: * Numbering of log levels like OTEL_INTERNAL_LOG_LEVEL_ERROR has changed, which requires to rebuild, as the SDK ABI differs. -Notes on experimental features: - -* [#2372](https://github.com/open-telemetry/opentelemetry-cpp/issues/2372) - introduced `MeterProvider::SetExemplar()` which accepts en - `ExemplarFilterType` enumeration with `kAlwaysOff`, `kAlwaysOn` and - `kTraceBased`. - ## [1.14.2] 2024-02-27 * [SDK] Fix observable attributes drop