From d357640fbfec55194dd0b8eadc33ee170b1ac9ff Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Mon, 18 Feb 2019 20:28:10 -0700 Subject: [PATCH] Centralize decentralized timing constants --- sdk/src/timing.rs | 7 +++++++ src/bank.rs | 6 ++---- src/banking_stage.rs | 5 ++--- src/blocktree.rs | 2 +- src/last_id_queue.rs | 3 +-- src/leader_scheduler.rs | 5 +---- src/poh_service.rs | 6 ++---- src/status_cache.rs | 2 +- 8 files changed, 17 insertions(+), 19 deletions(-) diff --git a/sdk/src/timing.rs b/sdk/src/timing.rs index 4c7eeae4f8..e6a0a69c16 100644 --- a/sdk/src/timing.rs +++ b/sdk/src/timing.rs @@ -2,6 +2,13 @@ use std::time::Duration; use std::time::{SystemTime, UNIX_EPOCH}; +pub const NUM_TICKS_PER_SECOND: usize = 10; + +// At 10 ticks/s, 8 ticks per slot implies that leader rotation and voting will happen +// every 800 ms. A fast voting cadence ensures faster finality and convergence +pub const DEFAULT_TICKS_PER_SLOT: u64 = 8; +pub const DEFAULT_SLOTS_PER_EPOCH: u64 = 64; + pub fn duration_as_us(d: &Duration) -> u64 { (d.as_secs() * 1000 * 1000) + (u64::from(d.subsec_nanos()) / 1_000) } diff --git a/src/bank.rs b/src/bank.rs index 2942c59247..8a760bcc13 100644 --- a/src/bank.rs +++ b/src/bank.rs @@ -7,7 +7,6 @@ use crate::accounts::{Accounts, ErrorCounters, InstructionAccounts, InstructionL use crate::counter::Counter; use crate::genesis_block::GenesisBlock; use crate::last_id_queue::{LastIdQueue, MAX_ENTRY_IDS}; -use crate::poh_service::NUM_TICKS_PER_SECOND; use crate::status_cache::StatusCache; use bincode::{deserialize, serialize}; use log::Level; @@ -19,12 +18,11 @@ use solana_sdk::hash::{extend_and_hash, Hash}; use solana_sdk::native_loader; use solana_sdk::native_program::ProgramError; use solana_sdk::pubkey::Pubkey; -use solana_sdk::signature::Keypair; -use solana_sdk::signature::Signature; +use solana_sdk::signature::{Keypair, Signature}; use solana_sdk::storage_program; use solana_sdk::system_program; use solana_sdk::system_transaction::SystemTransaction; -use solana_sdk::timing::duration_as_us; +use solana_sdk::timing::{duration_as_us, NUM_TICKS_PER_SECOND}; use solana_sdk::token_program; use solana_sdk::transaction::Transaction; use solana_sdk::vote_program::{self, VoteState}; diff --git a/src/banking_stage.rs b/src/banking_stage.rs index 88a60dd7fe..e939015e4a 100644 --- a/src/banking_stage.rs +++ b/src/banking_stage.rs @@ -18,8 +18,7 @@ use bincode::deserialize; use log::Level; use solana_sdk::hash::Hash; use solana_sdk::pubkey::Pubkey; -use solana_sdk::timing; -use solana_sdk::timing::duration_as_us; +use solana_sdk::timing::{self, duration_as_us}; use solana_sdk::transaction::Transaction; use std::sync::atomic::AtomicBool; use std::sync::mpsc::{channel, Receiver, RecvTimeoutError}; @@ -346,11 +345,11 @@ mod tests { use super::*; use crate::entry::EntrySlice; use crate::genesis_block::GenesisBlock; - use crate::leader_scheduler::DEFAULT_TICKS_PER_SLOT; use crate::packet::to_packets; use solana_sdk::native_program::ProgramError; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::system_transaction::SystemTransaction; + use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT; use std::thread::sleep; #[test] diff --git a/src/blocktree.rs b/src/blocktree.rs index c6f56433e9..23034e9e34 100644 --- a/src/blocktree.rs +++ b/src/blocktree.rs @@ -4,7 +4,6 @@ use crate::entry::Entry; use crate::genesis_block::GenesisBlock; -use crate::leader_scheduler::DEFAULT_TICKS_PER_SLOT; use crate::packet::{Blob, SharedBlob, BLOB_HEADER_SIZE}; use crate::result::{Error, Result}; use bincode::{deserialize, serialize}; @@ -18,6 +17,7 @@ use serde::Serialize; use solana_sdk::hash::Hash; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; +use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT; use std::borrow::{Borrow, Cow}; use std::cell::RefCell; use std::cmp; diff --git a/src/last_id_queue.rs b/src/last_id_queue.rs index 9ab9871db3..4a0bc6b9b9 100644 --- a/src/last_id_queue.rs +++ b/src/last_id_queue.rs @@ -1,7 +1,6 @@ -use crate::poh_service::NUM_TICKS_PER_SECOND; use hashbrown::HashMap; use solana_sdk::hash::Hash; -use solana_sdk::timing::timestamp; +use solana_sdk::timing::{timestamp, NUM_TICKS_PER_SECOND}; /// The number of most recent `last_id` values that the bank will track the signatures /// of. Once the bank discards a `last_id`, it will reject any transactions that use diff --git a/src/leader_scheduler.rs b/src/leader_scheduler.rs index 63b12ee133..8f70f93d51 100644 --- a/src/leader_scheduler.rs +++ b/src/leader_scheduler.rs @@ -11,15 +11,12 @@ use solana_sdk::hash::{hash, Hash}; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::system_transaction::SystemTransaction; +use solana_sdk::timing::{DEFAULT_SLOTS_PER_EPOCH, DEFAULT_TICKS_PER_SLOT}; use solana_sdk::vote_program::VoteState; use solana_sdk::vote_transaction::VoteTransaction; use std::io::Cursor; use std::sync::Arc; -// At 10 ticks/s, 8 ticks per slot implies that leader rotation and voting will happen -// every 800 ms. A fast voting cadence ensures faster finality and convergence -pub const DEFAULT_TICKS_PER_SLOT: u64 = 8; -pub const DEFAULT_SLOTS_PER_EPOCH: u64 = 64; pub const DEFAULT_ACTIVE_WINDOW_TICK_LENGTH: u64 = DEFAULT_SLOTS_PER_EPOCH * DEFAULT_TICKS_PER_SLOT; #[derive(Clone)] diff --git a/src/poh_service.rs b/src/poh_service.rs index 31de959fc2..dbf53201c2 100644 --- a/src/poh_service.rs +++ b/src/poh_service.rs @@ -5,14 +5,12 @@ use crate::bank::Bank; use crate::poh_recorder::PohRecorder; use crate::result::Result; use crate::service::Service; +use solana_sdk::timing::NUM_TICKS_PER_SECOND; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; -use std::thread::sleep; -use std::thread::{self, Builder, JoinHandle}; +use std::thread::{self, sleep, Builder, JoinHandle}; use std::time::Duration; -pub const NUM_TICKS_PER_SECOND: usize = 10; - #[derive(Copy, Clone)] pub enum PohServiceConfig { /// * `Tick` - Run full PoH thread. Tick is a rough estimate of how many hashes to roll before diff --git a/src/status_cache.rs b/src/status_cache.rs index 49bc109b20..4a84728dc3 100644 --- a/src/status_cache.rs +++ b/src/status_cache.rs @@ -1,9 +1,9 @@ use crate::bloom::{Bloom, BloomHashIndex}; use crate::last_id_queue::MAX_ENTRY_IDS; -use crate::poh_service::NUM_TICKS_PER_SECOND; use hashbrown::HashMap; use solana_sdk::hash::Hash; use solana_sdk::signature::Signature; +use solana_sdk::timing::NUM_TICKS_PER_SECOND; use std::collections::VecDeque; use std::ops::{Deref, DerefMut};