From cfdba33e226448dab839735b1737a3b59512200b Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 18:39:25 +0000 Subject: [PATCH 01/15] fix modernize-use-using warnings --- api/include/opentelemetry/nostd/string_view.h | 2 +- ext/include/opentelemetry/ext/http/server/socket_tools.h | 4 ++-- functional/otlp/func_grpc_main.cc | 2 +- functional/otlp/func_http_main.cc | 2 +- .../opentelemetry/sdk/metrics/exemplar/reservoir_cell.h | 4 ++-- .../sdk/metrics/view/attributes_processor.h | 9 ++++----- sdk/test/metrics/meter_provider_sdk_test.cc | 2 +- sdk/test/trace/tracer_provider_test.cc | 2 +- 8 files changed, 13 insertions(+), 14 deletions(-) diff --git a/api/include/opentelemetry/nostd/string_view.h b/api/include/opentelemetry/nostd/string_view.h index 13c8cfe560..ae783be036 100644 --- a/api/include/opentelemetry/nostd/string_view.h +++ b/api/include/opentelemetry/nostd/string_view.h @@ -37,7 +37,7 @@ using Traits = std::char_traits; class string_view { public: - typedef std::size_t size_type; + using size_type = std::size_t; static constexpr size_type npos = static_cast(-1); diff --git a/ext/include/opentelemetry/ext/http/server/socket_tools.h b/ext/include/opentelemetry/ext/http/server/socket_tools.h index 25a8fd2edf..fd9d9383de 100644 --- a/ext/include/opentelemetry/ext/http/server/socket_tools.h +++ b/ext/include/opentelemetry/ext/http/server/socket_tools.h @@ -326,10 +326,10 @@ static_assert(sizeof(SocketAddr) == sizeof(sockaddr), struct Socket { #ifdef _WIN32 - typedef SOCKET Type; + using Type = SOCKET; static Type const Invalid = INVALID_SOCKET; #else - typedef int Type; + using Type = int; static Type const Invalid = -1; #endif diff --git a/functional/otlp/func_grpc_main.cc b/functional/otlp/func_grpc_main.cc index 9f24f4219c..e285f2c1f9 100644 --- a/functional/otlp/func_grpc_main.cc +++ b/functional/otlp/func_grpc_main.cc @@ -318,7 +318,7 @@ static int parse_args(int argc, char *argv[]) return 0; } -typedef int (*test_func_t)(); +using test_func_t = int (*)(); struct test_case { diff --git a/functional/otlp/func_http_main.cc b/functional/otlp/func_http_main.cc index 80d4bff1de..70d4bdbfac 100644 --- a/functional/otlp/func_http_main.cc +++ b/functional/otlp/func_http_main.cc @@ -335,7 +335,7 @@ static int parse_args(int argc, char *argv[]) return 0; } -typedef int (*test_func_t)(); +using test_func_t = int (*)(); struct test_case { diff --git a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h index 2a52a2ba4d..66d07dfb3d 100644 --- a/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h +++ b/sdk/include/opentelemetry/sdk/metrics/exemplar/reservoir_cell.h @@ -149,8 +149,8 @@ class ReservoirCell friend class ReservoirCellTestPeer; }; -typedef std::shared_ptr (ReservoirCell::*MapAndResetCellType)( - const MetricAttributes &); +using MapAndResetCellType = + std::shared_ptr (ReservoirCell::*)(const MetricAttributes &); } // namespace metrics } // namespace sdk diff --git a/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h b/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h index 26294a99f2..50383c7f1b 100644 --- a/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h +++ b/sdk/include/opentelemetry/sdk/metrics/view/attributes_processor.h @@ -24,11 +24,10 @@ namespace metrics using MetricAttributes = opentelemetry::sdk::metrics::FilteredOrderedAttributeMap; -typedef std::unordered_map - FilterAttributeMap; +using FilterAttributeMap = std::unordered_map; /** * The AttributesProcessor is responsible for customizing which diff --git a/sdk/test/metrics/meter_provider_sdk_test.cc b/sdk/test/metrics/meter_provider_sdk_test.cc index 501273b597..7634d8f0b3 100644 --- a/sdk/test/metrics/meter_provider_sdk_test.cc +++ b/sdk/test/metrics/meter_provider_sdk_test.cc @@ -328,7 +328,7 @@ TEST(MeterProvider, GetMeterAbiv2) EXPECT_EQ(opentelemetry::nostd::get(attr->second), 42); } - typedef std::pair KV; + using KV = std::pair; std::initializer_list attrs7 = {{"foo", 3.14}, {"bar", "2"}}; auto m7 = mp.GetMeter("name7", "version7", "url7", attrs7); diff --git a/sdk/test/trace/tracer_provider_test.cc b/sdk/test/trace/tracer_provider_test.cc index 09868fd687..d8c6822388 100644 --- a/sdk/test/trace/tracer_provider_test.cc +++ b/sdk/test/trace/tracer_provider_test.cc @@ -268,7 +268,7 @@ TEST(TracerProvider, GetTracerAbiv2) EXPECT_EQ(opentelemetry::nostd::get(attr->second), 42); } - typedef std::pair KV; + using KV = std::pair; std::initializer_list attrs7 = {{"foo", 3.14}, {"bar", "2"}}; auto t7 = tp.GetTracer("name7", "version7", "url7", attrs7); From 813d4795480c6fc001c0d5bc234738eecddd6dc8 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 14:43:50 -0400 Subject: [PATCH 02/15] fix modernize-deprecated-headers warnings --- sdk/src/resource/resource_detector.cc | 2 +- .../aligned_histogram_bucket_exemplar_reservoir_test.cc | 2 +- sdk/test/metrics/exemplar/filter_predicate_test.cc | 2 +- sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/src/resource/resource_detector.cc b/sdk/src/resource/resource_detector.cc index 56671c2347..01b2a7f877 100644 --- a/sdk/src/resource/resource_detector.cc +++ b/sdk/src/resource/resource_detector.cc @@ -12,7 +12,7 @@ #include "opentelemetry/nostd/variant.h" -#include +#include #include #include 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 32402bcfd5..1f8899d674 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 @@ -4,7 +4,7 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW # include -# include +# include # include # include # include diff --git a/sdk/test/metrics/exemplar/filter_predicate_test.cc b/sdk/test/metrics/exemplar/filter_predicate_test.cc index 6001bf0254..370a5decf5 100644 --- a/sdk/test/metrics/exemplar/filter_predicate_test.cc +++ b/sdk/test/metrics/exemplar/filter_predicate_test.cc @@ -4,7 +4,7 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW # include -# include +# include # include # include "opentelemetry/context/context.h" diff --git a/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc b/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc index cb8b602212..83d8e78f0c 100644 --- a/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc +++ b/sdk/test/metrics/exemplar/no_exemplar_reservoir_test.cc @@ -4,7 +4,7 @@ #ifdef ENABLE_METRICS_EXEMPLAR_PREVIEW # include -# include +# include # include # include # include From a06b47b4535af0159e292ea810ccaa69dec6ef6e Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 14:46:59 -0400 Subject: [PATCH 03/15] fix bugprone-derived-method-shadowing-base-method --- exporters/otlp/test/otlp_grpc_exporter_test.cc | 6 +++++- .../otlp/test/otlp_grpc_log_record_exporter_test.cc | 12 ++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/exporters/otlp/test/otlp_grpc_exporter_test.cc b/exporters/otlp/test/otlp_grpc_exporter_test.cc index 754e58dd26..f2989e1870 100644 --- a/exporters/otlp/test/otlp_grpc_exporter_test.cc +++ b/exporters/otlp/test/otlp_grpc_exporter_test.cc @@ -126,8 +126,12 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe OtlpMockTraceServiceStub *stub_; }; +# if defined(GRPC_CPP_VERSION_MAJOR) && \ + (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 async_interface_base *async() override { return &async_interface_; } - async_interface_base *experimental_async() { return &async_interface_; } +# else + async_interface_base *experimental_async() override { return &async_interface_; } +# endif ::grpc::Status GetLastAsyncStatus() const noexcept { return last_async_status_; } diff --git a/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc b/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc index 48f4b98351..11261ddaf6 100644 --- a/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc +++ b/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc @@ -128,8 +128,12 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe OtlpMockTraceServiceStub *stub_; }; +#if defined(GRPC_CPP_VERSION_MAJOR) && \ + (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 async_interface_base *async() override { return &async_interface_; } - async_interface_base *experimental_async() { return &async_interface_; } +#else + async_interface_base *experimental_async() override { return &async_interface_; } +#endif ::grpc::Status GetLastAsyncStatus() const noexcept { return last_async_status_; } @@ -189,8 +193,12 @@ class OtlpMockLogsServiceStub : public proto::collector::logs::v1::MockLogsServi OtlpMockLogsServiceStub *stub_; }; +#if defined(GRPC_CPP_VERSION_MAJOR) && \ + (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 async_interface_base *async() override { return &async_interface_; } - async_interface_base *experimental_async() { return &async_interface_; } +#else + async_interface_base *experimental_async() override { return &async_interface_; } +#endif ::grpc::Status GetLastAsyncStatus() const noexcept { return last_async_status_; } From b2b529db4d9e9dd80211a449d958f75ccc0fcfa9 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 14:50:00 -0400 Subject: [PATCH 04/15] fix bugprone-random-generator-seed warnings --- sdk/test/common/random_benchmark.cc | 2 +- .../metrics/base2_exponential_histogram_indexer_benchmark.cc | 4 ++-- sdk/test/metrics/histogram_aggregation_benchmark.cc | 2 +- sdk/test/metrics/sum_aggregation_benchmark.cc | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/test/common/random_benchmark.cc b/sdk/test/common/random_benchmark.cc index 46dadbe260..0cecf39500 100644 --- a/sdk/test/common/random_benchmark.cc +++ b/sdk/test/common/random_benchmark.cc @@ -21,7 +21,7 @@ BENCHMARK(BM_RandomIdGeneration); void BM_RandomIdStdGeneration(benchmark::State &state) { - std::mt19937_64 generator{0}; + std::mt19937_64 generator{std::random_device{}()}; while (state.KeepRunning()) { benchmark::DoNotOptimize(generator()); diff --git a/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc b/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc index 3484d298dc..e747ee6f9e 100644 --- a/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc +++ b/sdk/test/metrics/base2_exponential_histogram_indexer_benchmark.cc @@ -15,7 +15,7 @@ namespace void BM_NewIndexer(benchmark::State &state) { std::array batch{}; - std::default_random_engine generator; + std::default_random_engine generator{std::random_device{}()}; std::uniform_int_distribution distribution(1, 32); while (state.KeepRunningBatch(static_cast(batch.size()))) @@ -39,7 +39,7 @@ BENCHMARK(BM_NewIndexer); void BM_ComputeIndex(benchmark::State &state) { std::array batch{}; - std::default_random_engine generator; + std::default_random_engine generator{std::random_device{}()}; std::uniform_real_distribution distribution(0, 1000); Base2ExponentialHistogramIndexer indexer(static_cast(state.range(0))); diff --git a/sdk/test/metrics/histogram_aggregation_benchmark.cc b/sdk/test/metrics/histogram_aggregation_benchmark.cc index 6ef6ea4310..1b0155f1f7 100644 --- a/sdk/test/metrics/histogram_aggregation_benchmark.cc +++ b/sdk/test/metrics/histogram_aggregation_benchmark.cc @@ -54,7 +54,7 @@ void HistogramAggregation(benchmark::State &state, std::unique_ptr std::shared_ptr reader{new MockMetricReader(std::move(exporter))}; mp.AddMetricReader(reader); auto h = m->CreateDoubleHistogram("histogram1", "histogram1_description", "histogram1_unit"); - std::default_random_engine generator; + std::default_random_engine generator{std::random_device{}()}; std::uniform_int_distribution distribution(0, 1000000); // Generate 100000 measurements constexpr size_t TOTAL_MEASUREMENTS = 100000; diff --git a/sdk/test/metrics/sum_aggregation_benchmark.cc b/sdk/test/metrics/sum_aggregation_benchmark.cc index 06d4bb9962..edcef5297c 100644 --- a/sdk/test/metrics/sum_aggregation_benchmark.cc +++ b/sdk/test/metrics/sum_aggregation_benchmark.cc @@ -41,7 +41,7 @@ void BM_SumAggregation(benchmark::State &state) std::shared_ptr reader{new MockMetricReader(std::move(exporter))}; mp.AddMetricReader(reader); auto h = m->CreateDoubleCounter("counter1", "counter1_description", "counter1_unit"); - std::default_random_engine generator; + std::default_random_engine generator{std::random_device{}()}; std::uniform_int_distribution distribution(0, 1000000); // Generate 100000 measurements constexpr size_t TOTAL_MEASUREMENTS = 100000; From f3bdf609d362bb89ac696f00c6f761d2917eefdb Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 14:52:23 -0400 Subject: [PATCH 05/15] fix misc-predictable-rand warnings --- sdk/test/metrics/measurements_benchmark.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sdk/test/metrics/measurements_benchmark.cc b/sdk/test/metrics/measurements_benchmark.cc index e5e52fc7fb..71fda12281 100644 --- a/sdk/test/metrics/measurements_benchmark.cc +++ b/sdk/test/metrics/measurements_benchmark.cc @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -97,9 +98,11 @@ void BM_MeasurementsTest(benchmark::State &state) for (size_t i = 0; i < NUM_CORES; i++) { threads.emplace_back([&h, &cur_processed, &MAX_MEASUREMENTS, &attributes]() { + std::mt19937 rng{std::random_device{}()}; + std::uniform_int_distribution dist(0, 999); while (cur_processed++ <= MAX_MEASUREMENTS) { - size_t index = rand() % 1000; + size_t index = dist(rng); h->Add(1.0, opentelemetry::common::KeyValueIterableView>( attributes[index]), @@ -143,9 +146,11 @@ void BM_MeasurementsThreadsShareCounterTest(benchmark::State &state) { threads.emplace_back( [&h, &cur_processed, &MAX_MEASUREMENTS, &attributes](size_t /*thread_id*/) { + std::mt19937 rng{std::random_device{}()}; + std::uniform_int_distribution dist(0, 999); while (cur_processed++ <= MAX_MEASUREMENTS) { - size_t index = rand() % 1000; + size_t index = dist(rng); h->Add(1.0, opentelemetry::common::KeyValueIterableView>( attributes[index]), @@ -194,9 +199,11 @@ void BM_MeasurementsPerThreadCounterTest(benchmark::State &state) std::string description = "counter1_description_thread_" + std::to_string(thread_id); auto per_thread_counter = m->CreateDoubleCounter("counter1", description, "counter1_unit"); + std::mt19937 rng{std::random_device{}()}; + std::uniform_int_distribution dist(0, 999); while (cur_processed++ <= MAX_MEASUREMENTS) { - size_t index = rand() % 1000; + size_t index = dist(rng); per_thread_counter->Add( 1.0, opentelemetry::common::KeyValueIterableView>( From 79cdcec1a80be7a243b17ff9768b379ec147ca4b Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 15:00:28 -0400 Subject: [PATCH 06/15] fix bugprone-unintended-char-ostream-output warnings --- examples/multi_processor/main.cc | 43 +++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/examples/multi_processor/main.cc b/examples/multi_processor/main.cc index 6fcdba50df..72070ba6bf 100644 --- a/examples/multi_processor/main.cc +++ b/examples/multi_processor/main.cc @@ -4,7 +4,6 @@ #include #include #include -#include #include #include @@ -65,6 +64,38 @@ void CleanupTracer() trace_sdk::Provider::SetTracerProvider(none); } +opentelemetry::nostd::string_view SpanKindToString(trace_api::SpanKind kind) +{ + switch (kind) + { + case trace_api::SpanKind::kInternal: + return "Internal"; + case trace_api::SpanKind::kServer: + return "Server"; + case trace_api::SpanKind::kClient: + return "Client"; + case trace_api::SpanKind::kProducer: + return "Producer"; + case trace_api::SpanKind::kConsumer: + return "Consumer"; + } + return "Unknown"; +} + +opentelemetry::nostd::string_view StatusCodeToString(trace_api::StatusCode code) +{ + switch (code) + { + case trace_api::StatusCode::kUnset: + return "Unset"; + case trace_api::StatusCode::kOk: + return "Ok"; + case trace_api::StatusCode::kError: + return "Error"; + } + return "Unknown"; +} + void dumpSpans(std::vector> &spans) { char span_buf[trace_api::SpanId::kSize * 2]; @@ -85,14 +116,8 @@ void dumpSpans(std::vector> &spans) << '\n'; std::cout << "\t\tDescription: " << span->GetDescription() << '\n'; - std::cout << "\t\tSpan kind:" - << static_cast::type>( - span->GetSpanKind()) - << '\n'; - std::cout << "\t\tSpan Status: " - << static_cast::type>( - span->GetStatus()) - << '\n'; + std::cout << "\t\tSpan kind: " << SpanKindToString(span->GetSpanKind()) << '\n'; + std::cout << "\t\tSpan Status: " << StatusCodeToString(span->GetStatus()) << '\n'; } } } // namespace From b986445997091d7a5f93d1ae5314ddbf558acb1b Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 15:02:24 -0400 Subject: [PATCH 07/15] fix performance-move-const-arg warnings --- .../opentelemetry/sdk/metrics/state/sync_metric_storage.h | 4 ++-- 1 file changed, 2 insertions(+), 2 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 c8d58bb7b2..d4194a4416 100644 --- a/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h +++ b/sdk/include/opentelemetry/sdk/metrics/state/sync_metric_storage.h @@ -122,7 +122,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage #ifdef OPENTELEMETRY_HAVE_METRICS_BOUND_INSTRUMENTS_PREVIEW // Resolve via the unified cardinality policy so unbound and bound paths // share one combined limit (see ResolveCardinality()). - MetricAttributes resolved = ResolveCardinality(std::move(attr)); + MetricAttributes resolved = ResolveCardinality(attr); // cppcheck-suppress accessMoved attributes_hashmap_->GetOrSetDefault(std::move(resolved), create_default_aggregation_) ->Aggregate(value); @@ -176,7 +176,7 @@ class SyncMetricStorage : public MetricStorage, public SyncWritableMetricStorage MetricAttributes attr{attributes, attributes_processor_.get()}; std::lock_guard guard(attribute_hashmap_lock_); #ifdef OPENTELEMETRY_HAVE_METRICS_BOUND_INSTRUMENTS_PREVIEW - MetricAttributes resolved = ResolveCardinality(std::move(attr)); + MetricAttributes resolved = ResolveCardinality(attr); // cppcheck-suppress accessMoved attributes_hashmap_->GetOrSetDefault(std::move(resolved), create_default_aggregation_) ->Aggregate(value); From 8d7bf6d22e9743465971dd84cab730546b2162be Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 15:10:12 -0400 Subject: [PATCH 08/15] fix abseil-string-find-startswith warning --- resource_detectors/test/service_detector_utils_test.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/resource_detectors/test/service_detector_utils_test.cc b/resource_detectors/test/service_detector_utils_test.cc index 8229f4410b..620cea0aa7 100644 --- a/resource_detectors/test/service_detector_utils_test.cc +++ b/resource_detectors/test/service_detector_utils_test.cc @@ -42,14 +42,15 @@ TEST(ServiceDetectorUtilsTest, GetServiceNameFallbackUsesUnknownServicePrefix) { unsetenv(kOtelServiceName); - const std::string service_name = detail::GetServiceName(); - if (service_name.rfind("unknown_service:", 0) == 0) + const std::string service_name = detail::GetServiceName(); + const std::string unknown_service_prefix = "unknown_service:"; + if (service_name.substr(0, unknown_service_prefix.size()) == unknown_service_prefix) { - EXPECT_GT(service_name.size(), std::string{"unknown_service:"}.size()); + EXPECT_GT(service_name.size(), unknown_service_prefix.size()); } else { - EXPECT_EQ(service_name, std::string{"unknown_service"}); + EXPECT_EQ(service_name, "unknown_service"); } } From 40723b908e89eebc9951eebe0a0918932971c414 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 15:10:40 -0400 Subject: [PATCH 09/15] fix misc-use-internal-linkage warning --- sdk/test/configuration/yaml_metrics_test.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/test/configuration/yaml_metrics_test.cc b/sdk/test/configuration/yaml_metrics_test.cc index 5fe3f0bd74..9ee82d7478 100644 --- a/sdk/test/configuration/yaml_metrics_test.cc +++ b/sdk/test/configuration/yaml_metrics_test.cc @@ -1406,8 +1406,11 @@ file_format: "1.0-metrics" ASSERT_EQ(view->stream->attribute_keys->excluded->string_array[1], "bar.ex"); } +namespace +{ class YamlMetricsEmptyIncluded : public ::testing::TestWithParam {}; +} // namespace TEST_P(YamlMetricsEmptyIncluded, RetainsAllAttributes) { From b346f03ddba7df990ab06fa9ea0aa1b8965560de Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 15:24:16 -0400 Subject: [PATCH 10/15] fix cppcoreguidelines-macro-to-enum warnings --- api/include/opentelemetry/version.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/include/opentelemetry/version.h b/api/include/opentelemetry/version.h index 6e05c89eb0..f05594328f 100644 --- a/api/include/opentelemetry/version.h +++ b/api/include/opentelemetry/version.h @@ -34,6 +34,9 @@ // Experimental: bound synchronous metric instruments (Counter, Histogram). // This public API is available only in ABI v2 preview builds. Guard bound // instrument code with OPENTELEMETRY_HAVE_METRICS_BOUND_INSTRUMENTS_PREVIEW. + +// NOLINTBEGIN(cppcoreguidelines-macro-to-enum) #if OPENTELEMETRY_ABI_VERSION_NO >= 2 && defined(ENABLE_METRICS_BOUND_INSTRUMENTS_PREVIEW) # define OPENTELEMETRY_HAVE_METRICS_BOUND_INSTRUMENTS_PREVIEW 1 #endif +// NOLINTEND(cppcoreguidelines-macro-to-enum) From 5306e9e0709d60e71eaad82be078c361aad77a6d Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 15:24:56 -0400 Subject: [PATCH 11/15] fix cppcoreguidelines-use-enum-class warnings --- api/include/opentelemetry/common/attribute_value.h | 4 ++-- ext/include/opentelemetry/ext/http/server/http_server.h | 2 +- ext/include/opentelemetry/ext/http/server/socket_tools.h | 6 +++--- functional/otlp/func_http_main.cc | 2 +- sdk/include/opentelemetry/sdk/common/attribute_utils.h | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/api/include/opentelemetry/common/attribute_value.h b/api/include/opentelemetry/common/attribute_value.h index a00c18720e..d4e2bd9c6e 100644 --- a/api/include/opentelemetry/common/attribute_value.h +++ b/api/include/opentelemetry/common/attribute_value.h @@ -58,9 +58,9 @@ using AttributeValue = nostd::span>; #if OPENTELEMETRY_ABI_VERSION_NO >= 2 -enum AttributeType : std::uint8_t +enum class AttributeType : std::uint8_t #else -enum AttributeType // NOLINT(performance-enum-size) +enum AttributeType // NOLINT(performance-enum-size,cppcoreguidelines-use-enum-class) #endif { kTypeBool, diff --git a/ext/include/opentelemetry/ext/http/server/http_server.h b/ext/include/opentelemetry/ext/http/server/http_server.h index a69f1fdd87..9b5e5d8a96 100644 --- a/ext/include/opentelemetry/ext/http/server/http_server.h +++ b/ext/include/opentelemetry/ext/http/server/http_server.h @@ -101,7 +101,7 @@ class HttpServer : private SocketTools::Reactor::SocketCallback SocketTools::Socket socket; std::string receiveBuffer; std::string sendBuffer; - enum : std::uint8_t + enum : std::uint8_t // NOLINT(cppcoreguidelines-use-enum-class) { Idle, ReceivingHeaders, diff --git a/ext/include/opentelemetry/ext/http/server/socket_tools.h b/ext/include/opentelemetry/ext/http/server/socket_tools.h index fd9d9383de..abfd2951a9 100644 --- a/ext/include/opentelemetry/ext/http/server/socket_tools.h +++ b/ext/include/opentelemetry/ext/http/server/socket_tools.h @@ -465,7 +465,7 @@ struct Socket #endif } - enum // NOLINT(performance-enum-size) + enum // NOLINT(performance-enum-size,cppcoreguidelines-use-enum-class) { #ifdef _WIN32 ErrorWouldBlock = WSAEWOULDBLOCK @@ -474,7 +474,7 @@ struct Socket #endif }; - enum // NOLINT(performance-enum-size) + enum // NOLINT(performance-enum-size,cppcoreguidelines-use-enum-class) { #ifdef _WIN32 ShutdownReceive = SD_RECEIVE, @@ -527,7 +527,7 @@ struct Reactor : protected common::Thread /// /// Socket State /// - enum State : std::uint8_t + enum State : std::uint8_t // NOLINT(cppcoreguidelines-use-enum-class) { Readable = 1, Writable = 2, diff --git a/functional/otlp/func_http_main.cc b/functional/otlp/func_http_main.cc index 70d4bdbfac..67642a9895 100644 --- a/functional/otlp/func_http_main.cc +++ b/functional/otlp/func_http_main.cc @@ -40,7 +40,7 @@ const int TEST_FAILED = 1; namespace { -enum test_mode : std::uint8_t +enum test_mode : std::uint8_t // NOLINT(cppcoreguidelines-use-enum-class) { MODE_NONE, MODE_HTTP, diff --git a/sdk/include/opentelemetry/sdk/common/attribute_utils.h b/sdk/include/opentelemetry/sdk/common/attribute_utils.h index 0a913b3339..d2cc96dc65 100644 --- a/sdk/include/opentelemetry/sdk/common/attribute_utils.h +++ b/sdk/include/opentelemetry/sdk/common/attribute_utils.h @@ -57,7 +57,7 @@ using OwnedAttributeValue = nostd::variant, std::vector>; -enum OwnedAttributeType : std::uint8_t +enum class OwnedAttributeType : std::uint8_t { kTypeBool, kTypeInt, From f118e24a53993400005d738725a99c0dce01eea6 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 15:36:23 -0400 Subject: [PATCH 12/15] update warning count --- .github/workflows/clang-tidy.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/clang-tidy.yaml b/.github/workflows/clang-tidy.yaml index d0f3955af4..79d9f8dae6 100644 --- a/.github/workflows/clang-tidy.yaml +++ b/.github/workflows/clang-tidy.yaml @@ -17,9 +17,9 @@ jobs: matrix: include: - cmake_options: all-options-abiv1-preview - warning_limit: 113 + warning_limit: 83 - cmake_options: all-options-abiv2-preview - warning_limit: 124 + warning_limit: 86 env: CC: /usr/bin/clang-22 CXX: /usr/bin/clang++-22 From d7afcdeaf9ed0f00ccee1f0a0c7b8808287a8caa Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Thu, 27 Aug 2026 16:43:21 -0400 Subject: [PATCH 13/15] fix experimental grpc method handling on old verions --- .../otlp/test/otlp_grpc_exporter_test.cc | 16 +++++++----- .../otlp_grpc_log_record_exporter_test.cc | 26 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/exporters/otlp/test/otlp_grpc_exporter_test.cc b/exporters/otlp/test/otlp_grpc_exporter_test.cc index f2989e1870..b0120f55cb 100644 --- a/exporters/otlp/test/otlp_grpc_exporter_test.cc +++ b/exporters/otlp/test/otlp_grpc_exporter_test.cc @@ -56,6 +56,12 @@ using opentelemetry::sdk::common::setenv; using opentelemetry::sdk::common::unsetenv; # endif +# if defined(GRPC_CPP_VERSION_MAJOR) && \ + (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 || \ + defined(GRPC_CALLBACK_API_NONEXPERIMENTAL) +# define OTELCPP_GRPC_ASYNC_API_IS_STABLE +# endif + using namespace testing; OPENTELEMETRY_BEGIN_NAMESPACE @@ -70,8 +76,7 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe { public: // Some old toolchains can only use gRPC 1.33 and it's experimental. -# if defined(GRPC_CPP_VERSION_MAJOR) && \ - (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 +# if defined(OTELCPP_GRPC_ASYNC_API_IS_STABLE) using async_interface_base = proto::collector::trace::v1::TraceService::StubInterface::async_interface; # else @@ -104,9 +109,7 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe } // Some old toolchains can only use gRPC 1.33 and it's experimental. -# if defined(GRPC_CPP_VERSION_MAJOR) && \ - (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 || \ - defined(GRPC_CALLBACK_API_NONEXPERIMENTAL) +# if defined(OTELCPP_GRPC_ASYNC_API_IS_STABLE) void Export( ::grpc::ClientContext * /*context*/, const ::opentelemetry::proto::collector::trace::v1::ExportTraceServiceRequest * /*request*/, @@ -126,8 +129,7 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe OtlpMockTraceServiceStub *stub_; }; -# if defined(GRPC_CPP_VERSION_MAJOR) && \ - (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 +# if defined(OTELCPP_GRPC_ASYNC_API_IS_STABLE) async_interface_base *async() override { return &async_interface_; } # else async_interface_base *experimental_async() override { return &async_interface_; } diff --git a/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc b/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc index 11261ddaf6..f565777e9e 100644 --- a/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc +++ b/exporters/otlp/test/otlp_grpc_log_record_exporter_test.cc @@ -67,6 +67,12 @@ using opentelemetry::sdk::common::setenv; using opentelemetry::sdk::common::unsetenv; #endif +#if defined(GRPC_CPP_VERSION_MAJOR) && \ + (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 || \ + defined(GRPC_CALLBACK_API_NONEXPERIMENTAL) +# define OTELCPP_GRPC_ASYNC_API_IS_STABLE +#endif + using namespace testing; OPENTELEMETRY_BEGIN_NAMESPACE @@ -80,8 +86,7 @@ namespace class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceServiceStub { public: -#if defined(GRPC_CPP_VERSION_MAJOR) && \ - (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 +#if defined(OTELCPP_GRPC_ASYNC_API_IS_STABLE) using async_interface_base = proto::collector::trace::v1::TraceService::StubInterface::async_interface; #else @@ -106,9 +111,7 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe callback(stub_->last_async_status_); } -#if defined(GRPC_CPP_VERSION_MAJOR) && \ - (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 || \ - defined(GRPC_CALLBACK_API_NONEXPERIMENTAL) +#if defined(OTELCPP_GRPC_ASYNC_API_IS_STABLE) void Export( ::grpc::ClientContext * /*context*/, const ::opentelemetry::proto::collector::trace::v1::ExportTraceServiceRequest * /*request*/, @@ -128,8 +131,7 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe OtlpMockTraceServiceStub *stub_; }; -#if defined(GRPC_CPP_VERSION_MAJOR) && \ - (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 +#if defined(OTELCPP_GRPC_ASYNC_API_IS_STABLE) async_interface_base *async() override { return &async_interface_; } #else async_interface_base *experimental_async() override { return &async_interface_; } @@ -145,8 +147,7 @@ class OtlpMockTraceServiceStub : public proto::collector::trace::v1::MockTraceSe class OtlpMockLogsServiceStub : public proto::collector::logs::v1::MockLogsServiceStub { public: -#if defined(GRPC_CPP_VERSION_MAJOR) && \ - (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 +#if defined(OTELCPP_GRPC_ASYNC_API_IS_STABLE) using async_interface_base = proto::collector::logs::v1::LogsService::StubInterface::async_interface; #else @@ -171,9 +172,7 @@ class OtlpMockLogsServiceStub : public proto::collector::logs::v1::MockLogsServi callback(stub_->last_async_status_); } -#if defined(GRPC_CPP_VERSION_MAJOR) && \ - (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 || \ - defined(GRPC_CALLBACK_API_NONEXPERIMENTAL) +#if defined(OTELCPP_GRPC_ASYNC_API_IS_STABLE) void Export( ::grpc::ClientContext * /*context*/, const ::opentelemetry::proto::collector::logs::v1::ExportLogsServiceRequest * /*request*/, @@ -193,8 +192,7 @@ class OtlpMockLogsServiceStub : public proto::collector::logs::v1::MockLogsServi OtlpMockLogsServiceStub *stub_; }; -#if defined(GRPC_CPP_VERSION_MAJOR) && \ - (GRPC_CPP_VERSION_MAJOR * 1000 + GRPC_CPP_VERSION_MINOR) >= 1039 +#if defined(OTELCPP_GRPC_ASYNC_API_IS_STABLE) async_interface_base *async() override { return &async_interface_; } #else async_interface_base *experimental_async() override { return &async_interface_; } From 45f4d4e2948f13a95d98a1852c5d43029e426f52 Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Fri, 28 Aug 2026 07:49:41 -0400 Subject: [PATCH 14/15] use an unscoped enum for attribute type indices --- api/include/opentelemetry/common/attribute_value.h | 2 +- sdk/include/opentelemetry/sdk/common/attribute_utils.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/include/opentelemetry/common/attribute_value.h b/api/include/opentelemetry/common/attribute_value.h index d4e2bd9c6e..f89e212d93 100644 --- a/api/include/opentelemetry/common/attribute_value.h +++ b/api/include/opentelemetry/common/attribute_value.h @@ -58,7 +58,7 @@ using AttributeValue = nostd::span>; #if OPENTELEMETRY_ABI_VERSION_NO >= 2 -enum class AttributeType : std::uint8_t +enum AttributeType : std::uint8_t // NOLINT(cppcoreguidelines-use-enum-class) #else enum AttributeType // NOLINT(performance-enum-size,cppcoreguidelines-use-enum-class) #endif diff --git a/sdk/include/opentelemetry/sdk/common/attribute_utils.h b/sdk/include/opentelemetry/sdk/common/attribute_utils.h index d2cc96dc65..631d4e9a14 100644 --- a/sdk/include/opentelemetry/sdk/common/attribute_utils.h +++ b/sdk/include/opentelemetry/sdk/common/attribute_utils.h @@ -57,7 +57,7 @@ using OwnedAttributeValue = nostd::variant, std::vector>; -enum class OwnedAttributeType : std::uint8_t +enum OwnedAttributeType : std::uint8_t // NOLINT(cppcoreguidelines-use-enum-class) { kTypeBool, kTypeInt, From b311ee6f08ac87b4c324a68e4205529a5f22969c Mon Sep 17 00:00:00 2001 From: Douglas Barker Date: Fri, 28 Aug 2026 07:51:43 -0400 Subject: [PATCH 15/15] add changelog entry --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c080a79c..8ea9bc6413 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,9 @@ Increment the: * [CONFIGURATION/BUILD] Add resource detector targets and README [#4430](https://github.com/open-telemetry/opentelemetry-cpp/pull/4430) +* [CODE HEALTH] Resolve multiple clang tidy warnings + [#4492](https://github.com/open-telemetry/opentelemetry-cpp/pull/4492) + * [SDK] `OTELResourceDetector` now percent-decodes values parsed from the `OTEL_RESOURCE_ATTRIBUTES` environment variable, per the W3C Baggage value grammar the resource spec defers to. A malformed escape sequence is left