Skip to content

Commit

Permalink
getblocks retry 5 times on 'Block not found on disk'
Browse files Browse the repository at this point in the history
  • Loading branch information
RCasatta authored and m-reichert committed Nov 6, 2024
1 parent ae7b299 commit d1c9fda
Showing 1 changed file with 29 additions and 2 deletions.
31 changes: 29 additions & 2 deletions src/daemon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ lazy_static! {
);
}

const MAX_ATTEMPTS: u32 = 5;
const RETRY_WAIT_DURATION: Duration = Duration::from_secs(1);

#[instrument(skip_all, name="Daemon::parse_hash<T>")]
fn parse_hash<T>(value: &Value) -> Result<T>
where
Expand Down Expand Up @@ -552,7 +555,28 @@ impl Daemon {
.iter()
.map(|hash| json!([hash, /*verbose=*/ false]))
.collect();
let values = self.requests("getblock", params_list)?;

let mut attempts = MAX_ATTEMPTS;
let values = loop {
attempts -= 1;

match self.requests("getblock", params_list.clone()) {
Ok(blocks) => break blocks,
Err(e) => {
let err_msg = format!("{e:?}");
if err_msg.contains("Block not found on disk") {
// There is a small chance the node returns the header but didn't finish to index the block
log::warn!("getblocks failing with: {e:?} trying {attempts} more time")
} else {
panic!("failed to get blocks from bitcoind: {}", err_msg);
}
}
}
if attempts == 0 {
panic!("failed to get blocks from bitcoind")
}
std::thread::sleep(RETRY_WAIT_DURATION);
};
let mut blocks = vec![];
for value in values {
blocks.push(block_from_value(value)?);
Expand Down Expand Up @@ -628,7 +652,10 @@ impl Daemon {
#[allow(clippy::float_cmp)]
#[instrument(skip_all, name="Daemon::estimatesmartfee_batch")]
pub fn estimatesmartfee_batch(&self, conf_targets: &[u16]) -> Result<HashMap<u16, f64>> {
let params_list: Vec<Value> = conf_targets.iter().map(|t| json!([t, "ECONOMICAL"])).collect();
let params_list: Vec<Value> = conf_targets
.iter()
.map(|t| json!([t, "ECONOMICAL"]))
.collect();

Ok(self
.requests("estimatesmartfee", params_list)?
Expand Down

0 comments on commit d1c9fda

Please sign in to comment.