opentelemetry-propagator-jaeger 0.25.1 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 717594e7126f585dbf8820c1fb057b1af00102e75af09314758190d7a8063a16
4
- data.tar.gz: cda00e0cdbda813cc913f6fb0eaa9ea0c4d898ebf964860e79a276de281cd951
3
+ metadata.gz: 0c9797fc20399bbc7314cbdf397822443b340f929995d4dee351c95a1d6fcbae
4
+ data.tar.gz: 924be198477b03252c17bfa987804d9ebc57786878ba54f055ef5785fb91239a
5
5
  SHA512:
6
- metadata.gz: fa6391bca2f3af7657e2f5f88821d6bd2004a3a07ffcb7259e0e44ace0d3090570e53f39f8fdac5d3320ecf0888f7b0a38e9221afefeea2ed215a725bd45e9d2
7
- data.tar.gz: e26597ec7f56885749ebf3bb99db74489bd567ed0e08a0571fad7426b93f798af17a50546a67c313ed092e85d351e87c102a02f8c70f135f975ddb01abb73300
6
+ metadata.gz: c283c3371e5fba81c0ec21d124b637121fa66a8ed8307adc788ffd3746191d976831c982331e637c7dee4b008a58736c7b401ac49ee4ab2b231a48f0703d75e6
7
+ data.tar.gz: c42a65b3ca93b3cd1ec3a15fd664e3e2c99e905b4f954328b97fc515bdc13d899599b0e2e58a2b98250d12a159fe4cbf3bf5ddcd65eb8e7cc442a85c252a4036
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Release History: opentelemetry-propagator-jaeger
2
2
 
3
+ ### v0.25.2 / 2026-09-15
4
+
5
+ * FIXED: Enforce baggage limits on the Jaeger extract path (#2299)
6
+
3
7
  ### v0.25.1 / 2026-07-08
4
8
 
5
9
  * DOCS: Update source for gemspec links to RubyDoc (#2123)
@@ -26,10 +26,14 @@ module OpenTelemetry
26
26
  FIELDS = [IDENTITY_KEY].freeze
27
27
  TRACE_SPAN_IDENTITY_REGEX = /\A(?<trace_id>(?:[0-9a-f]){1,32}):(?<span_id>(?:[0-9a-f]){1,16}):(?:[0-9a-f]){1,16}:(?<sampling_flags>[0-9a-f]{1,2})\z/
28
28
  ZERO_ID_REGEX = /^0+$/
29
+ BAGGAGE_KEY_PREFIX = 'uberctx-'
30
+ MAX_BAGGAGE_ENTRIES = 180
31
+ MAX_BAGGAGE_ENTRY_BYTES = 4096
32
+ MAX_BAGGAGE_TOTAL_BYTES = 8192
29
33
 
30
- private_constant \
31
- :IDENTITY_KEY, :DEFAULT_FLAG_BIT, :SAMPLED_FLAG_BIT, :DEBUG_FLAG_BIT,
32
- :FIELDS, :TRACE_SPAN_IDENTITY_REGEX, :ZERO_ID_REGEX
34
+ private_constant :IDENTITY_KEY, :DEFAULT_FLAG_BIT, :SAMPLED_FLAG_BIT, :DEBUG_FLAG_BIT, :FIELDS,
35
+ :TRACE_SPAN_IDENTITY_REGEX, :ZERO_ID_REGEX, :BAGGAGE_KEY_PREFIX,
36
+ :MAX_BAGGAGE_ENTRIES, :MAX_BAGGAGE_ENTRY_BYTES, :MAX_BAGGAGE_TOTAL_BYTES
33
37
 
34
38
  # Extract trace context from the supplied carrier.
35
39
  # If extraction fails, the original context will be returned
@@ -73,11 +77,7 @@ module OpenTelemetry
73
77
  span_context.hex_trace_id, span_context.hex_span_id, '0', flags
74
78
  ].join(':')
75
79
  setter.set(carrier, IDENTITY_KEY, trace_span_identity_value)
76
- OpenTelemetry::Baggage.values(context: context).each do |key, value|
77
- baggage_key = "uberctx-#{key}"
78
- encoded_value = URI.encode_uri_component(value)
79
- setter.set(carrier, baggage_key, encoded_value)
80
- end
80
+ inject_baggage(carrier, context, setter)
81
81
  carrier
82
82
  end
83
83
 
@@ -102,20 +102,49 @@ module OpenTelemetry
102
102
  OpenTelemetry::Trace.non_recording_span(span_context)
103
103
  end
104
104
 
105
+ def inject_baggage(carrier, context, setter)
106
+ count = 0
107
+ total_bytes = 0
108
+ OpenTelemetry::Baggage.values(context: context).each do |key, value|
109
+ break unless count < MAX_BAGGAGE_ENTRIES
110
+
111
+ encoded_value = URI.encode_uri_component(value)
112
+ entry_bytes = key.to_s.bytesize + encoded_value.bytesize
113
+ next unless within_baggage_limits?(entry_bytes, total_bytes)
114
+
115
+ setter.set(carrier, "#{BAGGAGE_KEY_PREFIX}#{key}", encoded_value)
116
+ count += 1
117
+ total_bytes += entry_bytes
118
+ end
119
+ end
120
+
105
121
  def context_with_extracted_baggage(carrier, context, getter)
106
- baggage_key_prefix = 'uberctx-'
107
122
  OpenTelemetry::Baggage.build(context: context) do |b|
123
+ count = 0
124
+ total_bytes = 0
108
125
  getter.keys(carrier).each do |carrier_key|
109
- baggage_key = carrier_key.start_with?(baggage_key_prefix) && carrier_key[baggage_key_prefix.length..-1]
126
+ break unless count < MAX_BAGGAGE_ENTRIES
127
+
128
+ baggage_key = carrier_key.start_with?(BAGGAGE_KEY_PREFIX) && carrier_key[BAGGAGE_KEY_PREFIX.length..]
110
129
  next unless baggage_key
111
130
 
112
131
  raw_value = getter.get(carrier, carrier_key)
113
- value = URI.decode_uri_component(raw_value)
114
- b.set_value(baggage_key, value)
132
+ next unless raw_value
133
+
134
+ entry_bytes = baggage_key.bytesize + raw_value.bytesize
135
+ next unless within_baggage_limits?(entry_bytes, total_bytes)
136
+
137
+ b.set_value(baggage_key, URI.decode_uri_component(raw_value))
138
+ count += 1
139
+ total_bytes += entry_bytes
115
140
  end
116
141
  end
117
142
  end
118
143
 
144
+ def within_baggage_limits?(entry_bytes, total_bytes)
145
+ entry_bytes <= MAX_BAGGAGE_ENTRY_BYTES && total_bytes + entry_bytes <= MAX_BAGGAGE_TOTAL_BYTES
146
+ end
147
+
119
148
  def to_jaeger_flags(context, span_context)
120
149
  if span_context.trace_flags == Trace::TraceFlags::SAMPLED
121
150
  if Jaeger.debug?(context)
@@ -129,7 +158,7 @@ module OpenTelemetry
129
158
  end
130
159
 
131
160
  def to_trace_flags(sampling_flags)
132
- if (sampling_flags & SAMPLED_FLAG_BIT) != 0
161
+ if sampling_flags.anybits?(SAMPLED_FLAG_BIT)
133
162
  Trace::TraceFlags::SAMPLED
134
163
  else
135
164
  Trace::TraceFlags::DEFAULT
@@ -7,7 +7,7 @@
7
7
  module OpenTelemetry
8
8
  module Propagator
9
9
  module Jaeger
10
- VERSION = '0.25.1'
10
+ VERSION = '0.25.2'
11
11
  end
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-propagator-jaeger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.1
4
+ version: 0.25.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
@@ -42,10 +42,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
42
42
  licenses:
43
43
  - Apache-2.0
44
44
  metadata:
45
- changelog_uri: https://rubydoc.info/gems/opentelemetry-propagator-jaeger/0.25.1/file/CHANGELOG.md
46
- source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-propagator-jaeger/v0.25.1/propagator/jaeger
45
+ changelog_uri: https://rubydoc.info/gems/opentelemetry-propagator-jaeger/0.25.2/file/CHANGELOG.md
46
+ source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/opentelemetry-propagator-jaeger/v0.25.2/propagator/jaeger
47
47
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
48
- documentation_uri: https://rubydoc.info/gems/opentelemetry-propagator-jaeger/0.25.1
48
+ documentation_uri: https://rubydoc.info/gems/opentelemetry-propagator-jaeger/0.25.2
49
49
  rdoc_options: []
50
50
  require_paths:
51
51
  - lib
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  requirements: []
63
- rubygems_version: 4.0.10
63
+ rubygems_version: 4.0.16
64
64
  specification_version: 4
65
65
  summary: Jaeger Context Propagation Extension for the OpenTelemetry framework
66
66
  test_files: []