Skip to content

Commit 784e9a0

Browse files
author
Ludo Galabru
committed
feat: use caching on streamed blocks
1 parent b567322 commit 784e9a0

File tree

1 file changed

+26
-6
lines changed
  • components/chainhook-event-observer/src/observer

1 file changed

+26
-6
lines changed

components/chainhook-event-observer/src/observer/mod.rs

+26-6
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,7 @@ pub async fn start_observer_commands_handler(
596596
let mut chainhooks_lookup: HashMap<String, ApiKey> = HashMap::new();
597597
let networks = (&config.bitcoin_network, &config.stacks_network);
598598
let mut bitcoin_block_store: HashMap<BlockIdentifier, BitcoinBlockData> = HashMap::new();
599+
let traversals_cache = Arc::new(new_traversals_cache());
599600

600601
loop {
601602
let command = match observer_commands_rx.recv() {
@@ -642,12 +643,12 @@ pub async fn start_observer_commands_handler(
642643
ctx.try_log(|logger| {
643644
slog::info!(logger, "Handling PropagateBitcoinChainEvent command")
644645
});
646+
let mut confirmed_blocks = vec![];
645647

646648
// Update Chain event before propagation
647649
let chain_event = match blockchain_event {
648650
BlockchainEvent::BlockchainUpdatedWithHeaders(data) => {
649651
let mut new_blocks = vec![];
650-
let mut confirmed_blocks = vec![];
651652

652653
#[cfg(feature = "ordinals")]
653654
let blocks_db = match open_readwrite_hord_db_conn_rocks_db(
@@ -697,7 +698,6 @@ pub async fn start_observer_commands_handler(
697698
Some(block) => {
698699
#[cfg(feature = "ordinals")]
699700
{
700-
let traversals_cache = Arc::new(new_traversals_cache());
701701
if let Err(e) = update_hord_db_and_augment_bitcoin_block(
702702
block,
703703
&blocks_db,
@@ -750,14 +750,13 @@ pub async fn start_observer_commands_handler(
750750
BitcoinChainEvent::ChainUpdatedWithBlocks(
751751
BitcoinChainUpdatedWithBlocksData {
752752
new_blocks,
753-
confirmed_blocks,
753+
confirmed_blocks: confirmed_blocks.clone(),
754754
},
755755
)
756756
}
757757
BlockchainEvent::BlockchainUpdatedWithReorg(data) => {
758758
let mut blocks_to_apply = vec![];
759759
let mut blocks_to_rollback = vec![];
760-
let mut confirmed_blocks = vec![];
761760

762761
let blocks_ids_to_rollback = data
763762
.headers_to_rollback
@@ -774,6 +773,15 @@ pub async fn start_observer_commands_handler(
774773
slog::info!(logger, "Bitcoin reorg detected, will rollback blocks {} and apply blocks {}", blocks_ids_to_rollback.join(", "), blocks_ids_to_apply.join(", "))
775774
});
776775

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+
777785
#[cfg(feature = "ordinals")]
778786
let blocks_db = match open_readwrite_hord_db_conn_rocks_db(
779787
&config.get_cache_path_buf(),
@@ -854,7 +862,6 @@ pub async fn start_observer_commands_handler(
854862
Some(block) => {
855863
#[cfg(feature = "ordinals")]
856864
{
857-
let traversals_cache = Arc::new(new_traversals_cache());
858865
if let Err(e) = update_hord_db_and_augment_bitcoin_block(
859866
block,
860867
&blocks_db,
@@ -906,7 +913,7 @@ pub async fn start_observer_commands_handler(
906913
BitcoinChainEvent::ChainUpdatedWithReorg(BitcoinChainUpdatedWithReorgData {
907914
blocks_to_apply,
908915
blocks_to_rollback,
909-
confirmed_blocks,
916+
confirmed_blocks: confirmed_blocks.clone(),
910917
})
911918
}
912919
};
@@ -1064,6 +1071,19 @@ pub async fn start_observer_commands_handler(
10641071
let _ = send_request(request, 3, 1, &ctx).await;
10651072
}
10661073

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+
10671087
if let Some(ref tx) = observer_events_tx {
10681088
let _ = tx.send(ObserverEvent::BitcoinChainEvent(chain_event));
10691089
}

0 commit comments

Comments
 (0)