@@ -116,42 +116,47 @@ impl Balances {
116116 let cache = self . balance_cache . clone ( ) ;
117117 let mut stream = into_stream ( block_stream) ;
118118
119- let task = async move {
119+ tokio :: spawn ( async move {
120120 while let Some ( block) = stream. next ( ) . await {
121- let balances_to_update = {
121+ let span = tracing:: info_span!( "balance_cache" , block = block. number) ;
122+ async {
123+ let balances_to_update = {
124+ let mut cache = cache. lock ( ) . unwrap ( ) ;
125+ cache. last_seen_block = block. number ;
126+ cache
127+ . data
128+ . iter ( )
129+ . filter_map ( |( query, entry) | {
130+ // Only update balances that have been requested recently.
131+ let oldest_allowed_request =
132+ cache. last_seen_block . saturating_sub ( EVICTION_TIME ) ;
133+ ( entry. requested_at >= oldest_allowed_request)
134+ . then_some ( query. clone ( ) )
135+ } )
136+ . collect_vec ( )
137+ } ;
138+
139+ let results = inner. get_balances ( & balances_to_update) . await ;
140+
122141 let mut cache = cache. lock ( ) . unwrap ( ) ;
123- cache. last_seen_block = block. number ;
124- cache
125- . data
126- . iter ( )
127- . filter_map ( |( query, entry) | {
128- // Only update balances that have been requested recently.
129- let oldest_allowed_request =
130- cache. last_seen_block . saturating_sub ( EVICTION_TIME ) ;
131- ( entry. requested_at >= oldest_allowed_request) . then_some ( query. clone ( ) )
132- } )
133- . collect_vec ( )
134- } ;
135-
136- let results = inner. get_balances ( & balances_to_update) . await ;
137-
138- let mut cache = cache. lock ( ) . unwrap ( ) ;
139- balances_to_update
140- . into_iter ( )
141- . zip ( results)
142- . for_each ( |( query, result) | {
143- if let Ok ( balance) = result {
144- cache. update_balance ( & query, balance, block. number ) ;
145- }
142+ balances_to_update
143+ . into_iter ( )
144+ . zip ( results)
145+ . for_each ( |( query, result) | {
146+ if let Ok ( balance) = result {
147+ cache. update_balance ( & query, balance, block. number ) ;
148+ }
149+ } ) ;
150+ cache. data . retain ( |_, value| {
151+ // Only keep balances where we know we have the most recent data.
152+ value. updated_at >= block. number
146153 } ) ;
147- cache. data . retain ( |_, value| {
148- // Only keep balances where we know we have the most recent data.
149- value. updated_at >= block. number
150- } ) ;
154+ }
155+ . instrument ( span)
156+ . await ;
151157 }
152158 tracing:: error!( "block stream terminated unexpectedly" ) ;
153- } ;
154- tokio:: spawn ( task. instrument ( tracing:: info_span!( "balance_cache" ) ) ) ;
159+ } ) ;
155160 }
156161}
157162
0 commit comments