parent
dfa6fbaa0c
commit
ecb055a252
|
@ -1420,23 +1420,13 @@ impl ClusterInfo {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gossip_contact_info(id: &Pubkey, gossip_addr: SocketAddr) -> ContactInfo {
|
fn gossip_contact_info(id: &Pubkey, gossip: SocketAddr) -> ContactInfo {
|
||||||
let dummy_addr = socketaddr_any!();
|
ContactInfo {
|
||||||
|
id: *id,
|
||||||
ContactInfo::new(
|
gossip,
|
||||||
id,
|
wallclock: timestamp(),
|
||||||
gossip_addr,
|
..ContactInfo::default()
|
||||||
dummy_addr,
|
}
|
||||||
dummy_addr,
|
|
||||||
dummy_addr,
|
|
||||||
dummy_addr,
|
|
||||||
dummy_addr,
|
|
||||||
dummy_addr,
|
|
||||||
dummy_addr,
|
|
||||||
dummy_addr,
|
|
||||||
dummy_addr,
|
|
||||||
timestamp(),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn spy_contact_info(id: &Pubkey) -> ContactInfo {
|
pub fn spy_contact_info(id: &Pubkey) -> ContactInfo {
|
||||||
|
@ -1540,20 +1530,21 @@ impl Node {
|
||||||
let retransmit = UdpSocket::bind("0.0.0.0:0").unwrap();
|
let retransmit = UdpSocket::bind("0.0.0.0:0").unwrap();
|
||||||
let serve_repair = UdpSocket::bind("127.0.0.1:0").unwrap();
|
let serve_repair = UdpSocket::bind("127.0.0.1:0").unwrap();
|
||||||
|
|
||||||
let info = ContactInfo::new(
|
let info = ContactInfo {
|
||||||
pubkey,
|
id: *pubkey,
|
||||||
gossip.local_addr().unwrap(),
|
gossip: gossip.local_addr().unwrap(),
|
||||||
tvu.local_addr().unwrap(),
|
tvu: tvu.local_addr().unwrap(),
|
||||||
tvu_forwards.local_addr().unwrap(),
|
tvu_forwards: tvu_forwards.local_addr().unwrap(),
|
||||||
repair.local_addr().unwrap(),
|
repair: repair.local_addr().unwrap(),
|
||||||
empty,
|
tpu: empty,
|
||||||
empty,
|
tpu_forwards: empty,
|
||||||
storage.local_addr().unwrap(),
|
storage_addr: storage.local_addr().unwrap(),
|
||||||
empty,
|
rpc: empty,
|
||||||
empty,
|
rpc_pubsub: empty,
|
||||||
serve_repair.local_addr().unwrap(),
|
serve_repair: serve_repair.local_addr().unwrap(),
|
||||||
timestamp(),
|
wallclock: timestamp(),
|
||||||
);
|
shred_version: 0,
|
||||||
|
};
|
||||||
|
|
||||||
Node {
|
Node {
|
||||||
info,
|
info,
|
||||||
|
@ -1590,20 +1581,21 @@ impl Node {
|
||||||
let retransmit_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
|
let retransmit_socket = UdpSocket::bind("0.0.0.0:0").unwrap();
|
||||||
let storage = UdpSocket::bind("0.0.0.0:0").unwrap();
|
let storage = UdpSocket::bind("0.0.0.0:0").unwrap();
|
||||||
let serve_repair = UdpSocket::bind("127.0.0.1:0").unwrap();
|
let serve_repair = UdpSocket::bind("127.0.0.1:0").unwrap();
|
||||||
let info = ContactInfo::new(
|
let info = ContactInfo {
|
||||||
pubkey,
|
id: *pubkey,
|
||||||
gossip_addr,
|
gossip: gossip_addr,
|
||||||
tvu.local_addr().unwrap(),
|
tvu: tvu.local_addr().unwrap(),
|
||||||
tvu_forwards.local_addr().unwrap(),
|
tvu_forwards: tvu_forwards.local_addr().unwrap(),
|
||||||
repair.local_addr().unwrap(),
|
repair: repair.local_addr().unwrap(),
|
||||||
tpu.local_addr().unwrap(),
|
tpu: tpu.local_addr().unwrap(),
|
||||||
tpu_forwards.local_addr().unwrap(),
|
tpu_forwards: tpu_forwards.local_addr().unwrap(),
|
||||||
storage.local_addr().unwrap(),
|
storage_addr: storage.local_addr().unwrap(),
|
||||||
rpc_addr,
|
rpc: rpc_addr,
|
||||||
rpc_pubsub_addr,
|
rpc_pubsub: rpc_pubsub_addr,
|
||||||
serve_repair.local_addr().unwrap(),
|
serve_repair: serve_repair.local_addr().unwrap(),
|
||||||
timestamp(),
|
wallclock: timestamp(),
|
||||||
);
|
shred_version: 0,
|
||||||
|
};
|
||||||
Node {
|
Node {
|
||||||
info,
|
info,
|
||||||
sockets: Sockets {
|
sockets: Sockets {
|
||||||
|
@ -1664,20 +1656,21 @@ impl Node {
|
||||||
|
|
||||||
let (_, broadcast) = multi_bind_in_range(port_range, 4).expect("broadcast multi_bind");
|
let (_, broadcast) = multi_bind_in_range(port_range, 4).expect("broadcast multi_bind");
|
||||||
|
|
||||||
let info = ContactInfo::new(
|
let info = ContactInfo {
|
||||||
pubkey,
|
id: *pubkey,
|
||||||
SocketAddr::new(gossip_addr.ip(), gossip_port),
|
gossip: SocketAddr::new(gossip_addr.ip(), gossip_port),
|
||||||
SocketAddr::new(gossip_addr.ip(), tvu_port),
|
tvu: SocketAddr::new(gossip_addr.ip(), tvu_port),
|
||||||
SocketAddr::new(gossip_addr.ip(), tvu_forwards_port),
|
tvu_forwards: SocketAddr::new(gossip_addr.ip(), tvu_forwards_port),
|
||||||
SocketAddr::new(gossip_addr.ip(), repair_port),
|
repair: SocketAddr::new(gossip_addr.ip(), repair_port),
|
||||||
SocketAddr::new(gossip_addr.ip(), tpu_port),
|
tpu: SocketAddr::new(gossip_addr.ip(), tpu_port),
|
||||||
SocketAddr::new(gossip_addr.ip(), tpu_forwards_port),
|
tpu_forwards: SocketAddr::new(gossip_addr.ip(), tpu_forwards_port),
|
||||||
socketaddr_any!(),
|
storage_addr: socketaddr_any!(),
|
||||||
socketaddr_any!(),
|
rpc: socketaddr_any!(),
|
||||||
socketaddr_any!(),
|
rpc_pubsub: socketaddr_any!(),
|
||||||
SocketAddr::new(gossip_addr.ip(), serve_repair_port),
|
serve_repair: SocketAddr::new(gossip_addr.ip(), serve_repair_port),
|
||||||
0,
|
wallclock: 0,
|
||||||
);
|
shred_version: 0,
|
||||||
|
};
|
||||||
trace!("new ContactInfo: {:?}", info);
|
trace!("new ContactInfo: {:?}", info);
|
||||||
|
|
||||||
Node {
|
Node {
|
||||||
|
|
|
@ -95,74 +95,44 @@ impl Default for ContactInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ContactInfo {
|
impl ContactInfo {
|
||||||
#[allow(clippy::too_many_arguments)]
|
pub fn new_localhost(id: &Pubkey, now: u64) -> Self {
|
||||||
pub fn new(
|
|
||||||
id: &Pubkey,
|
|
||||||
gossip: SocketAddr,
|
|
||||||
tvu: SocketAddr,
|
|
||||||
tvu_forwards: SocketAddr,
|
|
||||||
repair: SocketAddr,
|
|
||||||
tpu: SocketAddr,
|
|
||||||
tpu_forwards: SocketAddr,
|
|
||||||
storage_addr: SocketAddr,
|
|
||||||
rpc: SocketAddr,
|
|
||||||
rpc_pubsub: SocketAddr,
|
|
||||||
serve_repair: SocketAddr,
|
|
||||||
now: u64,
|
|
||||||
) -> Self {
|
|
||||||
Self {
|
Self {
|
||||||
id: *id,
|
id: *id,
|
||||||
gossip,
|
gossip: socketaddr!("127.0.0.1:1234"),
|
||||||
tvu,
|
tvu: socketaddr!("127.0.0.1:1235"),
|
||||||
tvu_forwards,
|
tvu_forwards: socketaddr!("127.0.0.1:1236"),
|
||||||
repair,
|
repair: socketaddr!("127.0.0.1:1237"),
|
||||||
tpu,
|
tpu: socketaddr!("127.0.0.1:1238"),
|
||||||
tpu_forwards,
|
tpu_forwards: socketaddr!("127.0.0.1:1239"),
|
||||||
storage_addr,
|
storage_addr: socketaddr!("127.0.0.1:1240"),
|
||||||
rpc,
|
rpc: socketaddr!("127.0.0.1:1241"),
|
||||||
rpc_pubsub,
|
rpc_pubsub: socketaddr!("127.0.0.1:1242"),
|
||||||
serve_repair,
|
serve_repair: socketaddr!("127.0.0.1:1243"),
|
||||||
wallclock: now,
|
wallclock: now,
|
||||||
shred_version: 0,
|
shred_version: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_localhost(id: &Pubkey, now: u64) -> Self {
|
|
||||||
Self::new(
|
|
||||||
id,
|
|
||||||
socketaddr!("127.0.0.1:1234"),
|
|
||||||
socketaddr!("127.0.0.1:1235"),
|
|
||||||
socketaddr!("127.0.0.1:1236"),
|
|
||||||
socketaddr!("127.0.0.1:1237"),
|
|
||||||
socketaddr!("127.0.0.1:1238"),
|
|
||||||
socketaddr!("127.0.0.1:1239"),
|
|
||||||
socketaddr!("127.0.0.1:1240"),
|
|
||||||
socketaddr!("127.0.0.1:1241"),
|
|
||||||
socketaddr!("127.0.0.1:1242"),
|
|
||||||
socketaddr!("127.0.0.1:1243"),
|
|
||||||
now,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
/// ContactInfo with multicast addresses for adversarial testing.
|
/// ContactInfo with multicast addresses for adversarial testing.
|
||||||
pub fn new_multicast() -> Self {
|
pub fn new_multicast() -> Self {
|
||||||
let addr = socketaddr!("224.0.1.255:1000");
|
let addr = socketaddr!("224.0.1.255:1000");
|
||||||
assert!(addr.ip().is_multicast());
|
assert!(addr.ip().is_multicast());
|
||||||
Self::new(
|
Self {
|
||||||
&Pubkey::new_rand(),
|
id: Pubkey::new_rand(),
|
||||||
addr,
|
gossip: addr,
|
||||||
addr,
|
tvu: addr,
|
||||||
addr,
|
tvu_forwards: addr,
|
||||||
addr,
|
repair: addr,
|
||||||
addr,
|
tpu: addr,
|
||||||
addr,
|
tpu_forwards: addr,
|
||||||
addr,
|
storage_addr: addr,
|
||||||
addr,
|
rpc: addr,
|
||||||
addr,
|
rpc_pubsub: addr,
|
||||||
addr,
|
serve_repair: addr,
|
||||||
0,
|
wallclock: 0,
|
||||||
)
|
shred_version: 0,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -173,29 +143,30 @@ impl ContactInfo {
|
||||||
nxt_addr
|
nxt_addr
|
||||||
}
|
}
|
||||||
|
|
||||||
let tpu_addr = *bind_addr;
|
let tpu = *bind_addr;
|
||||||
let gossip_addr = next_port(&bind_addr, 1);
|
let gossip = next_port(&bind_addr, 1);
|
||||||
let tvu_addr = next_port(&bind_addr, 2);
|
let tvu = next_port(&bind_addr, 2);
|
||||||
let tpu_forwards_addr = next_port(&bind_addr, 3);
|
let tpu_forwards = next_port(&bind_addr, 3);
|
||||||
let tvu_forwards_addr = next_port(&bind_addr, 4);
|
let tvu_forwards = next_port(&bind_addr, 4);
|
||||||
let repair = next_port(&bind_addr, 5);
|
let repair = next_port(&bind_addr, 5);
|
||||||
let rpc_addr = SocketAddr::new(bind_addr.ip(), rpc_port::DEFAULT_RPC_PORT);
|
let rpc = SocketAddr::new(bind_addr.ip(), rpc_port::DEFAULT_RPC_PORT);
|
||||||
let rpc_pubsub_addr = SocketAddr::new(bind_addr.ip(), rpc_port::DEFAULT_RPC_PUBSUB_PORT);
|
let rpc_pubsub = SocketAddr::new(bind_addr.ip(), rpc_port::DEFAULT_RPC_PUBSUB_PORT);
|
||||||
let serve_repair = next_port(&bind_addr, 6);
|
let serve_repair = next_port(&bind_addr, 6);
|
||||||
Self::new(
|
Self {
|
||||||
pubkey,
|
id: *pubkey,
|
||||||
gossip_addr,
|
gossip,
|
||||||
tvu_addr,
|
tvu,
|
||||||
tvu_forwards_addr,
|
tvu_forwards,
|
||||||
repair,
|
repair,
|
||||||
tpu_addr,
|
tpu,
|
||||||
tpu_forwards_addr,
|
tpu_forwards,
|
||||||
"0.0.0.0:0".parse().unwrap(),
|
storage_addr: "0.0.0.0:0".parse().unwrap(),
|
||||||
rpc_addr,
|
rpc,
|
||||||
rpc_pubsub_addr,
|
rpc_pubsub,
|
||||||
serve_repair,
|
serve_repair,
|
||||||
timestamp(),
|
wallclock: timestamp(),
|
||||||
)
|
shred_version: 0,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -206,21 +177,12 @@ impl ContactInfo {
|
||||||
|
|
||||||
// Construct a ContactInfo that's only usable for gossip
|
// Construct a ContactInfo that's only usable for gossip
|
||||||
pub fn new_gossip_entry_point(gossip_addr: &SocketAddr) -> Self {
|
pub fn new_gossip_entry_point(gossip_addr: &SocketAddr) -> Self {
|
||||||
let daddr: SocketAddr = socketaddr!("0.0.0.0:0");
|
Self {
|
||||||
Self::new(
|
id: Pubkey::default(),
|
||||||
&Pubkey::default(),
|
gossip: *gossip_addr,
|
||||||
*gossip_addr,
|
wallclock: timestamp(),
|
||||||
daddr,
|
..ContactInfo::default()
|
||||||
daddr,
|
}
|
||||||
daddr,
|
|
||||||
daddr,
|
|
||||||
daddr,
|
|
||||||
daddr,
|
|
||||||
daddr,
|
|
||||||
daddr,
|
|
||||||
daddr,
|
|
||||||
timestamp(),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_valid_ip(addr: IpAddr) -> bool {
|
fn is_valid_ip(addr: IpAddr) -> bool {
|
||||||
|
|
|
@ -498,20 +498,21 @@ mod tests {
|
||||||
let ledger_path = get_tmp_ledger_path!();
|
let ledger_path = get_tmp_ledger_path!();
|
||||||
{
|
{
|
||||||
let blockstore = Arc::new(Blockstore::open(&ledger_path).unwrap());
|
let blockstore = Arc::new(Blockstore::open(&ledger_path).unwrap());
|
||||||
let me = ContactInfo::new(
|
let me = ContactInfo {
|
||||||
&Pubkey::new_rand(),
|
id: Pubkey::new_rand(),
|
||||||
socketaddr!("127.0.0.1:1234"),
|
gossip: socketaddr!("127.0.0.1:1234"),
|
||||||
socketaddr!("127.0.0.1:1235"),
|
tvu: socketaddr!("127.0.0.1:1235"),
|
||||||
socketaddr!("127.0.0.1:1236"),
|
tvu_forwards: socketaddr!("127.0.0.1:1236"),
|
||||||
socketaddr!("127.0.0.1:1237"),
|
repair: socketaddr!("127.0.0.1:1237"),
|
||||||
socketaddr!("127.0.0.1:1238"),
|
tpu: socketaddr!("127.0.0.1:1238"),
|
||||||
socketaddr!("127.0.0.1:1239"),
|
tpu_forwards: socketaddr!("127.0.0.1:1239"),
|
||||||
socketaddr!("127.0.0.1:1240"),
|
storage_addr: socketaddr!("127.0.0.1:1240"),
|
||||||
socketaddr!("127.0.0.1:1241"),
|
rpc: socketaddr!("127.0.0.1:1241"),
|
||||||
socketaddr!("127.0.0.1:1242"),
|
rpc_pubsub: socketaddr!("127.0.0.1:1242"),
|
||||||
socketaddr!("127.0.0.1:1243"),
|
serve_repair: socketaddr!("127.0.0.1:1243"),
|
||||||
0,
|
wallclock: 0,
|
||||||
);
|
shred_version: 0,
|
||||||
|
};
|
||||||
let rv = ServeRepair::run_window_request(
|
let rv = ServeRepair::run_window_request(
|
||||||
&recycler,
|
&recycler,
|
||||||
&me,
|
&me,
|
||||||
|
@ -569,20 +570,21 @@ mod tests {
|
||||||
assert_matches!(rv, Err(Error::ClusterInfoError(ClusterInfoError::NoPeers)));
|
assert_matches!(rv, Err(Error::ClusterInfoError(ClusterInfoError::NoPeers)));
|
||||||
|
|
||||||
let serve_repair_addr = socketaddr!([127, 0, 0, 1], 1243);
|
let serve_repair_addr = socketaddr!([127, 0, 0, 1], 1243);
|
||||||
let nxt = ContactInfo::new(
|
let nxt = ContactInfo {
|
||||||
&Pubkey::new_rand(),
|
id: Pubkey::new_rand(),
|
||||||
socketaddr!([127, 0, 0, 1], 1234),
|
gossip: socketaddr!([127, 0, 0, 1], 1234),
|
||||||
socketaddr!([127, 0, 0, 1], 1235),
|
tvu: socketaddr!([127, 0, 0, 1], 1235),
|
||||||
socketaddr!([127, 0, 0, 1], 1236),
|
tvu_forwards: socketaddr!([127, 0, 0, 1], 1236),
|
||||||
socketaddr!([127, 0, 0, 1], 1237),
|
repair: socketaddr!([127, 0, 0, 1], 1237),
|
||||||
socketaddr!([127, 0, 0, 1], 1238),
|
tpu: socketaddr!([127, 0, 0, 1], 1238),
|
||||||
socketaddr!([127, 0, 0, 1], 1239),
|
tpu_forwards: socketaddr!([127, 0, 0, 1], 1239),
|
||||||
socketaddr!([127, 0, 0, 1], 1240),
|
storage_addr: socketaddr!([127, 0, 0, 1], 1240),
|
||||||
socketaddr!([127, 0, 0, 1], 1241),
|
rpc: socketaddr!([127, 0, 0, 1], 1241),
|
||||||
socketaddr!([127, 0, 0, 1], 1242),
|
rpc_pubsub: socketaddr!([127, 0, 0, 1], 1242),
|
||||||
serve_repair_addr,
|
serve_repair: serve_repair_addr,
|
||||||
0,
|
wallclock: 0,
|
||||||
);
|
shred_version: 0,
|
||||||
|
};
|
||||||
cluster_info.write().unwrap().insert_info(nxt.clone());
|
cluster_info.write().unwrap().insert_info(nxt.clone());
|
||||||
let rv = serve_repair
|
let rv = serve_repair
|
||||||
.repair_request(&RepairType::Shred(0, 0))
|
.repair_request(&RepairType::Shred(0, 0))
|
||||||
|
@ -591,20 +593,21 @@ mod tests {
|
||||||
assert_eq!(rv.0, nxt.serve_repair);
|
assert_eq!(rv.0, nxt.serve_repair);
|
||||||
|
|
||||||
let serve_repair_addr2 = socketaddr!([127, 0, 0, 2], 1243);
|
let serve_repair_addr2 = socketaddr!([127, 0, 0, 2], 1243);
|
||||||
let nxt = ContactInfo::new(
|
let nxt = ContactInfo {
|
||||||
&Pubkey::new_rand(),
|
id: Pubkey::new_rand(),
|
||||||
socketaddr!([127, 0, 0, 1], 1234),
|
gossip: socketaddr!([127, 0, 0, 1], 1234),
|
||||||
socketaddr!([127, 0, 0, 1], 1235),
|
tvu: socketaddr!([127, 0, 0, 1], 1235),
|
||||||
socketaddr!([127, 0, 0, 1], 1236),
|
tvu_forwards: socketaddr!([127, 0, 0, 1], 1236),
|
||||||
socketaddr!([127, 0, 0, 1], 1237),
|
repair: socketaddr!([127, 0, 0, 1], 1237),
|
||||||
socketaddr!([127, 0, 0, 1], 1238),
|
tpu: socketaddr!([127, 0, 0, 1], 1238),
|
||||||
socketaddr!([127, 0, 0, 1], 1239),
|
tpu_forwards: socketaddr!([127, 0, 0, 1], 1239),
|
||||||
socketaddr!([127, 0, 0, 1], 1240),
|
storage_addr: socketaddr!([127, 0, 0, 1], 1240),
|
||||||
socketaddr!([127, 0, 0, 1], 1241),
|
rpc: socketaddr!([127, 0, 0, 1], 1241),
|
||||||
socketaddr!([127, 0, 0, 1], 1242),
|
rpc_pubsub: socketaddr!([127, 0, 0, 1], 1242),
|
||||||
serve_repair_addr2,
|
serve_repair: serve_repair_addr2,
|
||||||
0,
|
wallclock: 0,
|
||||||
);
|
shred_version: 0,
|
||||||
|
};
|
||||||
cluster_info.write().unwrap().insert_info(nxt);
|
cluster_info.write().unwrap().insert_info(nxt);
|
||||||
let mut one = false;
|
let mut one = false;
|
||||||
let mut two = false;
|
let mut two = false;
|
||||||
|
|
Loading…
Reference in New Issue