Skip to content

Commit c2a1c51

Browse files
authored
ref: Represent SpanId as bytes (#4756)
This changes the representation of `SpanId` from `String` to `[u8; 8]`. The constructor is now private; the only ways to construct a `SpanId` are the `FromStr` and `TryFrom<&[u8]>` impls, both of which check that the ID has the right length and is not nil. In order to handle `SpanId`s in `Getter` impls, it adds a new `HexId` struct for handling hexadecimal IDs represented as bytes. The variant `Val::Uuid` is replaced with `Val::HexId` that handles such `HexId`s.
1 parent a1a6267 commit c2a1c51

File tree

28 files changed

+292
-215
lines changed

28 files changed

+292
-215
lines changed

relay-event-normalization/src/clock_drift.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ impl Processor for ClockDriftProcessor {
150150
mod tests {
151151
use chrono::offset::TimeZone;
152152
use relay_event_schema::processor::process_value;
153-
use relay_event_schema::protocol::{Contexts, EventType, SpanId, TraceContext};
153+
use relay_event_schema::protocol::{Contexts, EventType, TraceContext};
154154
use relay_protocol::Annotated;
155155
use similar_asserts::assert_eq;
156156

@@ -165,7 +165,7 @@ mod tests {
165165
let mut contexts = Contexts::new();
166166
contexts.add(TraceContext {
167167
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
168-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
168+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
169169
op: Annotated::new("http.server".to_owned()),
170170
..Default::default()
171171
});

relay-event-normalization/src/normalize/breakdowns.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ pub fn normalize_breakdowns(event: &mut Event, breakdowns_config: &BreakdownsCon
243243
#[cfg(test)]
244244
mod tests {
245245
use chrono::{TimeZone, Timelike, Utc};
246-
use relay_event_schema::protocol::{EventType, Span, SpanId, SpanStatus};
246+
use relay_event_schema::protocol::{EventType, Span, SpanStatus};
247247
use relay_protocol::Object;
248248
use similar_asserts::assert_eq;
249249

@@ -297,7 +297,7 @@ mod tests {
297297
description: Annotated::new("desc".to_owned()),
298298
op: Annotated::new(op_name),
299299
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
300-
span_id: Annotated::new(SpanId("fa90fdead5f74052".into())),
300+
span_id: Annotated::new("fa90fdead5f74052".parse().unwrap()),
301301
status: Annotated::new(SpanStatus::Ok),
302302
..Default::default()
303303
})

relay-event-normalization/src/normalize/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ mod tests {
272272
use relay_event_schema::protocol::{
273273
ClientSdkInfo, Context, ContextInner, Contexts, DebugImage, DebugMeta, EventId, Exception,
274274
Frame, Geo, IpAddr, LenientString, Level, LogEntry, PairList, RawStacktrace, ReplayContext,
275-
Request, Span, SpanId, Stacktrace, TagEntry, Tags, TraceContext, User, Values,
275+
Request, Span, Stacktrace, TagEntry, Tags, TraceContext, User, Values,
276276
};
277277
use relay_protocol::{
278278
Annotated, Error, ErrorKind, FromValue, Object, SerializableAnnotated, Value,
@@ -587,7 +587,7 @@ mod tests {
587587
let mut contexts = Contexts::new();
588588
contexts.add(TraceContext {
589589
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
590-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
590+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
591591
op: Annotated::new("http.server".to_owned()),
592592
..Default::default()
593593
});
@@ -1467,7 +1467,7 @@ mod tests {
14671467
let mut contexts = Contexts::new();
14681468
contexts.add(TraceContext {
14691469
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
1470-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
1470+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
14711471
op: Annotated::new("http.server".to_owned()),
14721472
..Default::default()
14731473
});
@@ -1481,7 +1481,7 @@ mod tests {
14811481
Utc.with_ymd_and_hms(2000, 1, 1, 0, 0, 0).unwrap().into(),
14821482
),
14831483
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
1484-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
1484+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
14851485

14861486
..Default::default()
14871487
})]),
@@ -1535,7 +1535,7 @@ mod tests {
15351535
let mut contexts = Contexts::new();
15361536
contexts.add(TraceContext {
15371537
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
1538-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
1538+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
15391539
op: Annotated::new("http.server".to_owned()),
15401540
..Default::default()
15411541
});
@@ -1549,7 +1549,7 @@ mod tests {
15491549
Utc.with_ymd_and_hms(2000, 1, 1, 0, 0, 0).unwrap().into(),
15501550
),
15511551
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
1552-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
1552+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
15531553

15541554
..Default::default()
15551555
})]),

relay-event-normalization/src/normalize/span/exclusive_time.rs

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,8 @@ pub fn compute_span_exclusive_time(event: &mut Event) {
110110
Some(span) => span,
111111
};
112112

113-
let parent_span_id = match span.parent_span_id.value() {
114-
None => continue,
115-
Some(parent_span_id) => parent_span_id.clone(),
113+
let Some(&parent_span_id) = span.parent_span_id.value() else {
114+
continue;
116115
};
117116

118117
let interval = match (span.start_timestamp.value(), span.timestamp.value()) {
@@ -160,7 +159,7 @@ mod tests {
160159
let mut contexts = Contexts::new();
161160
contexts.add(TraceContext {
162161
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
163-
span_id: Annotated::new(SpanId(span_id.into())),
162+
span_id: Annotated::new(span_id.parse().unwrap()),
164163
..Default::default()
165164
});
166165
Annotated::new(contexts)
@@ -184,8 +183,8 @@ mod tests {
184183
start_timestamp: Annotated::new(start),
185184
timestamp: Annotated::new(end),
186185
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
187-
span_id: Annotated::new(SpanId(span_id.into())),
188-
parent_span_id: Annotated::new(SpanId(parent_span_id.into())),
186+
span_id: Annotated::new(span_id.parse().unwrap()),
187+
parent_span_id: Annotated::new(parent_span_id.parse().unwrap()),
189188
..Default::default()
190189
})
191190
}
@@ -252,10 +251,10 @@ mod tests {
252251
assert_eq!(
253252
extract_span_exclusive_times(&event),
254253
HashMap::from_iter([
255-
(&SpanId("aaaaaaaaaaaaaaaa".to_string()), 1123.0),
256-
(&SpanId("bbbbbbbbbbbbbbbb".to_string()), 3000.0),
257-
(&SpanId("cccccccccccccccc".to_string()), 2500.0),
258-
(&SpanId("dddddddddddddddd".to_string()), 1877.0)
254+
(&"aaaaaaaaaaaaaaaa".parse().unwrap(), 1123.0),
255+
(&"bbbbbbbbbbbbbbbb".parse().unwrap(), 3000.0),
256+
(&"cccccccccccccccc".parse().unwrap(), 2500.0),
257+
(&"dddddddddddddddd".parse().unwrap(), 1877.0)
259258
]),
260259
);
261260
}
@@ -299,10 +298,10 @@ mod tests {
299298
assert_eq!(
300299
extract_span_exclusive_times(&event),
301300
HashMap::from_iter([
302-
(&SpanId("aaaaaaaaaaaaaaaa".to_string()), 4000.0),
303-
(&SpanId("bbbbbbbbbbbbbbbb".to_string()), 400.0),
304-
(&SpanId("cccccccccccccccc".to_string()), 400.0),
305-
(&SpanId("dddddddddddddddd".to_string()), 200.0),
301+
(&"aaaaaaaaaaaaaaaa".parse().unwrap(), 4000.0),
302+
(&"bbbbbbbbbbbbbbbb".parse().unwrap(), 400.0),
303+
(&"cccccccccccccccc".parse().unwrap(), 400.0),
304+
(&"dddddddddddddddd".parse().unwrap(), 200.0),
306305
])
307306
);
308307
}
@@ -346,10 +345,10 @@ mod tests {
346345
assert_eq!(
347346
extract_span_exclusive_times(&event),
348347
HashMap::from_iter([
349-
(&SpanId("aaaaaaaaaaaaaaaa".to_string()), 4000.0),
350-
(&SpanId("bbbbbbbbbbbbbbbb".to_string()), 400.0),
351-
(&SpanId("cccccccccccccccc".to_string()), 400.0),
352-
(&SpanId("dddddddddddddddd".to_string()), 400.0),
348+
(&"aaaaaaaaaaaaaaaa".parse().unwrap(), 4000.0),
349+
(&"bbbbbbbbbbbbbbbb".parse().unwrap(), 400.0),
350+
(&"cccccccccccccccc".parse().unwrap(), 400.0),
351+
(&"dddddddddddddddd".parse().unwrap(), 400.0),
353352
])
354353
);
355354
}
@@ -393,10 +392,10 @@ mod tests {
393392
assert_eq!(
394393
extract_span_exclusive_times(&event),
395394
HashMap::from_iter([
396-
(&SpanId("aaaaaaaaaaaaaaaa".to_string()), 4000.0),
397-
(&SpanId("bbbbbbbbbbbbbbbb".to_string()), 1000.0),
398-
(&SpanId("cccccccccccccccc".to_string()), 400.0),
399-
(&SpanId("dddddddddddddddd".to_string()), 400.0),
395+
(&"aaaaaaaaaaaaaaaa".parse().unwrap(), 4000.0),
396+
(&"bbbbbbbbbbbbbbbb".parse().unwrap(), 1000.0),
397+
(&"cccccccccccccccc".parse().unwrap(), 400.0),
398+
(&"dddddddddddddddd".parse().unwrap(), 400.0),
400399
])
401400
);
402401
}
@@ -440,10 +439,10 @@ mod tests {
440439
assert_eq!(
441440
extract_span_exclusive_times(&event),
442441
HashMap::from_iter([
443-
(&SpanId("aaaaaaaaaaaaaaaa".to_string()), 4000.0),
444-
(&SpanId("bbbbbbbbbbbbbbbb".to_string()), 200.0),
445-
(&SpanId("cccccccccccccccc".to_string()), 600.0),
446-
(&SpanId("dddddddddddddddd".to_string()), 600.0),
442+
(&"aaaaaaaaaaaaaaaa".parse().unwrap(), 4000.0),
443+
(&"bbbbbbbbbbbbbbbb".parse().unwrap(), 200.0),
444+
(&"cccccccccccccccc".parse().unwrap(), 600.0),
445+
(&"dddddddddddddddd".parse().unwrap(), 600.0),
447446
])
448447
);
449448
}
@@ -487,10 +486,10 @@ mod tests {
487486
assert_eq!(
488487
extract_span_exclusive_times(&event),
489488
HashMap::from_iter([
490-
(&SpanId("aaaaaaaaaaaaaaaa".to_string()), 4000.0),
491-
(&SpanId("bbbbbbbbbbbbbbbb".to_string()), 0.0),
492-
(&SpanId("cccccccccccccccc".to_string()), 800.0),
493-
(&SpanId("dddddddddddddddd".to_string()), 800.0),
489+
(&"aaaaaaaaaaaaaaaa".parse().unwrap(), 4000.0),
490+
(&"bbbbbbbbbbbbbbbb".parse().unwrap(), 0.0),
491+
(&"cccccccccccccccc".parse().unwrap(), 800.0),
492+
(&"dddddddddddddddd".parse().unwrap(), 800.0),
494493
])
495494
);
496495
}
@@ -536,10 +535,10 @@ mod tests {
536535
assert_eq!(
537536
extract_span_exclusive_times(&event),
538537
HashMap::from_iter([
539-
(&SpanId("aaaaaaaaaaaaaaaa".to_string()), 4000.0),
540-
(&SpanId("bbbbbbbbbbbbbbbb".to_string()), 600.0),
541-
(&SpanId("cccccccccccccccc".to_string()), 400.0),
542-
(&SpanId("dddddddddddddddd".to_string()), 400.0),
538+
(&"aaaaaaaaaaaaaaaa".parse().unwrap(), 4000.0),
539+
(&"bbbbbbbbbbbbbbbb".parse().unwrap(), 600.0),
540+
(&"cccccccccccccccc".parse().unwrap(), 400.0),
541+
(&"dddddddddddddddd".parse().unwrap(), 400.0),
543542
])
544543
);
545544
}

relay-event-normalization/src/normalize/span/reparent_broken_spans.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ pub fn reparent_broken_spans(event: &mut Event) {
4949
continue;
5050
};
5151

52-
let invalid_parent = mem::replace(parent_span_id, root_span_id.clone());
52+
let invalid_parent = mem::replace(parent_span_id, *root_span_id);
5353
let meta = span.parent_span_id.meta_mut();
5454
meta.add_error(Error::invalid("span ID does not exist"));
5555
meta.set_original_value(Some(invalid_parent));

relay-event-normalization/src/transactions/processor.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ mod tests {
404404
use itertools::Itertools;
405405
use relay_common::glob2::LazyGlob;
406406
use relay_event_schema::processor::process_value;
407-
use relay_event_schema::protocol::{ClientSdkInfo, Contexts, SpanId};
407+
use relay_event_schema::protocol::{ClientSdkInfo, Contexts};
408408
use relay_protocol::{assert_annotated_snapshot, get_value};
409409
use serde_json::json;
410410

@@ -484,7 +484,7 @@ mod tests {
484484
let mut contexts = Contexts::new();
485485
contexts.add(TraceContext {
486486
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
487-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
487+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
488488
op: Annotated::new("http.server".to_owned()),
489489
..Default::default()
490490
});
@@ -494,7 +494,7 @@ mod tests {
494494
start_timestamp: Annotated::new(start.into()),
495495
timestamp: Annotated::new(end.into()),
496496
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
497-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
497+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
498498
op: Annotated::new("db.statement".to_owned()),
499499
..Default::default()
500500
})]),
@@ -516,7 +516,7 @@ mod tests {
516516
let mut contexts = Contexts::new();
517517
contexts.add(TraceContext {
518518
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
519-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
519+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
520520
..Default::default()
521521
});
522522
Annotated::new(contexts)
@@ -551,7 +551,7 @@ mod tests {
551551
let mut contexts = Contexts::new();
552552
contexts.add(TraceContext {
553553
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
554-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
554+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
555555
op: Annotated::new("http.server".to_owned()),
556556
..Default::default()
557557
});
@@ -581,7 +581,7 @@ mod tests {
581581
let mut contexts = Contexts::new();
582582
contexts.add(TraceContext {
583583
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
584-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
584+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
585585
op: Annotated::new("http.server".to_owned()),
586586
..Default::default()
587587
});
@@ -634,7 +634,7 @@ mod tests {
634634
let mut contexts = Contexts::new();
635635
contexts.add(TraceContext {
636636
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
637-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
637+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
638638
op: Annotated::new("http.server".to_owned()),
639639
..Default::default()
640640
});
@@ -648,7 +648,7 @@ mod tests {
648648
Utc.with_ymd_and_hms(2000, 1, 1, 0, 0, 0).unwrap().into(),
649649
),
650650
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
651-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
651+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
652652

653653
..Default::default()
654654
})]),

relay-event-normalization/src/trimming.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,9 +1065,9 @@ mod tests {
10651065
#[test]
10661066
fn test_untrimmable_fields_drop() {
10671067
let original_description = "a".repeat(819164);
1068-
let original_span_id = SpanId("b".repeat(48));
1068+
let original_span_id: SpanId = "b".repeat(16).parse().unwrap();
10691069
let original_trace_id: TraceId = "c".repeat(32).parse().unwrap();
1070-
let original_segment_id = SpanId("d".repeat(48));
1070+
let original_segment_id: SpanId = "d".repeat(16).parse().unwrap();
10711071
let original_op = "e".repeat(129);
10721072

10731073
let mut event = Annotated::new(Event {
@@ -1078,9 +1078,9 @@ mod tests {
10781078
}
10791079
.into(),
10801080
Span {
1081-
span_id: original_span_id.clone().into(),
1081+
span_id: original_span_id.into(),
10821082
trace_id: original_trace_id.into(),
1083-
segment_id: original_segment_id.clone().into(),
1083+
segment_id: original_segment_id.into(),
10841084
is_segment: false.into(),
10851085
op: original_op.clone().into(),
10861086
start_timestamp: Timestamp(

relay-event-normalization/src/validation.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ fn validate_bounded_integer_field(value: u64) -> ProcessingResult {
315315
mod tests {
316316
use chrono::TimeZone;
317317
use relay_base_schema::spans::SpanStatus;
318-
use relay_event_schema::protocol::{Contexts, SpanId};
318+
use relay_event_schema::protocol::Contexts;
319319
use relay_protocol::{Object, get_value};
320320

321321
use super::*;
@@ -332,7 +332,7 @@ mod tests {
332332
let mut contexts = Contexts::new();
333333
contexts.add(TraceContext {
334334
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
335-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
335+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
336336
op: Annotated::new("http.server".to_owned()),
337337
..Default::default()
338338
});
@@ -342,7 +342,7 @@ mod tests {
342342
start_timestamp: Annotated::new(start.into()),
343343
timestamp: Annotated::new(end.into()),
344344
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
345-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
345+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
346346
op: Annotated::new("db.statement".to_owned()),
347347
..Default::default()
348348
})]),
@@ -533,7 +533,7 @@ mod tests {
533533
let mut contexts = Contexts::new();
534534
contexts.add(TraceContext {
535535
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
536-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
536+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
537537
op: Annotated::new("http.server".to_owned()),
538538
..Default::default()
539539
});
@@ -563,7 +563,7 @@ mod tests {
563563
let mut contexts = Contexts::new();
564564
contexts.add(TraceContext {
565565
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
566-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
566+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
567567
op: Annotated::new("http.server".to_owned()),
568568
..Default::default()
569569
});
@@ -598,7 +598,7 @@ mod tests {
598598
let mut contexts = Contexts::new();
599599
contexts.add(TraceContext {
600600
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
601-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
601+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
602602
op: Annotated::new("http.server".to_owned()),
603603
..Default::default()
604604
});
@@ -636,7 +636,7 @@ mod tests {
636636
let mut contexts = Contexts::new();
637637
contexts.add(TraceContext {
638638
trace_id: Annotated::new("4c79f60c11214eb38604f4ae0781bfb2".parse().unwrap()),
639-
span_id: Annotated::new(SpanId("fa90fdead5f74053".into())),
639+
span_id: Annotated::new("fa90fdead5f74053".parse().unwrap()),
640640
op: Annotated::new("http.server".to_owned()),
641641
..Default::default()
642642
});

0 commit comments

Comments
 (0)