From 45d4c96213703019c02f419d6952e333bfc4528b Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 11 Jun 2026 11:44:58 +1000 Subject: [PATCH 1/5] remove performance cop disablement --- api/.rubocop.yml | 2 -- common/.rubocop.yml | 2 -- exporter/otlp-http/.rubocop.yml | 4 ---- exporter/otlp-logs/.rubocop.yml | 4 ---- exporter/otlp-metrics/.rubocop.yml | 4 ---- exporter/otlp/.rubocop.yml | 4 ---- metrics_sdk/.rubocop.yml | 2 -- 7 files changed, 22 deletions(-) diff --git a/api/.rubocop.yml b/api/.rubocop.yml index c1ecf94c7..c5aeccbe6 100644 --- a/api/.rubocop.yml +++ b/api/.rubocop.yml @@ -10,8 +10,6 @@ Minitest/AssertPredicate: Enabled: false Minitest/RefutePredicate: Enabled: false -Performance/MethodObjectAsBlock: - Enabled: false Style/BitwisePredicate: Enabled: false Style/EmptyClassDefinition: diff --git a/common/.rubocop.yml b/common/.rubocop.yml index 25da94a3a..5610987c1 100644 --- a/common/.rubocop.yml +++ b/common/.rubocop.yml @@ -8,5 +8,3 @@ Minitest/AssertPredicate: Enabled: false Minitest/RefutePredicate: Enabled: false -Performance/MethodObjectAsBlock: - Enabled: false diff --git a/exporter/otlp-http/.rubocop.yml b/exporter/otlp-http/.rubocop.yml index 852c87033..f95a3d9e0 100644 --- a/exporter/otlp-http/.rubocop.yml +++ b/exporter/otlp-http/.rubocop.yml @@ -13,7 +13,3 @@ Lint/DuplicateBranch: Enabled: false Lint/SuppressedExceptionInNumberConversion: Enabled: false -Performance/MapCompact: - Enabled: false -Performance/MethodObjectAsBlock: - Enabled: false diff --git a/exporter/otlp-logs/.rubocop.yml b/exporter/otlp-logs/.rubocop.yml index 9be779e65..55f01683d 100644 --- a/exporter/otlp-logs/.rubocop.yml +++ b/exporter/otlp-logs/.rubocop.yml @@ -10,7 +10,3 @@ Lint/DuplicateBranch: Enabled: false Lint/SuppressedExceptionInNumberConversion: Enabled: false -Performance/MapCompact: - Enabled: false -Performance/MethodObjectAsBlock: - Enabled: false diff --git a/exporter/otlp-metrics/.rubocop.yml b/exporter/otlp-metrics/.rubocop.yml index da47afdef..988de8694 100644 --- a/exporter/otlp-metrics/.rubocop.yml +++ b/exporter/otlp-metrics/.rubocop.yml @@ -17,7 +17,3 @@ Lint/DuplicateBranch: Enabled: false Lint/SuppressedExceptionInNumberConversion: Enabled: false -Performance/MapCompact: - Enabled: false -Performance/MethodObjectAsBlock: - Enabled: false diff --git a/exporter/otlp/.rubocop.yml b/exporter/otlp/.rubocop.yml index 6bda33fa6..1dc90c155 100644 --- a/exporter/otlp/.rubocop.yml +++ b/exporter/otlp/.rubocop.yml @@ -9,9 +9,5 @@ Lint/DuplicateBranch: Enabled: false Lint/SuppressedExceptionInNumberConversion: Enabled: false -Performance/MapCompact: - Enabled: false -Performance/MethodObjectAsBlock: - Enabled: false Style/ObjectThen: Enabled: false diff --git a/metrics_sdk/.rubocop.yml b/metrics_sdk/.rubocop.yml index cb3ec2d26..8d512e0a7 100644 --- a/metrics_sdk/.rubocop.yml +++ b/metrics_sdk/.rubocop.yml @@ -16,8 +16,6 @@ Naming/BlockForwarding: Enabled: false Naming/PredicateMethod: Enabled: false -Performance/CollectionLiteralInLoop: - Enabled: false Style/ArgumentsForwarding: Enabled: false Style/CollectionQuerying: From cfdccc3b0e95ffa63662cef5c8100549405e5bab Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 11 Jun 2026 12:42:24 +1000 Subject: [PATCH 2/5] Address violations --- .../baggage/propagation/text_map_propagator.rb | 2 +- .../context/propagation/rack_env_getter.rb | 2 +- .../common/propagation/rack_env_getter.rb | 2 +- .../exporter/otlp/http/trace_exporter.rb | 11 ++++++----- .../opentelemetry/exporter/otlp/logs/logs_exporter.rb | 11 ++++++----- .../lib/opentelemetry/exporter/otlp/metrics/util.rb | 11 ++++++----- .../otlp/lib/opentelemetry/exporter/otlp/exporter.rb | 11 ++++++----- .../exponential_bucket_histogram_test.rb | 6 ++++-- .../exponential_histogram/logarithm_mapping_test.rb | 7 +++++-- 9 files changed, 36 insertions(+), 27 deletions(-) diff --git a/api/lib/opentelemetry/baggage/propagation/text_map_propagator.rb b/api/lib/opentelemetry/baggage/propagation/text_map_propagator.rb index fde67fff0..ddf7c3345 100644 --- a/api/lib/opentelemetry/baggage/propagation/text_map_propagator.rb +++ b/api/lib/opentelemetry/baggage/propagation/text_map_propagator.rb @@ -63,7 +63,7 @@ def extract(carrier, context: Context.current, getter: Context::Propagation.text # the W3C spec where it's referred to as properties. We preserve # the properties (as-is) so that they can be propagated elsewhere. kv, meta = entry.split(';', 2) - k, v = kv.split('=').map!(&URI.method(:decode_uri_component)) + k, v = kv.split('=').map! { |part| URI.decode_uri_component(part) } builder.set_value(k, v, metadata: meta) end end diff --git a/api/lib/opentelemetry/context/propagation/rack_env_getter.rb b/api/lib/opentelemetry/context/propagation/rack_env_getter.rb index 8b601dfc3..4c1b69683 100644 --- a/api/lib/opentelemetry/context/propagation/rack_env_getter.rb +++ b/api/lib/opentelemetry/context/propagation/rack_env_getter.rb @@ -26,7 +26,7 @@ def get(carrier, key) # form to the original. The resulting keys will be lowercase and # underscores will be replaced with dashes. def keys(carrier) - carrier.keys.map(&method(:from_rack_key)) + carrier.keys.map { |k| from_rack_key(k) } end private diff --git a/common/lib/opentelemetry/common/propagation/rack_env_getter.rb b/common/lib/opentelemetry/common/propagation/rack_env_getter.rb index 7c97082e8..63eb44a8d 100644 --- a/common/lib/opentelemetry/common/propagation/rack_env_getter.rb +++ b/common/lib/opentelemetry/common/propagation/rack_env_getter.rb @@ -23,7 +23,7 @@ def get(carrier, key) # form to the original. The resulting keys will be lowercase and # underscores will be replaced with dashes. def keys(carrier) - carrier.keys.map(&method(:from_rack_key)) + carrier.keys.map { |k| from_rack_key(k) } end private diff --git a/exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/trace_exporter.rb b/exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/trace_exporter.rb index 8876f0c4e..13badb6b9 100644 --- a/exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/trace_exporter.rb +++ b/exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/trace_exporter.rb @@ -207,10 +207,11 @@ def handle_redirect(location) def log_status(body) status = Google::Rpc::Status.decode(body) - details = status.details.map do |detail| - klass_or_nil = ::Google::Protobuf::DescriptorPool.generated_pool.lookup(detail.type_name).msgclass - detail.unpack(klass_or_nil) if klass_or_nil - end.compact + pool = ::Google::Protobuf::DescriptorPool.generated_pool + details = status.details.filter_map do |detail| + klass = pool.generated_pool.lookup(detail.type_name).msgclass + detail.unpack(klass) if klass + end OpenTelemetry.handle_error(message: "OTLP exporter received rpc.Status{message=#{status.message}, details=#{details}}") rescue StandardError => e OpenTelemetry.handle_error(exception: e, message: 'unexpected error decoding rpc.Status in OTLP::Exporter#log_status') @@ -279,7 +280,7 @@ def parse_headers(raw) raise ArgumentError, ERROR_MESSAGE_INVALID_HEADERS if entries.empty? entries.each_with_object({}) do |entry, headers| - k, v = entry.split('=', 2).map(&URI.method(:decode_uri_component)) + k, v = entry.split('=', 2).map { |part| URI.decode_uri_component(part) } begin k = k.to_s.strip v = v.to_s.strip diff --git a/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb b/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb index f8c177150..4a22b07f4 100644 --- a/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb +++ b/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb @@ -236,10 +236,11 @@ def handle_redirect(location) def log_status(body) status = Google::Rpc::Status.decode(body) - details = status.details.map do |detail| - klass_or_nil = ::Google::Protobuf::DescriptorPool.generated_pool.lookup(detail.type_name).msgclass - detail.unpack(klass_or_nil) if klass_or_nil - end.compact + pool = ::Google::Protobuf::DescriptorPool.generated_pool + details = status.details.filter_map do |detail| + klass = pool.generated_pool.lookup(detail.type_name).msgclass + detail.unpack(klass) if klass + end OpenTelemetry.handle_error(message: "OTLP logs exporter received rpc.Status{message=#{status.message}, details=#{details}}") rescue StandardError => e OpenTelemetry.handle_error(exception: e, message: 'unexpected error decoding rpc.Status in OTLP::Exporter#log_status') @@ -363,7 +364,7 @@ def parse_headers(raw) raise ArgumentError, ERROR_MESSAGE_INVALID_HEADERS if entries.empty? entries.each_with_object({}) do |entry, headers| - k, v = entry.split('=', 2).map(&URI.method(:decode_uri_component)) + k, v = entry.split('=', 2).map { |parts| URI.decode_uri_component parts } begin k = k.to_s.strip v = v.to_s.strip diff --git a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb index efcbc6ff8..743f70a43 100644 --- a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb +++ b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb @@ -74,7 +74,7 @@ def parse_headers(raw) raise ArgumentError, ERROR_MESSAGE_INVALID_HEADERS if entries.empty? entries.each_with_object({}) do |entry, headers| - k, v = entry.split('=', 2).map(&URI.method(:decode_uri_component)) + k, v = entry.split('=', 2).map { |parts| URI.decode_uri_component parts } begin k = k.to_s.strip v = v.to_s.strip @@ -116,11 +116,12 @@ def backoff?(retry_count:, reason:, retry_after: nil) def log_status(body) status = Google::Rpc::Status.decode(body) - details = status.details.map do |detail| + pool = ::Google::Protobuf::DescriptorPool.generated_pool + details = status.details.filter_map do |detail| type_name = detail.type_url.to_s.split('/').last.to_s - klass_or_nil = ::Google::Protobuf::DescriptorPool.generated_pool.lookup(type_name)&.msgclass - detail.unpack(klass_or_nil) if klass_or_nil - end.compact + klass = pool.generated_pool.lookup(type_name)&.msgclass + detail.unpack(klass) if klass + end OpenTelemetry.handle_error(message: "OTLP metrics_exporter received rpc.Status{message=#{status.message}, details=#{details}}") rescue StandardError => e OpenTelemetry.handle_error(exception: e, message: 'unexpected error decoding rpc.Status in OTLP::MetricsExporter#log_status') diff --git a/exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb b/exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb index 30655f901..88527105a 100644 --- a/exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb +++ b/exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb @@ -241,10 +241,11 @@ def handle_redirect(location) def log_status(body) status = Google::Rpc::Status.decode(body) - details = status.details.map do |detail| - klass_or_nil = ::Google::Protobuf::DescriptorPool.generated_pool.lookup(detail.type_name).msgclass - detail.unpack(klass_or_nil) if klass_or_nil - end.compact + pool = ::Google::Protobuf::DescriptorPool.generated_pool + details = status.details.filter_map do |detail| + klass = pool.lookup(detail.type_name).msgclass + detail.unpack(klass) if klass + end OpenTelemetry.handle_error(message: "OTLP exporter received rpc.Status{message=#{status.message}, details=#{details}} for uri=#{@uri}") rescue StandardError => e OpenTelemetry.handle_error(exception: e, message: 'unexpected error decoding rpc.Status in OTLP::Exporter#log_status') @@ -450,7 +451,7 @@ def parse_headers(raw) raise ArgumentError, ERROR_MESSAGE_INVALID_HEADERS if entries.empty? entries.each_with_object({}) do |entry, headers| - k, v = entry.split('=', 2).map(&URI.method(:decode_uri_component)) + k, v = entry.split('=', 2).map { |part| URI.decode_uri_component(part) } begin k = k.to_s.strip v = v.to_s.strip diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/exponential_bucket_histogram_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/exponential_bucket_histogram_test.rb index b99ea5d80..018db4176 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/exponential_bucket_histogram_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/exponential_bucket_histogram_test.rb @@ -276,9 +276,11 @@ def ascending_sequence_test(max_size, offset, init_scale) end it 'test_ascending_sequence' do - [3, 4, 6, 9].each do |max_size| + MAX_SIZES = [3, 4, 6, 9] + INIT_SCALES = [0, 4] + MAX_SIZES.each do |max_size| (-5..5).each do |offset| - [0, 4].each do |init_scale| + INIT_SCALES.each do |init_scale| ascending_sequence_test(max_size, offset, init_scale) end end diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/logarithm_mapping_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/logarithm_mapping_test.rb index ebf118ff4..3b4392c71 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/logarithm_mapping_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/logarithm_mapping_test.rb @@ -42,10 +42,13 @@ end it 'test_logarithm_boundary' do - [1, 2, 3, 4, 10, 15].each do |scale| + SCALES = [1, 2, 3, 4, 10, 15].freeze + INDS_VALUES = [-100, -10, -1, 0, 1, 10, 100].freeze + + SCALES.each do |scale| logarithm_mapping = OpenTelemetry::SDK::Metrics::Aggregation::ExponentialHistogram::LogarithmMapping.new(scale) - [-100, -10, -1, 0, 1, 10, 100].each do |inds| + INDS_VALUES.each do |inds| lower_boundary = logarithm_mapping.get_lower_boundary(inds) mapped_index = logarithm_mapping.map_to_index(lower_boundary) From c34f115a620d9758340145176b6327062e69dcd2 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Thu, 11 Jun 2026 12:50:58 +1000 Subject: [PATCH 3/5] fixes --- .../lib/opentelemetry/exporter/otlp/http/trace_exporter.rb | 2 +- .../lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb | 2 +- .../lib/opentelemetry/exporter/otlp/metrics/util.rb | 2 +- .../exponential_bucket_histogram_test.rb | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/trace_exporter.rb b/exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/trace_exporter.rb index 13badb6b9..a5acfa305 100644 --- a/exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/trace_exporter.rb +++ b/exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/trace_exporter.rb @@ -209,7 +209,7 @@ def log_status(body) status = Google::Rpc::Status.decode(body) pool = ::Google::Protobuf::DescriptorPool.generated_pool details = status.details.filter_map do |detail| - klass = pool.generated_pool.lookup(detail.type_name).msgclass + klass = pool.lookup(detail.type_name).msgclass detail.unpack(klass) if klass end OpenTelemetry.handle_error(message: "OTLP exporter received rpc.Status{message=#{status.message}, details=#{details}}") diff --git a/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb b/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb index 4a22b07f4..986a40c47 100644 --- a/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb +++ b/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb @@ -238,7 +238,7 @@ def log_status(body) status = Google::Rpc::Status.decode(body) pool = ::Google::Protobuf::DescriptorPool.generated_pool details = status.details.filter_map do |detail| - klass = pool.generated_pool.lookup(detail.type_name).msgclass + klass = pool.lookup(detail.type_name).msgclass detail.unpack(klass) if klass end OpenTelemetry.handle_error(message: "OTLP logs exporter received rpc.Status{message=#{status.message}, details=#{details}}") diff --git a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb index 743f70a43..8851d13e8 100644 --- a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb +++ b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb @@ -119,7 +119,7 @@ def log_status(body) pool = ::Google::Protobuf::DescriptorPool.generated_pool details = status.details.filter_map do |detail| type_name = detail.type_url.to_s.split('/').last.to_s - klass = pool.generated_pool.lookup(type_name)&.msgclass + klass = pool.lookup(type_name)&.msgclass detail.unpack(klass) if klass end OpenTelemetry.handle_error(message: "OTLP metrics_exporter received rpc.Status{message=#{status.message}, details=#{details}}") diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/exponential_bucket_histogram_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/exponential_bucket_histogram_test.rb index 018db4176..7818aeb98 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/exponential_bucket_histogram_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/aggregation/exponential_histogram/exponential_bucket_histogram_test.rb @@ -276,8 +276,8 @@ def ascending_sequence_test(max_size, offset, init_scale) end it 'test_ascending_sequence' do - MAX_SIZES = [3, 4, 6, 9] - INIT_SCALES = [0, 4] + MAX_SIZES = [3, 4, 6, 9].freeze + INIT_SCALES = [0, 4].freeze MAX_SIZES.each do |max_size| (-5..5).each do |offset| INIT_SCALES.each do |init_scale| From 94a4be050c59217a0171b88fcfb8579d31e688cd Mon Sep 17 00:00:00 2001 From: James Thompson Date: Fri, 12 Jun 2026 23:57:02 +1000 Subject: [PATCH 4/5] Update logs_exporter.rb --- .../lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb b/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb index 986a40c47..5107d49c8 100644 --- a/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb +++ b/exporter/otlp-logs/lib/opentelemetry/exporter/otlp/logs/logs_exporter.rb @@ -364,7 +364,7 @@ def parse_headers(raw) raise ArgumentError, ERROR_MESSAGE_INVALID_HEADERS if entries.empty? entries.each_with_object({}) do |entry, headers| - k, v = entry.split('=', 2).map { |parts| URI.decode_uri_component parts } + k, v = entry.split('=', 2).map { |part| URI.decode_uri_component part } begin k = k.to_s.strip v = v.to_s.strip From 64d2e9206e4aa293cde33a04e37dc94371c406f2 Mon Sep 17 00:00:00 2001 From: James Thompson Date: Fri, 12 Jun 2026 23:57:52 +1000 Subject: [PATCH 5/5] Update util.rb --- .../lib/opentelemetry/exporter/otlp/metrics/util.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb index 8851d13e8..d8c1f0276 100644 --- a/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb +++ b/exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb @@ -74,7 +74,7 @@ def parse_headers(raw) raise ArgumentError, ERROR_MESSAGE_INVALID_HEADERS if entries.empty? entries.each_with_object({}) do |entry, headers| - k, v = entry.split('=', 2).map { |parts| URI.decode_uri_component parts } + k, v = entry.split('=', 2).map { |part| URI.decode_uri_component part } begin k = k.to_s.strip v = v.to_s.strip