diff --git a/archiver-lib/src/archiver.rs b/archiver-lib/src/archiver.rs index ee7e24a845..7369070063 100644 --- a/archiver-lib/src/archiver.rs +++ b/archiver-lib/src/archiver.rs @@ -703,7 +703,7 @@ impl Archiver { ) -> Result { let rpc_peers = { let cluster_info = cluster_info.read().unwrap(); - cluster_info.rpc_peers() + cluster_info.all_rpc_peers() }; debug!("rpc peers: {:?}", rpc_peers); if !rpc_peers.is_empty() { @@ -759,7 +759,7 @@ impl Archiver { loop { let rpc_peers = { let cluster_info = cluster_info.read().unwrap(); - cluster_info.rpc_peers() + cluster_info.all_rpc_peers() }; debug!("rpc peers: {:?}", rpc_peers); if !rpc_peers.is_empty() { diff --git a/core/src/cluster_info.rs b/core/src/cluster_info.rs index 0bd3005166..afa627f16a 100644 --- a/core/src/cluster_info.rs +++ b/core/src/cluster_info.rs @@ -405,7 +405,8 @@ impl ClusterInfo { .map(|x| x.value.contact_info().unwrap()) } - pub fn rpc_peers(&self) -> Vec { + /// all validators that have a valid rpc port regardless of `shred_version`. + pub fn all_rpc_peers(&self) -> Vec { let me = self.my_data(); self.gossip .crds @@ -413,8 +414,6 @@ impl ClusterInfo { .values() .filter_map(|x| x.value.contact_info()) .filter(|x| x.id != me.id) - /* shred_version not considered for rpc peers (ie, caller must select version - if desired) */ .filter(|x| ContactInfo::is_valid_address(&x.rpc)) .cloned() .collect() @@ -1132,23 +1131,25 @@ impl ClusterInfo { let table_size = obj.read().unwrap().gossip.crds.table.len(); datapoint_debug!( "cluster_info-purge", - ("tabel_size", table_size as i64, i64), + ("table_size", table_size as i64, i64), ("purge_stake_timeout", timeout as i64, i64) ); // Adopt the entrypoint's `shred_version` if ours is unset if adopt_shred_version { // If gossip was given an entrypoint, lookup its id - let entrypoint_id = obj.read().unwrap().entrypoint.as_ref().map(|e| e.id); + let entrypoint_id = obj.read().unwrap().entrypoint.as_ref().map(|e| e.id); if let Some(entrypoint_id) = entrypoint_id { - info!("Shred version unknown, looking for the entrypoint:{:?} Shred version", entrypoint_id); // If a pull from the entrypoint was successful, it should exist in the crds table let entrypoint = obj.read().unwrap().lookup(&entrypoint_id).cloned(); if let Some(entrypoint) = entrypoint { let mut self_info = obj.read().unwrap().my_data(); if entrypoint.shred_version == 0 { - warn!("entrypoint is running an invalid shred_version: 0"); + info!("Unable to adopt entrypoint's shred version"); } else { - info!("Setting Shred version to {:?} from entrypoint {:?}", entrypoint.shred_version, entrypoint.id); + info!( + "Setting shred version to {:?} from entrypoint {:?}", + entrypoint.shred_version, entrypoint.id + ); self_info.shred_version = entrypoint.shred_version; obj.write().unwrap().insert_self(self_info); adopt_shred_version = false; diff --git a/validator/src/main.rs b/validator/src/main.rs index 8ccc7cd4ce..430f223a33 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -225,7 +225,7 @@ fn get_rpc_addr( cluster_info.read().unwrap().contact_info_trace() ); - let mut rpc_peers = cluster_info.read().unwrap().rpc_peers(); + let mut rpc_peers = cluster_info.read().unwrap().all_rpc_peers(); let shred_version_required = !rpc_peers .iter() @@ -246,10 +246,10 @@ fn get_rpc_addr( .find(|contact_info| contact_info.gossip == *entrypoint_gossip) { Some(contact_info.clone()) - } else if shred_version_required { + } else if shred_version_required && expected_shred_version.is_none() { // Require the user supply a shred version if there are conflicting shred version in // gossip to reduce the chance of human error - warn!("Multiple shred versions detected, unable to select an RPC service. Restart with --expected-shred-version"); + warn!("Multiple shred versions in gossip. Restart with --expected-shred-version"); None } else { // Pick a node at random