From 9012324cb915e1157eb7dbd3fdd2fa89126ad240 Mon Sep 17 00:00:00 2001 From: lani_karrot Date: Thu, 30 Apr 2026 08:53:22 +0000 Subject: [PATCH] fix: noexcept for Observer --- .../sdk/metrics/observer_result.h | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/sdk/include/opentelemetry/sdk/metrics/observer_result.h b/sdk/include/opentelemetry/sdk/metrics/observer_result.h index 8acc4972e0..0d816efae0 100644 --- a/sdk/include/opentelemetry/sdk/metrics/observer_result.h +++ b/sdk/include/opentelemetry/sdk/metrics/observer_result.h @@ -7,6 +7,7 @@ #include "opentelemetry/common/attribute_value.h" #include "opentelemetry/common/key_value_iterable.h" +#include "opentelemetry/common/macros.h" #include "opentelemetry/metrics/observer_result.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/sdk/metrics/state/attributes_hashmap.h" @@ -34,15 +35,37 @@ class ObserverResultT final : public opentelemetry::metrics::ObserverResultT ~ObserverResultT() override = default; void Observe(T value) noexcept override +#if OPENTELEMETRY_HAVE_EXCEPTIONS + try +#endif { data_[MetricAttributes{{}, attributes_processor_}] = value; } +#if OPENTELEMETRY_HAVE_EXCEPTIONS + catch (...) + { + // Silently drop the measurement; per opentelemetry-cpp guidance (PR #3964), + // exceptions in noexcept API/SDK code must not log or abort. + return; + } +#endif void Observe(T value, const opentelemetry::common::KeyValueIterable &attributes) noexcept override +#if OPENTELEMETRY_HAVE_EXCEPTIONS + try +#endif { data_[MetricAttributes{attributes, attributes_processor_}] = value; // overwrites the previous value if present } +#if OPENTELEMETRY_HAVE_EXCEPTIONS + catch (...) + { + // Silently drop the measurement; per opentelemetry-cpp guidance (PR #3964), + // exceptions in noexcept API/SDK code must not log or abort. + return; + } +#endif const std::unordered_map &GetMeasurements() {