mirror of
https://github.com/mimblewimble/grin.git
synced 2025-01-21 03:21:08 +03:00
try_header_head in the syncer loop with a short timeout (#3165)
to prevent it getting locked up after txhashset download and validation
This commit is contained in:
parent
fd4c4c52f2
commit
b5f73b6aab
1 changed files with 12 additions and 1 deletions
|
@ -182,7 +182,18 @@ impl SyncRunner {
|
||||||
// if syncing is needed
|
// if syncing is needed
|
||||||
let head = unwrap_or_restart_loop!(self.chain.head());
|
let head = unwrap_or_restart_loop!(self.chain.head());
|
||||||
let tail = self.chain.tail().unwrap_or_else(|_| head.clone());
|
let tail = self.chain.tail().unwrap_or_else(|_| head.clone());
|
||||||
let header_head = unwrap_or_restart_loop!(self.chain.header_head());
|
|
||||||
|
// We still do not fully understand what is blocking this but if this blocks here after
|
||||||
|
// we download and validate the txhashet we do not reliably proceed to block_sync,
|
||||||
|
// potentially blocking for an extended period of time (> 10 mins).
|
||||||
|
// Does not appear to be deadlock as it does resolve itself eventually.
|
||||||
|
// So as a workaround we try_header_head with a relatively short timeout and simply
|
||||||
|
// retry the syncer loop.
|
||||||
|
let maybe_header_head =
|
||||||
|
unwrap_or_restart_loop!(self.chain.try_header_head(time::Duration::from_secs(1)));
|
||||||
|
let header_head = unwrap_or_restart_loop!(
|
||||||
|
maybe_header_head.ok_or("failed to obtain lock for try_header_head")
|
||||||
|
);
|
||||||
|
|
||||||
// run each sync stage, each of them deciding whether they're needed
|
// run each sync stage, each of them deciding whether they're needed
|
||||||
// except for state sync that only runs if body sync return true (means txhashset is needed)
|
// except for state sync that only runs if body sync return true (means txhashset is needed)
|
||||||
|
|
Loading…
Reference in a new issue