@@ -754,6 +754,69 @@ def test_continue_trace_unsampled(sentry_init, capture_items):
754754 assert len (spans ) == 0
755755
756756
757+ @pytest .mark .parametrize (
758+ ("sample_rand" , "expected_sampled" , "expected_outcome" ),
759+ [
760+ ("0.100000" , True , None ),
761+ ("0.250000" , False , "backpressure" ),
762+ ("0.300000" , False , "backpressure" ),
763+ ("0.500000" , False , "sample_rate" ),
764+ ("0.700000" , False , "sample_rate" ),
765+ ],
766+ )
767+ def test_backpressure_outcome (
768+ sentry_init ,
769+ capture_items ,
770+ capture_record_lost_event_calls ,
771+ sample_rand ,
772+ expected_sampled ,
773+ expected_outcome ,
774+ ):
775+ sentry_init (
776+ traces_sample_rate = 0.5 ,
777+ enable_backpressure_handling = True ,
778+ _experiments = {"trace_lifecycle" : "stream" },
779+ )
780+
781+ items = capture_items ("span" )
782+ record_lost_event_calls = capture_record_lost_event_calls ()
783+
784+ client = sentry_sdk .get_client ()
785+ client .monitor ._downsample_factor = 1
786+
787+ trace_id = "0af7651916cd43dd8448eb211c80319c"
788+ parent_span_id = "b7ad6b7169203331"
789+
790+ sentry_sdk .traces .continue_trace (
791+ {
792+ "sentry-trace" : f"{ trace_id } -{ parent_span_id } " ,
793+ "baggage" : f"sentry-trace_id={ trace_id } ,sentry-sample_rand={ sample_rand } " ,
794+ }
795+ )
796+
797+ with sentry_sdk .traces .start_span (name = "span" ) as span :
798+ pass
799+
800+ sentry_sdk .get_client ().flush ()
801+ spans = [item .payload for item in items ]
802+
803+ # Original traces_sample_rate is 0.5, downsampled sample rate is 0.25, so:
804+ # - sample_rand < 0.25 -> sampled
805+ # - 0.25 < sample_rand < 0.5 -> unsampled because of backpressure (would've been sampled if no backpressure)
806+ # - 0.5 < sample_rand -> unsampled because of sampling rate
807+
808+ assert span .sampled is expected_sampled
809+
810+ if expected_sampled :
811+ assert len (spans ) == 1
812+ assert not record_lost_event_calls
813+ else :
814+ assert len (spans ) == 0
815+ assert record_lost_event_calls == [
816+ (expected_outcome , "span" , None , 1 ),
817+ ]
818+
819+
757820def test_unsampled_spans_produce_client_report (
758821 sentry_init , capture_items , capture_record_lost_event_calls
759822):
0 commit comments