Skip to content

Commit

Permalink
further tweaks to block_accepted logs for clarity (#3379)
Browse files Browse the repository at this point in the history
* further tweaks to block_accepted logs for clarity

* fix tests

* depth based off prev_head
  • Loading branch information
antiochp authored Aug 20, 2020
1 parent 1cff387 commit caa6b8c
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 21 deletions.
22 changes: 18 additions & 4 deletions chain/src/chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
}
Expand Down Expand Up @@ -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);
Expand Down
12 changes: 8 additions & 4 deletions chain/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
1 change: 1 addition & 0 deletions chain/tests/mine_simple_chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
})
Expand Down
37 changes: 24 additions & 13 deletions servers/src/common/hooks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
);
}
}
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit caa6b8c

Please sign in to comment.