File tree Expand file tree Collapse file tree 2 files changed +24
-0
lines changed Expand file tree Collapse file tree 2 files changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -1022,6 +1022,20 @@ where
10221022 let mut otel_data = span. extensions_mut ( ) . remove :: < OtelData > ( ) ;
10231023 let span_builder = otel_data. as_mut ( ) . map ( |data| & mut data. builder ) ;
10241024
1025+ let limits = self . tracer . span_limits ( ) ;
1026+
1027+ if span_builder
1028+ . as_ref ( )
1029+ . and_then ( |span_builder| span_builder. events . as_ref ( ) . map ( |events| events. len ( ) ) )
1030+ . zip ( limits)
1031+ . map_or ( false , |( current_length, limits) | {
1032+ current_length >= limits. max_events_per_span as usize
1033+ } )
1034+ {
1035+ // We have reached the configured limit for events so there is no point in storing any more.
1036+ return ;
1037+ }
1038+
10251039 let mut otel_event = otel:: Event :: new (
10261040 String :: new ( ) ,
10271041 crate :: time:: now ( ) ,
Original file line number Diff line number Diff line change @@ -47,6 +47,11 @@ pub trait PreSampledTracer {
4747
4848 /// Generate a new span id.
4949 fn new_span_id ( & self ) -> otel:: SpanId ;
50+
51+ /// Gets the current span limits.
52+ fn span_limits ( & self ) -> Option < opentelemetry_sdk:: trace:: SpanLimits > {
53+ None
54+ }
5055}
5156
5257impl PreSampledTracer for noop:: NoopTracer {
@@ -111,6 +116,11 @@ impl PreSampledTracer for SdkTracer {
111116 . map ( |provider| provider. config ( ) . id_generator . new_span_id ( ) )
112117 . unwrap_or ( otel:: SpanId :: INVALID )
113118 }
119+
120+ fn span_limits ( & self ) -> Option < opentelemetry_sdk:: trace:: SpanLimits > {
121+ self . provider ( )
122+ . map ( |provider| provider. config ( ) . span_limits )
123+ }
114124}
115125
116126fn current_trace_state (
You can’t perform that action at this time.
0 commit comments