@@ -81,10 +81,18 @@ def _build_snuba_span(relay_span: Mapping[str, Any]) -> MutableMapping[str, Any]
81
81
if span_data :
82
82
for relay_tag , snuba_tag in TAG_MAPPING .items ():
83
83
tag_value = span_data .get (relay_tag )
84
- if tag_value is None :
85
- if snuba_tag == "group" :
84
+ if snuba_tag == "group" :
85
+ if tag_value is None :
86
86
metrics .incr ("spans.missing_group" )
87
- else :
87
+ else :
88
+ try :
89
+ # Test if the value is valid hexadecimal.
90
+ _ = int (tag_value , 16 )
91
+ # If valid, set the raw value to the tag.
92
+ sentry_tags ["group" ] = tag_value
93
+ except ValueError :
94
+ metrics .incr ("spans.invalid_group" )
95
+ elif tag_value is not None :
88
96
sentry_tags [snuba_tag ] = tag_value
89
97
90
98
if "op" not in sentry_tags and (op := relay_span .get ("op" , "" )) is not None :
@@ -104,7 +112,7 @@ def _build_snuba_span(relay_span: Mapping[str, Any]) -> MutableMapping[str, Any]
104
112
grouping_config = load_span_grouping_config ()
105
113
106
114
if snuba_span ["is_segment" ]:
107
- group = grouping_config .strategy .get_transaction_span_group (
115
+ group_raw = grouping_config .strategy .get_transaction_span_group (
108
116
{"transaction" : span_data .get ("transaction" , "" )},
109
117
)
110
118
else :
@@ -122,9 +130,15 @@ def _build_snuba_span(relay_span: Mapping[str, Any]) -> MutableMapping[str, Any]
122
130
data = None ,
123
131
same_process_as_parent = True ,
124
132
)
125
- group = grouping_config .strategy .get_span_group (span )
133
+ group_raw = grouping_config .strategy .get_span_group (span )
134
+
135
+ try :
136
+ _ = int (group_raw , 16 )
137
+ snuba_span ["group_raw" ] = group_raw
138
+ except ValueError :
139
+ snuba_span ["group_raw" ] = "0"
140
+ metrics .incr ("spans.invalid_group_raw" )
126
141
127
- snuba_span ["group_raw" ] = group or "0"
128
142
snuba_span ["span_grouping_config" ] = {"id" : grouping_config .id }
129
143
130
144
return snuba_span
0 commit comments