diff --git a/core/src/cluster_info.rs b/core/src/cluster_info.rs index b0057dbd8f..7dbb790bce 100644 --- a/core/src/cluster_info.rs +++ b/core/src/cluster_info.rs @@ -107,6 +107,7 @@ const MAX_PRUNE_DATA_NODES: usize = 32; const GOSSIP_PING_TOKEN_SIZE: usize = 32; const GOSSIP_PING_CACHE_CAPACITY: usize = 16384; const GOSSIP_PING_CACHE_TTL: Duration = Duration::from_secs(640); +pub const DEFAULT_CONTACT_DEBUG_INTERVAL: u64 = 10_000; #[derive(Debug, PartialEq, Eq)] pub enum ClusterInfoError { @@ -298,6 +299,7 @@ pub struct ClusterInfo { stats: GossipStats, socket: UdpSocket, local_message_pending_push_queue: RwLock>, + contact_debug_interval: u64, } impl Default for ClusterInfo { @@ -553,6 +555,7 @@ impl ClusterInfo { stats: GossipStats::default(), socket: UdpSocket::bind("0.0.0.0:0").unwrap(), local_message_pending_push_queue: RwLock::new(vec![]), + contact_debug_interval: DEFAULT_CONTACT_DEBUG_INTERVAL, }; { let mut gossip = me.gossip.write().unwrap(); @@ -586,9 +589,14 @@ impl ClusterInfo { .unwrap() .clone(), ), + contact_debug_interval: self.contact_debug_interval, } } + pub fn set_contact_debug_interval(&mut self, new: u64) { + self.contact_debug_interval = new; + } + pub fn update_contact_info(&self, modify: F) where F: FnOnce(&mut ContactInfo), @@ -1792,7 +1800,9 @@ impl ClusterInfo { loop { let start = timestamp(); thread_mem_usage::datapoint("solana-gossip"); - if start - last_contact_info_trace > 10000 { + if self.contact_debug_interval != 0 + && start - last_contact_info_trace > self.contact_debug_interval + { // Log contact info every 10 seconds info!( "\n{}\n\n{}", diff --git a/core/src/validator.rs b/core/src/validator.rs index 2ce34f9404..74c44187f8 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -3,7 +3,7 @@ use crate::{ broadcast_stage::BroadcastStageType, cache_block_time_service::{CacheBlockTimeSender, CacheBlockTimeService}, - cluster_info::{ClusterInfo, Node}, + cluster_info::{ClusterInfo, Node, DEFAULT_CONTACT_DEBUG_INTERVAL}, cluster_info_vote_listener::VoteTracker, completed_data_sets_service::CompletedDataSetsService, consensus::{reconcile_blockstore_roots_with_tower, Tower}, @@ -105,6 +105,7 @@ pub struct ValidatorConfig { pub cuda: bool, pub require_tower: bool, pub debug_keys: Option>>, + pub contact_debug_interval: u64, } impl Default for ValidatorConfig { @@ -140,6 +141,7 @@ impl Default for ValidatorConfig { cuda: false, require_tower: false, debug_keys: None, + contact_debug_interval: DEFAULT_CONTACT_DEBUG_INTERVAL, } } } @@ -333,10 +335,9 @@ impl Validator { } } - let cluster_info = Arc::new(ClusterInfo::new( - node.info.clone(), - identity_keypair.clone(), - )); + let mut cluster_info = ClusterInfo::new(node.info.clone(), identity_keypair.clone()); + cluster_info.set_contact_debug_interval(config.contact_debug_interval); + let cluster_info = Arc::new(cluster_info); let mut block_commitment_cache = BlockCommitmentCache::default(); block_commitment_cache.initialize_slots(bank.slot()); let block_commitment_cache = Arc::new(RwLock::new(block_commitment_cache)); diff --git a/validator/src/main.rs b/validator/src/main.rs index c6bf1f4c76..a39a132e0a 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1099,6 +1099,14 @@ pub fn main() { .help("Number of slots between generating snapshots, \ 0 to disable snapshots"), ) + .arg( + Arg::with_name("contact_debug_interval") + .long("contact-debug-interval") + .value_name("CONTACT_DEBUG_INTERVAL") + .takes_value(true) + .default_value("10000") + .help("Milliseconds between printing contact debug from gossip."), + ) .arg( Arg::with_name("accounts_hash_interval_slots") .long("accounts-hash-slots") @@ -1435,6 +1443,8 @@ pub fn main() { bind_address }; + let contact_debug_interval = value_t_or_exit!(matches, "contact_debug_interval", u64); + let restricted_repair_only_mode = matches.is_present("restricted_repair_only_mode"); let mut validator_config = ValidatorConfig { require_tower: matches.is_present("require_tower"), @@ -1499,6 +1509,7 @@ pub fn main() { wal_recovery_mode, poh_verify: !matches.is_present("skip_poh_verify"), debug_keys, + contact_debug_interval, ..ValidatorConfig::default() };