@@ -937,7 +937,8 @@ describe('SentrySpanProcessor', () => {
937
937
} ) ;
938
938
} ) ;
939
939
940
- it ( 'aborts when encountering a missing parent reference' , ( ) => {
940
+ // If we cannot find the parent span, it means we are continuing a trace from somehwere else
941
+ it ( 'handles missing parent reference' , ( ) => {
941
942
const startTimestampMs = 1667381672309 ;
942
943
const endTimestampMs = 1667381672875 ;
943
944
const startTime = otelNumberToHrtime ( startTimestampMs ) ;
@@ -947,19 +948,20 @@ describe('SentrySpanProcessor', () => {
947
948
948
949
tracer . startActiveSpan ( 'GET /users' , parentOtelSpan => {
949
950
// We simulate the parent somehow not existing in our internal map
950
- // this can happen if a race condition leads to spans being processed out of order
951
951
SENTRY_SPAN_PROCESSOR_MAP . delete ( parentOtelSpan . spanContext ( ) . spanId ) ;
952
952
953
953
tracer . startActiveSpan ( 'SELECT * FROM users;' , { startTime } , child => {
954
954
const childOtelSpan = child as OtelSpan ;
955
955
956
- // Parent span does not exist ...
956
+ // Parent span cannot be looked up, because we deleted the reference before ...
957
957
const sentrySpanTransaction = getSpanForOtelSpan ( parentOtelSpan ) ;
958
958
expect ( sentrySpanTransaction ) . toBeUndefined ( ) ;
959
959
960
- // Span itself does not exist...
960
+ // Span itself does does exist as a transaction
961
961
const sentrySpan = getSpanForOtelSpan ( childOtelSpan ) ;
962
- expect ( sentrySpan ) . toBeUndefined ( ) ;
962
+ expect ( sentrySpan ) . toBeDefined ( ) ;
963
+ expect ( sentrySpan ) . toBeInstanceOf ( Transaction ) ;
964
+ expect ( sentrySpan ?. parentSpanId ) . toEqual ( parentOtelSpan . spanContext ( ) . spanId ) ;
963
965
964
966
child . end ( endTime ) ;
965
967
} ) ;
@@ -1004,9 +1006,12 @@ describe('SentrySpanProcessor', () => {
1004
1006
child . end ( ) ;
1005
1007
1006
1008
expect ( parentSpan ) . toBeDefined ( ) ;
1007
- expect ( childSpan ) . not . toBeDefined ( ) ;
1009
+ expect ( childSpan ) . toBeDefined ( ) ;
1008
1010
expect ( parentSpan ) . toBeInstanceOf ( Transaction ) ;
1011
+ expect ( childSpan ) . toBeInstanceOf ( Transaction ) ;
1012
+ expect ( childSpan ?. parentSpanId ) . toEqual ( parentSpan ?. spanId ) ;
1009
1013
expect ( parentSpan ?. endTimestamp ) . toBeDefined ( ) ;
1014
+ expect ( childSpan ?. endTimestamp ) . toBeDefined ( ) ;
1010
1015
} ) ;
1011
1016
} ) ;
1012
1017
} ) ;
0 commit comments