Skip to content

Commit 247df20

Browse files
author
Ludo Galabru
committed
fix: add retry logic in rocksdb
1 parent 64f6215 commit 247df20

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

components/chainhook-cli/src/cli/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@ async fn handle_command(opts: Opts, ctx: Context) -> Result<(), String> {
755755

756756
let mut missing_blocks = vec![];
757757
for i in 1..=780000 {
758-
if find_block_at_block_height(i, &blocks_db_rw).is_none() {
758+
if find_block_at_block_height(i, 3, &blocks_db_rw).is_none() {
759759
println!("Missing block {i}");
760760
missing_blocks.push(i);
761761
}

components/chainhook-cli/src/scan/bitcoin.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ pub async fn scan_bitcoin_chainstate_via_http_using_predicate(
8686
if let Ok(blocks_db) =
8787
open_readonly_hord_db_conn_rocks_db(&config.expected_cache_path(), &ctx)
8888
{
89-
if find_block_at_block_height(end_block as u32, &blocks_db).is_none() {
89+
if find_block_at_block_height(end_block as u32, 3, &blocks_db).is_none() {
9090
hord_blocks_requires_update = true;
9191
}
9292
}

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

+20-7
Original file line numberDiff line numberDiff line change
@@ -482,13 +482,26 @@ pub fn find_last_block_inserted(blocks_db: &DB) -> u32 {
482482
}
483483
}
484484

485-
pub fn find_block_at_block_height(block_height: u32, blocks_db: &DB) -> Option<CompactedBlock> {
486-
match blocks_db.get(block_height.to_be_bytes()) {
487-
Ok(Some(ref res)) => {
488-
let res = CompactedBlock::deserialize(&mut std::io::Cursor::new(&res)).unwrap();
489-
Some(res)
485+
pub fn find_block_at_block_height(
486+
block_height: u32,
487+
retry: u8,
488+
blocks_db: &DB,
489+
) -> Option<CompactedBlock> {
490+
let mut attempt = 0;
491+
loop {
492+
match blocks_db.get(block_height.to_be_bytes()) {
493+
Ok(Some(ref res)) => {
494+
let res = CompactedBlock::deserialize(&mut std::io::Cursor::new(&res)).unwrap();
495+
return Some(res);
496+
}
497+
_ => {
498+
attempt += 1;
499+
std::thread::sleep(std::time::Duration::from_secs(1));
500+
if attempt > retry {
501+
return None;
502+
}
503+
}
490504
}
491-
_ => None,
492505
}
493506
}
494507

@@ -1036,7 +1049,7 @@ pub fn retrieve_satoshi_point_using_local_storage(
10361049
hops += 1;
10371050
let block = match local_block_cache.get(&ordinal_block_number) {
10381051
Some(block) => block,
1039-
None => match find_block_at_block_height(ordinal_block_number, &blocks_db) {
1052+
None => match find_block_at_block_height(ordinal_block_number, 3, &blocks_db) {
10401053
Some(block) => {
10411054
local_block_cache.insert(ordinal_block_number, block);
10421055
local_block_cache.get(&ordinal_block_number).unwrap()

0 commit comments

Comments
 (0)