catchup now retries when the desired node is not yet online (#9148)

This commit is contained in:
Michael Vines 2020-03-29 09:40:53 -07:00 committed by GitHub
parent 729cc4e04f
commit 5f31444300
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 11 deletions

View File

@ -410,19 +410,34 @@ pub fn process_catchup(
node_pubkey: &Pubkey, node_pubkey: &Pubkey,
node_json_rpc_url: &Option<String>, node_json_rpc_url: &Option<String>,
) -> ProcessResult { ) -> ProcessResult {
let cluster_nodes = rpc_client.get_cluster_nodes()?; let sleep_interval = 5;
let progress_bar = new_spinner_progress_bar();
progress_bar.set_message("Connecting...");
let node_client = if let Some(node_json_rpc_url) = node_json_rpc_url { let node_client = if let Some(node_json_rpc_url) = node_json_rpc_url {
RpcClient::new(node_json_rpc_url.to_string()) RpcClient::new(node_json_rpc_url.to_string())
} else { } else {
RpcClient::new_socket( let rpc_addr = loop {
cluster_nodes let cluster_nodes = rpc_client.get_cluster_nodes()?;
if let Some(contact_info) = cluster_nodes
.iter() .iter()
.find(|contact_info| contact_info.pubkey == node_pubkey.to_string()) .find(|contact_info| contact_info.pubkey == node_pubkey.to_string())
.ok_or_else(|| format!("Contact information not found for {}", node_pubkey))? {
.rpc if let Some(rpc_addr) = contact_info.rpc {
.ok_or_else(|| format!("RPC service not found for {}", node_pubkey))?, break rpc_addr;
) }
progress_bar.set_message(&format!("RPC service not found for {}", node_pubkey));
} else {
progress_bar.set_message(&format!(
"Contact information not found for {}",
node_pubkey
));
}
sleep(Duration::from_secs(sleep_interval as u64));
};
RpcClient::new_socket(rpc_addr)
}; };
let reported_node_pubkey = node_client.get_identity()?; let reported_node_pubkey = node_client.get_identity()?;
@ -438,12 +453,8 @@ pub fn process_catchup(
return Err("Both RPC URLs reference the same node, unable to monitor for catchup. Try a different --url".into()); return Err("Both RPC URLs reference the same node, unable to monitor for catchup. Try a different --url".into());
} }
let progress_bar = new_spinner_progress_bar();
progress_bar.set_message("Connecting...");
let mut previous_rpc_slot = std::u64::MAX; let mut previous_rpc_slot = std::u64::MAX;
let mut previous_slot_distance = 0; let mut previous_slot_distance = 0;
let sleep_interval = 5;
loop { loop {
let rpc_slot = rpc_client.get_slot_with_commitment(CommitmentConfig::recent())?; let rpc_slot = rpc_client.get_slot_with_commitment(CommitmentConfig::recent())?;
let node_slot = node_client.get_slot_with_commitment(CommitmentConfig::recent())?; let node_slot = node_client.get_slot_with_commitment(CommitmentConfig::recent())?;