From 95b28d4d8cd14cc6fd7a474af5c7dba4ff2ed5fa Mon Sep 17 00:00:00 2001 From: Stephen Akridge Date: Fri, 8 Feb 2019 13:23:28 -0800 Subject: [PATCH] Move now to after super majority time is calculated 'now' could end up being earlier than the supermajority calculated time. Leading to underflow errors and thread panic. --- src/compute_leader_confirmation_service.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/compute_leader_confirmation_service.rs b/src/compute_leader_confirmation_service.rs index ce3bb83d75..148f572cda 100644 --- a/src/compute_leader_confirmation_service.rs +++ b/src/compute_leader_confirmation_service.rs @@ -31,7 +31,6 @@ impl ComputeLeaderConfirmationService { fn get_last_supermajority_timestamp( bank: &Arc, leader_id: Pubkey, - now: u64, last_valid_validator_timestamp: u64, ) -> result::Result { let mut total_stake = 0; @@ -80,6 +79,7 @@ impl ComputeLeaderConfirmationService { } if last_valid_validator_timestamp != 0 { + let now = timing::timestamp(); submit( influxdb::Point::new(&"leader-confirmation") .add_field( @@ -98,17 +98,14 @@ impl ComputeLeaderConfirmationService { leader_id: Pubkey, last_valid_validator_timestamp: &mut u64, ) { - let now = timing::timestamp(); - if let Ok(super_majority_timestamp) = Self::get_last_supermajority_timestamp( - bank, - leader_id, - now, - *last_valid_validator_timestamp, - ) { + if let Ok(super_majority_timestamp) = + Self::get_last_supermajority_timestamp(bank, leader_id, *last_valid_validator_timestamp) + { + let now = timing::timestamp(); let confirmation_ms = now - super_majority_timestamp; *last_valid_validator_timestamp = super_majority_timestamp; - bank.set_confirmation_time((now - *last_valid_validator_timestamp) as usize); + bank.set_confirmation_time(confirmation_ms as usize); submit( influxdb::Point::new(&"leader-confirmation")