Pick an RPC node at random to avoid getting stuck on a bad RPC node
This commit is contained in:
		
							
								
								
									
										1
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@@ -4347,6 +4347,7 @@ dependencies = [
 | 
			
		||||
 "gag 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "indicatif 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "reqwest 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "solana-clap-utils 0.23.0",
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ chrono = { version = "0.4.10", features = ["serde"] }
 | 
			
		||||
console = "0.9.1"
 | 
			
		||||
log = "0.4.8"
 | 
			
		||||
indicatif = "0.13.0"
 | 
			
		||||
rand = "0.6.5"
 | 
			
		||||
reqwest = { version = "0.10.1", default-features = false, features = ["blocking"] }
 | 
			
		||||
serde_json = "1.0.44"
 | 
			
		||||
solana-clap-utils = { path = "../clap-utils", version = "0.23.0" }
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ use clap::{crate_description, crate_name, value_t, value_t_or_exit, App, Arg};
 | 
			
		||||
use console::{style, Emoji};
 | 
			
		||||
use indicatif::{ProgressBar, ProgressStyle};
 | 
			
		||||
use log::*;
 | 
			
		||||
use rand::{thread_rng, Rng};
 | 
			
		||||
use solana_clap_utils::{
 | 
			
		||||
    input_parsers::pubkey_of,
 | 
			
		||||
    input_validators::{is_keypair, is_pubkey_or_keypair},
 | 
			
		||||
@@ -217,15 +218,16 @@ fn get_rpc_addr(
 | 
			
		||||
            .any(|contact_info| contact_info.gossip == *entrypoint_gossip);
 | 
			
		||||
 | 
			
		||||
        if found_entrypoint & !rpc_peers.is_empty() {
 | 
			
		||||
            // Prefer the entrypoint's RPC service it it has one, otherwise pick the first RPC
 | 
			
		||||
            // service found
 | 
			
		||||
            // Prefer the entrypoint's RPC service if present, otherwise pick a node at random
 | 
			
		||||
            if let Some(contact_info) = rpc_peers
 | 
			
		||||
                .iter()
 | 
			
		||||
                .find(|contact_info| contact_info.gossip == *entrypoint_gossip)
 | 
			
		||||
            {
 | 
			
		||||
                break (contact_info.id, contact_info.rpc);
 | 
			
		||||
            }
 | 
			
		||||
            break (rpc_peers[0].id, rpc_peers[0].rpc);
 | 
			
		||||
 | 
			
		||||
            let i = thread_rng().gen_range(0, rpc_peers.len());
 | 
			
		||||
            break (rpc_peers[i].id, rpc_peers[i].rpc);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sleep(Duration::from_secs(1));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user