Skip to content

Commit 48eb836

Browse files
fix: reduce allocations in update_tracestate (#1414)
Co-authored-by: Robert <[email protected]>
1 parent 188237a commit 48eb836

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

sdk_experimental/lib/opentelemetry/sdk/trace/samplers/consistent_probability_tracestate.rb

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,22 @@ def parse_ot_vendor_tag(tracestate)
4444
end
4545

4646
def update_tracestate(tracestate, p, r, rest) # rubocop:disable Naming/UncommunicativeMethodParamName
47-
# This could be more efficient and allocate less, however it *should* only be used for root spans and sanitizing invalid tracestate
48-
# in the most common configuration of parent_consistent_probability_based(root: consistent_probability_based(p)).
49-
ps = "p:#{p}" unless p.nil?
50-
rs = "r:#{r}" unless r.nil?
51-
ot = [ps, rs, rest].compact.join(';')
52-
if ot.empty?
47+
if p.nil? && r.nil? && rest.nil?
5348
tracestate.delete('ot')
49+
elsif p.nil? && r.nil?
50+
tracestate.set_value('ot', rest)
51+
elsif p.nil? && rest.nil?
52+
tracestate.set_value('ot', "r:#{r}")
53+
elsif r.nil? && rest.nil?
54+
tracestate.set_value('ot', "p:#{p}")
55+
elsif p.nil?
56+
tracestate.set_value('ot', "r:#{r};#{rest}")
57+
elsif r.nil?
58+
tracestate.set_value('ot', "p:#{p};#{rest}")
59+
elsif rest.nil?
60+
tracestate.set_value('ot', "p:#{p};r:#{r}")
5461
else
55-
tracestate.set_value('ot', ot)
62+
tracestate.set_value('ot', "p:#{p};r:#{r};#{rest}")
5663
end
5764
end
5865

0 commit comments

Comments
 (0)