fix #1079
* move gossip/NCP off assuming anything about its address * use a single socket to send and receive gossip * remove --addr/-a from CLIs * rearrange networking utility code * use Arc<UdpSocket> to share the Sync-safe UdpSocket among threads * rename TestNode to Node TODO: * re-enable 127.0.0.1 as a valid address in crdt * change repair request/response to a similar, single socket * pick cloned sockets or Arc<UdpSocket> for all these (rpu uses tryclone()) * update contact_info with network truthiness instead of what the node says?
This commit is contained in:
@@ -15,14 +15,12 @@ use solana::drone::{Drone, DroneRequest, DRONE_PORT};
|
||||
use solana::fullnode::Config;
|
||||
use solana::logger;
|
||||
use solana::metrics::set_panic_hook;
|
||||
use solana::nat::get_public_ip_addr;
|
||||
use solana::signature::read_keypair;
|
||||
use solana::thin_client::poll_gossip_for_leader;
|
||||
use std::error;
|
||||
use std::fs::File;
|
||||
use std::io;
|
||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
|
||||
use std::process::exit;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::thread;
|
||||
use tokio::net::TcpListener;
|
||||
@@ -72,28 +70,8 @@ fn main() -> Result<(), Box<error::Error>> {
|
||||
.takes_value(true)
|
||||
.help("Max SECONDS to wait to get necessary gossip from the network"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("addr")
|
||||
.short("a")
|
||||
.long("addr")
|
||||
.value_name("IPADDR")
|
||||
.takes_value(true)
|
||||
.help("address to advertise to the network"),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
let addr = if let Some(s) = matches.value_of("addr") {
|
||||
s.to_string().parse().unwrap_or_else(|e| {
|
||||
eprintln!("failed to parse {} as IP address error: {:?}", s, e);
|
||||
exit(1);
|
||||
})
|
||||
} else {
|
||||
get_public_ip_addr().unwrap_or_else(|e| {
|
||||
eprintln!("failed to get public IP, try --addr? error: {:?}", e);
|
||||
exit(1);
|
||||
})
|
||||
};
|
||||
|
||||
let leader: NodeInfo;
|
||||
if let Some(l) = matches.value_of("leader") {
|
||||
leader = read_leader(l).node_info;
|
||||
@@ -124,9 +102,11 @@ fn main() -> Result<(), Box<error::Error>> {
|
||||
timeout = None;
|
||||
}
|
||||
|
||||
let leader = poll_gossip_for_leader(leader.contact_info.ncp, timeout, addr)?;
|
||||
|
||||
eprintln!("hioisdlflkj");
|
||||
let drone_addr: SocketAddr = format!("0.0.0.0:{}", DRONE_PORT).parse().unwrap();
|
||||
let socket = TcpListener::bind(&drone_addr).unwrap();
|
||||
|
||||
let leader = poll_gossip_for_leader(leader.contact_info.ncp, timeout)?;
|
||||
|
||||
let drone = Arc::new(Mutex::new(Drone::new(
|
||||
mint_keypair,
|
||||
@@ -144,7 +124,6 @@ fn main() -> Result<(), Box<error::Error>> {
|
||||
drone1.lock().unwrap().clear_request_count();
|
||||
});
|
||||
|
||||
let socket = TcpListener::bind(&drone_addr).unwrap();
|
||||
println!("Drone started. Listening on: {}", drone_addr);
|
||||
let done = socket
|
||||
.incoming()
|
||||
|
Reference in New Issue
Block a user