@@ -38,6 +38,12 @@ use governor::{
38
38
} ,
39
39
Quota ,
40
40
} ;
41
+ use minitrace:: {
42
+ collector:: SpanContext ,
43
+ full_name,
44
+ future:: FutureExt as MinitraceFutureExt ,
45
+ Span ,
46
+ } ;
41
47
#[ cfg( any( test, feature = "testing" ) ) ]
42
48
use proptest:: prelude:: * ;
43
49
#[ cfg( not( any( test, feature = "testing" ) ) ) ]
@@ -113,9 +119,14 @@ pub async fn try_join_buffered<
113
119
+ ' static ,
114
120
) -> anyhow:: Result < C > {
115
121
assert_send (
116
- stream:: iter ( tasks. map ( |task| assert_send ( try_join ( rt, name, assert_send ( task) ) ) ) )
117
- . buffered ( JOIN_BUFFER_SIZE )
118
- . try_collect ( ) ,
122
+ stream:: iter ( tasks. map ( |task| {
123
+ let span = SpanContext :: current_local_parent ( )
124
+ . map ( |ctx| Span :: root ( format ! ( "{}::{name}" , full_name!( ) ) , ctx) )
125
+ . unwrap_or ( Span :: noop ( ) ) ;
126
+ assert_send ( try_join ( rt, name, assert_send ( task) , span) )
127
+ } ) )
128
+ . buffered ( JOIN_BUFFER_SIZE )
129
+ . try_collect ( ) ,
119
130
)
120
131
. await
121
132
}
@@ -141,9 +152,14 @@ pub async fn try_join_buffer_unordered<
141
152
+ ' static ,
142
153
) -> anyhow:: Result < C > {
143
154
assert_send (
144
- stream:: iter ( tasks. map ( |task| try_join ( rt, name, task) ) )
145
- . buffer_unordered ( JOIN_BUFFER_SIZE )
146
- . try_collect ( ) ,
155
+ stream:: iter ( tasks. map ( |task| {
156
+ let span = SpanContext :: current_local_parent ( )
157
+ . map ( |ctx| Span :: root ( format ! ( "{}::{name}" , full_name!( ) ) , ctx) )
158
+ . unwrap_or ( Span :: noop ( ) ) ;
159
+ try_join ( rt, name, task, span)
160
+ } ) )
161
+ . buffer_unordered ( JOIN_BUFFER_SIZE )
162
+ . try_collect ( ) ,
147
163
)
148
164
. await
149
165
}
@@ -152,12 +168,17 @@ pub async fn try_join<RT: Runtime, T: Send + 'static>(
152
168
rt : & RT ,
153
169
name : & ' static str ,
154
170
fut : impl Future < Output = anyhow:: Result < T > > + Send + ' static ,
171
+ span : Span ,
155
172
) -> anyhow:: Result < T > {
156
173
let ( tx, rx) = oneshot:: channel ( ) ;
157
- let handle = rt. spawn ( name, async {
158
- let result = fut. await ;
159
- let _ = tx. send ( result) ;
160
- } ) ;
174
+ let handle = rt. spawn (
175
+ name,
176
+ async {
177
+ let result = fut. await ;
178
+ let _ = tx. send ( result) ;
179
+ }
180
+ . in_span ( span) ,
181
+ ) ;
161
182
handle. into_join_future ( ) . await ?;
162
183
rx. await ?
163
184
}
0 commit comments