@@ -596,6 +596,7 @@ pub async fn start_observer_commands_handler(
596
596
let mut chainhooks_lookup: HashMap < String , ApiKey > = HashMap :: new ( ) ;
597
597
let networks = ( & config. bitcoin_network , & config. stacks_network ) ;
598
598
let mut bitcoin_block_store: HashMap < BlockIdentifier , BitcoinBlockData > = HashMap :: new ( ) ;
599
+ let traversals_cache = Arc :: new ( new_traversals_cache ( ) ) ;
599
600
600
601
loop {
601
602
let command = match observer_commands_rx. recv ( ) {
@@ -642,12 +643,12 @@ pub async fn start_observer_commands_handler(
642
643
ctx. try_log ( |logger| {
643
644
slog:: info!( logger, "Handling PropagateBitcoinChainEvent command" )
644
645
} ) ;
646
+ let mut confirmed_blocks = vec ! [ ] ;
645
647
646
648
// Update Chain event before propagation
647
649
let chain_event = match blockchain_event {
648
650
BlockchainEvent :: BlockchainUpdatedWithHeaders ( data) => {
649
651
let mut new_blocks = vec ! [ ] ;
650
- let mut confirmed_blocks = vec ! [ ] ;
651
652
652
653
#[ cfg( feature = "ordinals" ) ]
653
654
let blocks_db = match open_readwrite_hord_db_conn_rocks_db (
@@ -697,7 +698,6 @@ pub async fn start_observer_commands_handler(
697
698
Some ( block) => {
698
699
#[ cfg( feature = "ordinals" ) ]
699
700
{
700
- let traversals_cache = Arc :: new ( new_traversals_cache ( ) ) ;
701
701
if let Err ( e) = update_hord_db_and_augment_bitcoin_block (
702
702
block,
703
703
& blocks_db,
@@ -750,14 +750,13 @@ pub async fn start_observer_commands_handler(
750
750
BitcoinChainEvent :: ChainUpdatedWithBlocks (
751
751
BitcoinChainUpdatedWithBlocksData {
752
752
new_blocks,
753
- confirmed_blocks,
753
+ confirmed_blocks : confirmed_blocks . clone ( ) ,
754
754
} ,
755
755
)
756
756
}
757
757
BlockchainEvent :: BlockchainUpdatedWithReorg ( data) => {
758
758
let mut blocks_to_apply = vec ! [ ] ;
759
759
let mut blocks_to_rollback = vec ! [ ] ;
760
- let mut confirmed_blocks = vec ! [ ] ;
761
760
762
761
let blocks_ids_to_rollback = data
763
762
. headers_to_rollback
@@ -774,6 +773,15 @@ pub async fn start_observer_commands_handler(
774
773
slog:: info!( logger, "Bitcoin reorg detected, will rollback blocks {} and apply blocks {}" , blocks_ids_to_rollback. join( ", " ) , blocks_ids_to_apply. join( ", " ) )
775
774
} ) ;
776
775
776
+ ctx. try_log ( |logger| {
777
+ slog:: info!(
778
+ logger,
779
+ "Flushing traversals_cache ({} entries)" ,
780
+ traversals_cache. len( )
781
+ )
782
+ } ) ;
783
+ traversals_cache. clear ( ) ;
784
+
777
785
#[ cfg( feature = "ordinals" ) ]
778
786
let blocks_db = match open_readwrite_hord_db_conn_rocks_db (
779
787
& config. get_cache_path_buf ( ) ,
@@ -854,7 +862,6 @@ pub async fn start_observer_commands_handler(
854
862
Some ( block) => {
855
863
#[ cfg( feature = "ordinals" ) ]
856
864
{
857
- let traversals_cache = Arc :: new ( new_traversals_cache ( ) ) ;
858
865
if let Err ( e) = update_hord_db_and_augment_bitcoin_block (
859
866
block,
860
867
& blocks_db,
@@ -906,7 +913,7 @@ pub async fn start_observer_commands_handler(
906
913
BitcoinChainEvent :: ChainUpdatedWithReorg ( BitcoinChainUpdatedWithReorgData {
907
914
blocks_to_apply,
908
915
blocks_to_rollback,
909
- confirmed_blocks,
916
+ confirmed_blocks : confirmed_blocks . clone ( ) ,
910
917
} )
911
918
}
912
919
} ;
@@ -1064,6 +1071,19 @@ pub async fn start_observer_commands_handler(
1064
1071
let _ = send_request ( request, 3 , 1 , & ctx) . await ;
1065
1072
}
1066
1073
1074
+ for block in confirmed_blocks. into_iter ( ) {
1075
+ if block. block_identifier . index % 24 == 0 {
1076
+ ctx. try_log ( |logger| {
1077
+ slog:: info!(
1078
+ logger,
1079
+ "Flushing traversals_cache ({} entries)" ,
1080
+ traversals_cache. len( )
1081
+ )
1082
+ } ) ;
1083
+ traversals_cache. clear ( ) ;
1084
+ }
1085
+ }
1086
+
1067
1087
if let Some ( ref tx) = observer_events_tx {
1068
1088
let _ = tx. send ( ObserverEvent :: BitcoinChainEvent ( chain_event) ) ;
1069
1089
}
0 commit comments