From 3317797285918d7fa3eb16696ecaeff37778dc47 Mon Sep 17 00:00:00 2001 From: rakita Date: Sun, 14 Mar 2021 11:18:38 +0100 Subject: [PATCH] Initial sync block stuck. Block import logs (#318) --- crates/ethcore/src/client/client.rs | 20 +++++++++++++++++--- crates/ethcore/src/verification/queue/mod.rs | 5 +++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/crates/ethcore/src/client/client.rs b/crates/ethcore/src/client/client.rs index 80531f721..e6d6f56a9 100644 --- a/crates/ethcore/src/client/client.rs +++ b/crates/ethcore/src/client/client.rs @@ -281,7 +281,9 @@ impl Importer { // t_nb 6.0 This is triggered by a message coming from a block queue when the block is ready for insertion pub fn import_verified_blocks(&self, client: &Client) -> usize { // Shortcut out if we know we're incapable of syncing the chain. - if !client.enabled.load(AtomicOrdering::Relaxed) { + trace!(target: "block_import", "fn import_verified_blocks"); + if !client.enabled.load(AtomicOrdering::SeqCst) { + self.block_queue.reset_verification_ready_signal(); return 0; } @@ -303,6 +305,8 @@ impl Importer { let _import_lock = self.import_lock.lock(); let blocks = self.block_queue.drain(max_blocks_to_import); if blocks.is_empty() { + debug!(target: "block_import", "block_queue is empty"); + self.block_queue.resignal_verification(); return 0; } trace_time!("import_verified_blocks"); @@ -315,6 +319,13 @@ impl Importer { let is_invalid = invalid_blocks.contains(header.parent_hash()); if is_invalid { + debug!( + target: "block_import", + "Refusing block #{}({}) with invalid parent {}", + header.number(), + header.hash(), + header.parent_hash() + ); invalid_blocks.insert(hash); continue; } @@ -323,7 +334,7 @@ impl Importer { Ok((closed_block, pending)) => { imported_blocks.push(hash); let transactions_len = closed_block.transactions.len(); - + trace!(target:"block_import","Block #{}({}) check pass",header.number(),header.hash()); // t_nb 8.0 commit block to db let route = self.commit_block( closed_block, @@ -332,6 +343,7 @@ impl Importer { pending, client, ); + trace!(target:"block_import","Block #{}({}) commited",header.number(),header.hash()); import_results.push(route); client .report @@ -365,6 +377,7 @@ impl Importer { { if !imported_blocks.is_empty() { + trace!(target:"block_import","Imported block, notify rest of system"); let route = ChainRoute::from(import_results.as_ref()); // t_nb 10 Notify miner about new included block. @@ -393,11 +406,12 @@ impl Importer { }); } } - + trace!(target:"block_import","Flush block to db"); let db = client.db.read(); db.key_value().flush().expect("DB flush failed."); self.block_queue.resignal_verification(); + trace!(target:"block_import","Resignal verifier"); imported } diff --git a/crates/ethcore/src/verification/queue/mod.rs b/crates/ethcore/src/verification/queue/mod.rs index cb67d689c..01be5cfde 100644 --- a/crates/ethcore/src/verification/queue/mod.rs +++ b/crates/ethcore/src/verification/queue/mod.rs @@ -683,6 +683,11 @@ impl VerificationQueue { } } + /// Reset verification ready signal so that it allows other threads to send IoMessage to Client + pub fn reset_verification_ready_signal(&self) { + self.ready_signal.reset(); + } + /// Returns true if there is nothing currently in the queue. pub fn is_empty(&self) -> bool { let v = &self.verification;