diff --git a/crates/blockchain-tree/src/blockchain_tree.rs b/crates/blockchain-tree/src/blockchain_tree.rs index 0fad707991..92c821064c 100644 --- a/crates/blockchain-tree/src/blockchain_tree.rs +++ b/crates/blockchain-tree/src/blockchain_tree.rs @@ -1084,8 +1084,12 @@ impl BlockchainTree } } - /// Update blockchain tree and sync metrics - pub(crate) fn update_metrics(&mut self) { + /// Update blockchain tree chains (canonical and sidechains) and sync metrics. + /// + /// NOTE: this method should not be called during the pipeline sync, because otherwise the sync + /// checkpoint metric will get overwritten. Buffered blocks metrics are updated in + /// [BlockBuffer] during the pipeline sync. + pub(crate) fn update_chains_metrics(&mut self) { let height = self.canonical_chain().tip().number; self.metrics.sidechains.set(self.chains.len() as f64); diff --git a/crates/blockchain-tree/src/shareable.rs b/crates/blockchain-tree/src/shareable.rs index 663c2e03ba..a63b18dd26 100644 --- a/crates/blockchain-tree/src/shareable.rs +++ b/crates/blockchain-tree/src/shareable.rs @@ -43,9 +43,9 @@ impl BlockchainTreeEngine { fn buffer_block(&self, block: SealedBlockWithSenders) -> Result<(), InsertBlockError> { let mut tree = self.tree.write(); - let res = tree.buffer_block(block); - tree.update_metrics(); - res + // Blockchain tree metrics shouldn't be updated here, see + // `BlockchainTree::update_chains_metrics` documentation. + tree.buffer_block(block) } fn insert_block( @@ -55,7 +55,7 @@ impl BlockchainTreeEngine trace!(target: "blockchain_tree", hash=?block.hash, number=block.number, parent_hash=?block.parent_hash, "Inserting block"); let mut tree = self.tree.write(); let res = tree.insert_block(block); - tree.update_metrics(); + tree.update_chains_metrics(); res } @@ -63,14 +63,14 @@ impl BlockchainTreeEngine trace!(target: "blockchain_tree", ?finalized_block, "Finalizing block"); let mut tree = self.tree.write(); tree.finalize_block(finalized_block); - tree.update_metrics(); + tree.update_chains_metrics(); } fn restore_canonical_hashes(&self, last_finalized_block: BlockNumber) -> Result<(), Error> { trace!(target: "blockchain_tree", ?last_finalized_block, "Restoring canonical hashes for last finalized block"); let mut tree = self.tree.write(); let res = tree.restore_canonical_hashes(last_finalized_block); - tree.update_metrics(); + tree.update_chains_metrics(); res } @@ -78,7 +78,7 @@ impl BlockchainTreeEngine trace!(target: "blockchain_tree", ?block_hash, "Making block canonical"); let mut tree = self.tree.write(); let res = tree.make_canonical(block_hash); - tree.update_metrics(); + tree.update_chains_metrics(); res } @@ -86,7 +86,7 @@ impl BlockchainTreeEngine trace!(target: "blockchain_tree", ?unwind_to, "Unwinding to block number"); let mut tree = self.tree.write(); let res = tree.unwind(unwind_to); - tree.update_metrics(); + tree.update_chains_metrics(); res } }