@@ -255,8 +255,14 @@ pub fn encode_span<W: RmpWrite, T: TraceData>(
255255 "env" | "version" | "component" | "span.kind" | "_dd.p.tid"
256256 )
257257 } ;
258- let non_promoted_meta = span. meta . iter ( ) . filter ( |( k, _) | !is_promoted ( k) ) . count ( ) as u32 ;
259- let attr_count = non_promoted_meta + span. metrics . len ( ) as u32 + span. meta_struct . len ( ) as u32 ;
258+ let meta_dd = span. meta . defensive_dedup ( ) ;
259+ let metrics_dd = span. metrics . defensive_dedup ( ) ;
260+ let meta_struct_dd = span. meta_struct . defensive_dedup ( ) ;
261+
262+ let non_promoted_meta = meta_dd. iter ( ) . filter ( |( k, _) | !is_promoted ( k) ) . count ( ) as u32 ;
263+ let metrics_len = metrics_dd. len ( ) as u32 ;
264+ let meta_struct_len = meta_struct_dd. len ( ) as u32 ;
265+ let attr_count = non_promoted_meta + metrics_len + meta_struct_len;
260266 let has_attributes = attr_count > 0 ;
261267
262268 let env = span. meta . get ( "env" ) . map ( |v| v. borrow ( ) ) ;
@@ -344,25 +350,25 @@ pub fn encode_span<W: RmpWrite, T: TraceData>(
344350 write_uint8 ( writer, SpanKey :: Attributes as u8 ) ?;
345351 rmp:: encode:: write_array_len ( writer, attr_count * 3 ) ?;
346352
347- for ( k, v) in span . meta . iter ( ) {
353+ for ( k, v) in meta_dd . iter ( ) {
348354 if is_promoted ( k) {
349355 continue ;
350356 }
351- table. write_interned ( writer, k . borrow ( ) ) ?;
357+ table. write_interned ( writer, ( * k ) . borrow ( ) ) ?;
352358 write_uint8 ( writer, AnyValueKey :: String as u8 ) ?;
353- table. write_interned ( writer, v . borrow ( ) ) ?;
359+ table. write_interned ( writer, ( * v ) . borrow ( ) ) ?;
354360 }
355361
356- for ( k, v) in span . metrics . iter ( ) {
357- table. write_interned ( writer, k . borrow ( ) ) ?;
362+ for ( k, v) in metrics_dd . iter ( ) {
363+ table. write_interned ( writer, ( * k ) . borrow ( ) ) ?;
358364 write_uint8 ( writer, AnyValueKey :: Double as u8 ) ?;
359365 write_f64 ( writer, * v) ?;
360366 }
361367
362- for ( k, v) in span . meta_struct . iter ( ) {
363- table. write_interned ( writer, k . borrow ( ) ) ?;
368+ for ( k, v) in meta_struct_dd . iter ( ) {
369+ table. write_interned ( writer, ( * k ) . borrow ( ) ) ?;
364370 write_uint8 ( writer, AnyValueKey :: Bytes as u8 ) ?;
365- write_bin ( writer, v . borrow ( ) ) ?;
371+ write_bin ( writer, ( * v ) . borrow ( ) ) ?;
366372 }
367373 }
368374
0 commit comments