Skip to content

Commit 3ffcd14

Browse files
committed
Remove metastruct_size (no usage)
Split set_metastruct into deep_merge_metastruct! and metastruct=
1 parent c172eac commit 3ffcd14

File tree

8 files changed

+106
-74
lines changed

8 files changed

+106
-74
lines changed

lib/datadog/tracing/metadata/metastruct.rb

+17-6
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,27 @@ module Tracing
55
module Metadata
66
# Adds complex structures tagging behavior through metastruct
77
module Metastruct
8-
def set_metastruct(metastruct)
9-
self.metastruct.merge!(metastruct)
8+
def metastruct=(second)
9+
@metastruct = second
1010
end
1111

12-
def get_metastruct(key)
13-
metastruct[key]
12+
def deep_merge_metastruct!(second)
13+
merger = proc do |_, v1, v2|
14+
if v1.is_a?(Hash) && v2.is_a?(Hash)
15+
v1.merge(v2, &merger)
16+
elsif v1.is_a?(Array) && v2.is_a?(Array)
17+
v1.concat(v2)
18+
elsif v2.nil?
19+
v1
20+
else
21+
v2
22+
end
23+
end
24+
metastruct.merge!(second.to_h, &merger)
1425
end
1526

16-
def metastruct_size
17-
metastruct.size
27+
def get_metastruct(key)
28+
metastruct[key]
1829
end
1930

2031
protected

lib/datadog/tracing/trace_operation.rb

+1-11
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def initialize(
106106
# Generic tags
107107
set_tags(tags) if tags
108108
set_tags(metrics) if metrics
109-
set_metastruct(metastruct) if metastruct
109+
self.metastruct = metastruct if metastruct
110110

111111
# State
112112
@root_span = nil
@@ -175,10 +175,6 @@ def get_metric(key)
175175
super || (root_span && root_span.get_metric(key))
176176
end
177177

178-
def get_metastruct(key)
179-
super || (root_span && root_span.get_metastruct(key))
180-
end
181-
182178
def tags
183179
all_tags = {}
184180
all_tags.merge!(root_span&.tags || {}) if root_span
@@ -187,12 +183,6 @@ def tags
187183
all_tags
188184
end
189185

190-
def metastruct_size
191-
size = super
192-
size += root_span.metastruct_size if root_span
193-
size
194-
end
195-
196186
# Returns true if the resource has been explicitly set
197187
#
198188
# @return [Boolean]

lib/datadog/tracing/transport/trace_formatter.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def set_trace_tags!
9393
def set_metastruct!
9494
return if partial?
9595

96-
root_span.set_metastruct(trace.send(:metastruct))
96+
root_span.deep_merge_metastruct!(trace.send(:metastruct))
9797
end
9898

9999
def tag_agent_sample_rate!

sig/datadog/tracing/metadata/metastruct.rbs

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ module Datadog
22
module Tracing
33
module Metadata
44
module Metastruct
5-
def set_metastruct: (Hash[String, untyped] metastruct) -> void
5+
def metastruct=: (Hash[String, untyped] second) -> void
66

7-
def get_metastruct: (String key) -> untyped
7+
def deep_merge_metastruct!: (Hash[String, untyped] second) -> void
88

9-
def metastruct_size: () -> Integer
9+
def get_metastruct: (String key) -> untyped
1010

1111
def metastruct: () -> Hash[String, untyped]
1212
end

spec/datadog/tracing/metadata/meta_struct_spec.rb

-41
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
require 'datadog/tracing/metadata/metastruct'
2+
3+
RSpec.describe Datadog::Tracing::Metadata::Metastruct do
4+
subject(:test_object) { test_class.new }
5+
let(:test_class) { Class.new { include Datadog::Tracing::Metadata::Metastruct } }
6+
7+
describe '#metastruct=' do
8+
subject(:metastruct_instance_var) { test_object.send(:metastruct) }
9+
10+
context 'when setting meta struct' do
11+
before do
12+
test_object.instance_variable_set(:@metastruct, preexisting_metastruct)
13+
test_object.metastruct = new_metastruct
14+
end
15+
16+
let(:preexisting_metastruct) { nil }
17+
18+
context 'with empty preexisting metastruct' do
19+
let(:new_metastruct) { { 'key' => 'value' } }
20+
21+
it { is_expected.to eq({ 'key' => 'value' }) }
22+
end
23+
24+
context 'with preexisting metastruct' do
25+
let(:preexisting_metastruct) { { 'old_key' => 'old_value' } }
26+
27+
context 'with new key' do
28+
let(:new_metastruct) { { 'new_key' => 'new_value' } }
29+
30+
it { is_expected.to eq({ 'new_key' => 'new_value' }) }
31+
end
32+
33+
context 'with existing key' do
34+
let(:new_metastruct) { { 'old_key' => 'new_value' } }
35+
36+
it { is_expected.to eq({ 'old_key' => 'new_value' }) }
37+
end
38+
end
39+
end
40+
end
41+
42+
describe '#deep_merge_metastruct!' do
43+
subject(:metastruct_instance_var) { test_object.send(:metastruct) }
44+
45+
context 'when merging meta struct' do
46+
before do
47+
test_object.instance_variable_set(:@metastruct, preexisting_metastruct)
48+
test_object.deep_merge_metastruct!(new_metastruct)
49+
end
50+
51+
let(:preexisting_metastruct) { nil }
52+
53+
context 'with empty preexisting metastruct' do
54+
let(:new_metastruct) { { 'key' => 'value' } }
55+
56+
it { is_expected.to eq({ 'key' => 'value' }) }
57+
end
58+
59+
context 'with simple preexisting metastruct' do
60+
let(:preexisting_metastruct) { { 'old_key' => 'old_value' } }
61+
62+
context 'with new key' do
63+
let(:new_metastruct) { { 'new_key' => 'new_value' } }
64+
65+
it { is_expected.to eq({ 'old_key' => 'old_value', 'new_key' => 'new_value' }) }
66+
end
67+
68+
context 'with existing key' do
69+
let(:new_metastruct) { { 'old_key' => 'new_value' } }
70+
71+
it { is_expected.to eq({ 'old_key' => 'new_value' }) }
72+
end
73+
end
74+
75+
context 'with nested preexisting metastruct, containing arrays' do
76+
let(:preexisting_metastruct) { { 'key' => { 'nested_key' => ['value1'] } } }
77+
let(:new_metastruct) { { 'key' => { 'nested_key' => ['value2'], 'second_nested_key' => ['value3'] } } }
78+
79+
it { is_expected.to eq({ 'key' => { 'nested_key' => ['value1', 'value2'], 'second_nested_key' => ['value3'] } }) }
80+
end
81+
end
82+
end
83+
end

spec/datadog/tracing/trace_operation_spec.rb

-11
Original file line numberDiff line numberDiff line change
@@ -1175,17 +1175,6 @@
11751175
end
11761176
end
11771177

1178-
describe '#set_metastruct' do
1179-
it 'sets metastruct' do
1180-
trace_op.set_metastruct({ 'foo' => 'bar', 'baz' => { 'value' => 42 } })
1181-
trace_op.measure('top') {}
1182-
1183-
trace = trace_op.flush!
1184-
1185-
expect(trace.send(:metastruct)).to eq({ 'foo' => 'bar', 'baz' => { 'value' => 42 } })
1186-
end
1187-
end
1188-
11891178
describe '#build_span' do
11901179
subject(:build_span) { trace_op.build_span(span_name, **span_options) }
11911180
let(:span_name) { 'web.request' }

spec/datadog/tracing/trace_segment_spec.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
it { expect(trace_segment.send(:metrics)).to eq({ 'foo' => 42.0 }) }
165165
end
166166

167-
context ':metastruct do
167+
context ':metastruct' do
168168
let(:options) { { metastruct: metastruct } }
169169
let(:metastruct) { { 'foo' => 'bar' } }
170170

0 commit comments

Comments
 (0)