From 420cbc45cd5450095c7494abe08a83a5a2a33032 Mon Sep 17 00:00:00 2001 From: anatoly yakovenko Date: Tue, 26 Mar 2019 11:06:31 -0700 Subject: [PATCH] Record the current nodes locktower votes from the bank (#3502) * observed_locktower_stats * fixup! observed_locktower_stats --- core/src/locktower.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/core/src/locktower.rs b/core/src/locktower.rs index c07a94a5a4..969e3f6188 100644 --- a/core/src/locktower.rs +++ b/core/src/locktower.rs @@ -18,6 +18,7 @@ pub struct EpochStakes { stakes: HashMap, self_staked: u64, total_staked: u64, + delegate_id: Pubkey, } #[derive(Default)] @@ -35,14 +36,15 @@ pub struct Locktower { } impl EpochStakes { - pub fn new(slot: u64, stakes: HashMap, self_id: &Pubkey) -> Self { + pub fn new(slot: u64, stakes: HashMap, delegate_id: &Pubkey) -> Self { let total_staked = stakes.values().sum(); - let self_staked = *stakes.get(&self_id).unwrap_or(&0); + let self_staked = *stakes.get(&delegate_id).unwrap_or(&0); Self { slot, stakes, total_staked, self_staked, + delegate_id: *delegate_id, } } pub fn new_for_tests(lamports: u64) -> Self { @@ -125,6 +127,22 @@ impl Locktower { } let mut vote_state: VoteState = VoteState::deserialize(&account.data) .expect("bank should always have valid VoteState data"); + if key == self.epoch_stakes.delegate_id { + solana_metrics::submit( + influxdb::Point::new("counter-locktower-observed") + .add_field( + "slot", + influxdb::Value::Integer( + vote_state.nth_recent_vote(0).map(|v| v.slot).unwrap_or(0) as i64, + ), + ) + .add_field( + "root", + influxdb::Value::Integer(vote_state.root_slot.unwrap_or(0) as i64), + ) + .to_owned(), + ); + } let start_root = vote_state.root_slot; vote_state.process_vote(Vote { slot: bank_slot }); for vote in &vote_state.votes {