mirror of
https://github.com/mimblewimble/grin.git
synced 2025-01-20 19:11:08 +03:00
further tweaks to block_accepted logs for clarity (#3379)
* further tweaks to block_accepted logs for clarity * fix tests * depth based off prev_head
This commit is contained in:
parent
1cff387f61
commit
caa6b8c747
4 changed files with 51 additions and 21 deletions
|
@ -306,21 +306,29 @@ impl Chain {
|
|||
})
|
||||
}
|
||||
|
||||
fn determine_status(&self, head: Option<Tip>, prev_head: Tip, fork_point: Tip) -> BlockStatus {
|
||||
fn determine_status(
|
||||
&self,
|
||||
head: Option<Tip>,
|
||||
prev: Tip,
|
||||
prev_head: Tip,
|
||||
fork_point: Tip,
|
||||
) -> BlockStatus {
|
||||
// If head is updated then we are either "next" block or we just experienced a "reorg" to new head.
|
||||
// Otherwise this is a "fork" off the main chain.
|
||||
if let Some(head) = head {
|
||||
if head.prev_block_h == prev_head.last_block_h {
|
||||
BlockStatus::Next { prev_head }
|
||||
BlockStatus::Next { prev }
|
||||
} else {
|
||||
BlockStatus::Reorg {
|
||||
prev,
|
||||
prev_head,
|
||||
fork_point,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
BlockStatus::Fork {
|
||||
prev_head,
|
||||
prev,
|
||||
head: prev_head,
|
||||
fork_point,
|
||||
}
|
||||
}
|
||||
|
@ -416,7 +424,13 @@ impl Chain {
|
|||
|
||||
match maybe_new_head {
|
||||
Ok((head, fork_point)) => {
|
||||
let status = self.determine_status(head, prev_head, Tip::from_header(&fork_point));
|
||||
let prev = self.get_previous_header(&b.header)?;
|
||||
let status = self.determine_status(
|
||||
head,
|
||||
Tip::from_header(&prev),
|
||||
prev_head,
|
||||
Tip::from_header(&fork_point),
|
||||
);
|
||||
|
||||
// notifying other parts of the system of the update
|
||||
self.adapter.block_accepted(&b, status, opts);
|
||||
|
|
|
@ -448,19 +448,23 @@ impl ChainAdapter for NoopAdapter {
|
|||
pub enum BlockStatus {
|
||||
/// Block is the "next" block, updating the chain head.
|
||||
Next {
|
||||
/// Previous chain head.
|
||||
prev_head: Tip,
|
||||
/// Previous block (previous chain head).
|
||||
prev: Tip,
|
||||
},
|
||||
/// Block does not update the chain head and is a fork.
|
||||
Fork {
|
||||
/// Previous chain head.
|
||||
prev_head: Tip,
|
||||
/// Previous block on this fork.
|
||||
prev: Tip,
|
||||
/// Current chain head.
|
||||
head: Tip,
|
||||
/// Fork point for rewind.
|
||||
fork_point: Tip,
|
||||
},
|
||||
/// Block updates the chain head via a (potentially disruptive) "reorg".
|
||||
/// Previous block was not our previous chain head.
|
||||
Reorg {
|
||||
/// Previous block on this fork.
|
||||
prev: Tip,
|
||||
/// Previous chain head.
|
||||
prev_head: Tip,
|
||||
/// Fork point for rewind.
|
||||
|
|
|
@ -385,6 +385,7 @@ fn mine_reorg() {
|
|||
assert_eq!(
|
||||
*adapter.last_status.read(),
|
||||
Some(BlockStatus::Reorg {
|
||||
prev: Tip::from_header(&fork_head),
|
||||
prev_head: head,
|
||||
fork_point: Tip::from_header(&fork_point)
|
||||
})
|
||||
|
|
|
@ -119,42 +119,48 @@ impl ChainEvents for EventLogger {
|
|||
fn on_block_accepted(&self, block: &core::Block, status: BlockStatus) {
|
||||
match status {
|
||||
BlockStatus::Reorg {
|
||||
prev,
|
||||
prev_head,
|
||||
fork_point,
|
||||
} => {
|
||||
warn!(
|
||||
"block_accepted (REORG!): {} at {}, (prev_head: {} at {}, fork_point: {} at {}, depth: {})",
|
||||
"block_accepted (REORG!): {} at {}, (prev: {} at {}, prev_head: {} at {}, fork_point: {} at {}, depth: {})",
|
||||
block.hash(),
|
||||
block.header.height,
|
||||
prev.hash(),
|
||||
prev.height,
|
||||
prev_head.hash(),
|
||||
prev_head.height,
|
||||
fork_point.hash(),
|
||||
fork_point.height,
|
||||
block.header.height.saturating_sub(fork_point.height + 1),
|
||||
prev_head.height.saturating_sub(fork_point.height),
|
||||
);
|
||||
}
|
||||
BlockStatus::Fork {
|
||||
prev_head,
|
||||
prev,
|
||||
head,
|
||||
fork_point,
|
||||
} => {
|
||||
debug!(
|
||||
"block_accepted (fork?): {} at {}, (prev_head: {} at {}, fork_point: {} at {}, depth: {})",
|
||||
"block_accepted (fork?): {} at {}, (prev: {} at {}, head: {} at {}, fork_point: {} at {}, depth: {})",
|
||||
block.hash(),
|
||||
block.header.height,
|
||||
prev_head.hash(),
|
||||
prev_head.height,
|
||||
prev.hash(),
|
||||
prev.height,
|
||||
head.hash(),
|
||||
head.height,
|
||||
fork_point.hash(),
|
||||
fork_point.height,
|
||||
block.header.height.saturating_sub(fork_point.height + 1),
|
||||
head.height.saturating_sub(fork_point.height),
|
||||
);
|
||||
}
|
||||
BlockStatus::Next { prev_head } => {
|
||||
BlockStatus::Next { prev } => {
|
||||
debug!(
|
||||
"block_accepted (head+): {} at {} (prev_head: {} at {})",
|
||||
"block_accepted (head+): {} at {} (prev: {} at {})",
|
||||
block.hash(),
|
||||
block.header.height,
|
||||
prev_head.hash(),
|
||||
prev_head.height,
|
||||
prev.hash(),
|
||||
prev.height,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -284,8 +290,13 @@ impl ChainEvents for WebHook {
|
|||
};
|
||||
|
||||
// Add additional `depth` field to the JSON in case of reorg
|
||||
let payload = if let BlockStatus::Reorg { fork_point, .. } = status {
|
||||
let depth = block.header.height.saturating_sub(fork_point.height + 1);
|
||||
let payload = if let BlockStatus::Reorg {
|
||||
fork_point,
|
||||
prev_head,
|
||||
..
|
||||
} = status
|
||||
{
|
||||
let depth = prev_head.height.saturating_sub(fork_point.height);
|
||||
json!({
|
||||
"hash": block.header.hash().to_hex(),
|
||||
"status": status_str,
|
||||
|
|
Loading…
Reference in a new issue