File tree Expand file tree Collapse file tree 1 file changed +17
-2
lines changed
apps/hermes/server/src/state Expand file tree Collapse file tree 1 file changed +17
-2
lines changed Original file line number Diff line number Diff line change @@ -348,7 +348,23 @@ where
348
348
tracing:: info!( len = message_states. len( ) , "Storing Message States." ) ;
349
349
self . store_message_states ( message_states) . await ?;
350
350
351
- // Update the aggregate state
351
+ // First, get the data we need without holding the lock
352
+ let message_state_keys_clone = message_state_keys. clone ( ) ;
353
+ let should_prune = {
354
+ let aggregate_state = self . into ( ) . data . read ( ) . await ;
355
+ match aggregate_state. latest_completed_slot {
356
+ None => false ,
357
+ Some ( latest) if slot > latest => true ,
358
+ _ => false ,
359
+ }
360
+ } ;
361
+
362
+ // Do the pruning outside the critical section if needed
363
+ if should_prune {
364
+ self . prune_removed_keys ( message_state_keys_clone) . await ;
365
+ }
366
+
367
+ // Now acquire the write lock for the state update and event sending
352
368
let mut aggregate_state = self . into ( ) . data . write ( ) . await ;
353
369
354
370
// Atomic check and update
@@ -358,7 +374,6 @@ where
358
374
AggregationEvent :: New { slot }
359
375
}
360
376
Some ( latest) if slot > latest => {
361
- self . prune_removed_keys ( message_state_keys) . await ;
362
377
aggregate_state. latest_completed_slot = Some ( slot) ;
363
378
AggregationEvent :: New { slot }
364
379
}
You can’t perform that action at this time.
0 commit comments