Minor --expected-shred fix, clean up shred-related gossip log messages (#8041)

automerge
This commit is contained in:
Michael Vines 2020-01-30 14:22:05 -07:00 committed by GitHub
parent dd276138c2
commit 775fa0c968
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 13 deletions

View File

@ -703,7 +703,7 @@ impl Archiver {
) -> Result<u64> {
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() {

View File

@ -405,7 +405,8 @@ impl ClusterInfo {
.map(|x| x.value.contact_info().unwrap())
}
pub fn rpc_peers(&self) -> Vec<ContactInfo> {
/// all validators that have a valid rpc port regardless of `shred_version`.
pub fn all_rpc_peers(&self) -> Vec<ContactInfo> {
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;

View File

@ -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