Send repairman shreds to the repair socket (#6671)
This commit is contained in:
parent
2e30926ac3
commit
2d67962c2f
|
@ -1507,6 +1507,7 @@ impl ClusterInfo {
|
||||||
daddr,
|
daddr,
|
||||||
daddr,
|
daddr,
|
||||||
daddr,
|
daddr,
|
||||||
|
daddr,
|
||||||
timestamp(),
|
timestamp(),
|
||||||
);
|
);
|
||||||
(node, gossip_socket, Some(ip_echo))
|
(node, gossip_socket, Some(ip_echo))
|
||||||
|
@ -1527,6 +1528,7 @@ impl ClusterInfo {
|
||||||
daddr,
|
daddr,
|
||||||
daddr,
|
daddr,
|
||||||
daddr,
|
daddr,
|
||||||
|
daddr,
|
||||||
timestamp(),
|
timestamp(),
|
||||||
);
|
);
|
||||||
(node, gossip_socket, None)
|
(node, gossip_socket, None)
|
||||||
|
@ -1610,6 +1612,7 @@ impl Node {
|
||||||
gossip.local_addr().unwrap(),
|
gossip.local_addr().unwrap(),
|
||||||
tvu.local_addr().unwrap(),
|
tvu.local_addr().unwrap(),
|
||||||
tvu_forwards.local_addr().unwrap(),
|
tvu_forwards.local_addr().unwrap(),
|
||||||
|
repair.local_addr().unwrap(),
|
||||||
empty,
|
empty,
|
||||||
empty,
|
empty,
|
||||||
storage.local_addr().unwrap(),
|
storage.local_addr().unwrap(),
|
||||||
|
@ -1658,6 +1661,7 @@ impl Node {
|
||||||
tvu_forwards.local_addr().unwrap(),
|
tvu_forwards.local_addr().unwrap(),
|
||||||
tpu.local_addr().unwrap(),
|
tpu.local_addr().unwrap(),
|
||||||
tpu_forwards.local_addr().unwrap(),
|
tpu_forwards.local_addr().unwrap(),
|
||||||
|
repair.local_addr().unwrap(),
|
||||||
storage.local_addr().unwrap(),
|
storage.local_addr().unwrap(),
|
||||||
rpc_addr,
|
rpc_addr,
|
||||||
rpc_pubsub_addr,
|
rpc_pubsub_addr,
|
||||||
|
@ -1717,7 +1721,7 @@ impl Node {
|
||||||
let (_, retransmit_sockets) =
|
let (_, retransmit_sockets) =
|
||||||
multi_bind_in_range(port_range, 8).expect("retransmit multi_bind");
|
multi_bind_in_range(port_range, 8).expect("retransmit multi_bind");
|
||||||
|
|
||||||
let (_, repair) = Self::bind(port_range);
|
let (repair_port, repair) = Self::bind(port_range);
|
||||||
let (_, broadcast) = Self::bind(port_range);
|
let (_, broadcast) = Self::bind(port_range);
|
||||||
|
|
||||||
let info = ContactInfo::new(
|
let info = ContactInfo::new(
|
||||||
|
@ -1725,6 +1729,7 @@ impl Node {
|
||||||
SocketAddr::new(gossip_addr.ip(), gossip_port),
|
SocketAddr::new(gossip_addr.ip(), gossip_port),
|
||||||
SocketAddr::new(gossip_addr.ip(), tvu_port),
|
SocketAddr::new(gossip_addr.ip(), tvu_port),
|
||||||
SocketAddr::new(gossip_addr.ip(), tvu_forwards_port),
|
SocketAddr::new(gossip_addr.ip(), tvu_forwards_port),
|
||||||
|
SocketAddr::new(gossip_addr.ip(), repair_port),
|
||||||
SocketAddr::new(gossip_addr.ip(), tpu_port),
|
SocketAddr::new(gossip_addr.ip(), tpu_port),
|
||||||
SocketAddr::new(gossip_addr.ip(), tpu_forwards_port),
|
SocketAddr::new(gossip_addr.ip(), tpu_forwards_port),
|
||||||
socketaddr_any!(),
|
socketaddr_any!(),
|
||||||
|
@ -1882,6 +1887,7 @@ mod tests {
|
||||||
socketaddr!([127, 0, 0, 1], 1239),
|
socketaddr!([127, 0, 0, 1], 1239),
|
||||||
socketaddr!([127, 0, 0, 1], 1240),
|
socketaddr!([127, 0, 0, 1], 1240),
|
||||||
socketaddr!([127, 0, 0, 1], 1241),
|
socketaddr!([127, 0, 0, 1], 1241),
|
||||||
|
socketaddr!([127, 0, 0, 1], 1242),
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
cluster_info.insert_info(nxt.clone());
|
cluster_info.insert_info(nxt.clone());
|
||||||
|
@ -1902,6 +1908,7 @@ mod tests {
|
||||||
socketaddr!([127, 0, 0, 1], 1239),
|
socketaddr!([127, 0, 0, 1], 1239),
|
||||||
socketaddr!([127, 0, 0, 1], 1240),
|
socketaddr!([127, 0, 0, 1], 1240),
|
||||||
socketaddr!([127, 0, 0, 1], 1241),
|
socketaddr!([127, 0, 0, 1], 1241),
|
||||||
|
socketaddr!([127, 0, 0, 1], 1242),
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
cluster_info.insert_info(nxt);
|
cluster_info.insert_info(nxt);
|
||||||
|
@ -1939,6 +1946,7 @@ mod tests {
|
||||||
socketaddr!("127.0.0.1:1239"),
|
socketaddr!("127.0.0.1:1239"),
|
||||||
socketaddr!("127.0.0.1:1240"),
|
socketaddr!("127.0.0.1:1240"),
|
||||||
socketaddr!("127.0.0.1:1241"),
|
socketaddr!("127.0.0.1:1241"),
|
||||||
|
socketaddr!("127.0.0.1:1242"),
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
let rv = ClusterInfo::run_window_request(
|
let rv = ClusterInfo::run_window_request(
|
||||||
|
|
|
@ -210,13 +210,13 @@ impl ClusterInfoRepairListener {
|
||||||
for (repairee_pubkey, repairee_epoch_slots) in repairees {
|
for (repairee_pubkey, repairee_epoch_slots) in repairees {
|
||||||
let repairee_root = repairee_epoch_slots.root;
|
let repairee_root = repairee_epoch_slots.root;
|
||||||
|
|
||||||
let repairee_tvu = {
|
let repairee_repair_addr = {
|
||||||
let r_cluster_info = cluster_info.read().unwrap();
|
let r_cluster_info = cluster_info.read().unwrap();
|
||||||
let contact_info = r_cluster_info.get_contact_info_for_node(repairee_pubkey);
|
let contact_info = r_cluster_info.get_contact_info_for_node(repairee_pubkey);
|
||||||
contact_info.map(|c| c.tvu)
|
contact_info.map(|c| c.repair)
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(repairee_tvu) = repairee_tvu {
|
if let Some(repairee_addr) = repairee_repair_addr {
|
||||||
// For every repairee, get the set of repairmen who are responsible for
|
// For every repairee, get the set of repairmen who are responsible for
|
||||||
let mut eligible_repairmen = Self::find_eligible_repairmen(
|
let mut eligible_repairmen = Self::find_eligible_repairmen(
|
||||||
my_pubkey,
|
my_pubkey,
|
||||||
|
@ -242,7 +242,7 @@ impl ClusterInfoRepairListener {
|
||||||
&repairee_epoch_slots,
|
&repairee_epoch_slots,
|
||||||
&eligible_repairmen,
|
&eligible_repairmen,
|
||||||
socket,
|
socket,
|
||||||
&repairee_tvu,
|
&repairee_addr,
|
||||||
NUM_SLOTS_PER_UPDATE,
|
NUM_SLOTS_PER_UPDATE,
|
||||||
epoch_schedule,
|
epoch_schedule,
|
||||||
);
|
);
|
||||||
|
@ -261,7 +261,7 @@ impl ClusterInfoRepairListener {
|
||||||
repairee_epoch_slots: &EpochSlots,
|
repairee_epoch_slots: &EpochSlots,
|
||||||
eligible_repairmen: &[&Pubkey],
|
eligible_repairmen: &[&Pubkey],
|
||||||
socket: &UdpSocket,
|
socket: &UdpSocket,
|
||||||
repairee_tvu: &SocketAddr,
|
repairee_addr: &SocketAddr,
|
||||||
num_slots_to_repair: usize,
|
num_slots_to_repair: usize,
|
||||||
epoch_schedule: &EpochSchedule,
|
epoch_schedule: &EpochSchedule,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
|
@ -320,7 +320,7 @@ impl ClusterInfoRepairListener {
|
||||||
.get_data_shred(slot, blob_index as u64)
|
.get_data_shred(slot, blob_index as u64)
|
||||||
.expect("Failed to read data blob from blocktree")
|
.expect("Failed to read data blob from blocktree")
|
||||||
{
|
{
|
||||||
socket.send_to(&blob_data[..], repairee_tvu)?;
|
socket.send_to(&blob_data[..], repairee_addr)?;
|
||||||
total_data_blobs_sent += 1;
|
total_data_blobs_sent += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,7 +328,7 @@ impl ClusterInfoRepairListener {
|
||||||
.get_coding_shred(slot, blob_index as u64)
|
.get_coding_shred(slot, blob_index as u64)
|
||||||
.expect("Failed to read coding blob from blocktree")
|
.expect("Failed to read coding blob from blocktree")
|
||||||
{
|
{
|
||||||
socket.send_to(&coding_bytes[..], repairee_tvu)?;
|
socket.send_to(&coding_bytes[..], repairee_addr)?;
|
||||||
total_coding_blobs_sent += 1;
|
total_coding_blobs_sent += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,10 @@ pub struct ContactInfo {
|
||||||
pub gossip: SocketAddr,
|
pub gossip: SocketAddr,
|
||||||
/// address to connect to for replication
|
/// address to connect to for replication
|
||||||
pub tvu: SocketAddr,
|
pub tvu: SocketAddr,
|
||||||
/// address to forward blobs to
|
/// address to forward shreds to
|
||||||
pub tvu_forwards: SocketAddr,
|
pub tvu_forwards: SocketAddr,
|
||||||
|
/// address to send repairs to
|
||||||
|
pub repair: SocketAddr,
|
||||||
/// transactions address
|
/// transactions address
|
||||||
pub tpu: SocketAddr,
|
pub tpu: SocketAddr,
|
||||||
/// address to forward unprocessed transactions to
|
/// address to forward unprocessed transactions to
|
||||||
|
@ -80,6 +82,7 @@ impl Default for ContactInfo {
|
||||||
gossip: socketaddr_any!(),
|
gossip: socketaddr_any!(),
|
||||||
tvu: socketaddr_any!(),
|
tvu: socketaddr_any!(),
|
||||||
tvu_forwards: socketaddr_any!(),
|
tvu_forwards: socketaddr_any!(),
|
||||||
|
repair: socketaddr_any!(),
|
||||||
tpu: socketaddr_any!(),
|
tpu: socketaddr_any!(),
|
||||||
tpu_forwards: socketaddr_any!(),
|
tpu_forwards: socketaddr_any!(),
|
||||||
storage_addr: socketaddr_any!(),
|
storage_addr: socketaddr_any!(),
|
||||||
|
@ -98,6 +101,7 @@ impl ContactInfo {
|
||||||
gossip: SocketAddr,
|
gossip: SocketAddr,
|
||||||
tvu: SocketAddr,
|
tvu: SocketAddr,
|
||||||
tvu_forwards: SocketAddr,
|
tvu_forwards: SocketAddr,
|
||||||
|
repair: SocketAddr,
|
||||||
tpu: SocketAddr,
|
tpu: SocketAddr,
|
||||||
tpu_forwards: SocketAddr,
|
tpu_forwards: SocketAddr,
|
||||||
storage_addr: SocketAddr,
|
storage_addr: SocketAddr,
|
||||||
|
@ -111,6 +115,7 @@ impl ContactInfo {
|
||||||
gossip,
|
gossip,
|
||||||
tvu,
|
tvu,
|
||||||
tvu_forwards,
|
tvu_forwards,
|
||||||
|
repair,
|
||||||
tpu,
|
tpu,
|
||||||
tpu_forwards,
|
tpu_forwards,
|
||||||
storage_addr,
|
storage_addr,
|
||||||
|
@ -131,6 +136,7 @@ impl ContactInfo {
|
||||||
socketaddr!("127.0.0.1:1239"),
|
socketaddr!("127.0.0.1:1239"),
|
||||||
socketaddr!("127.0.0.1:1240"),
|
socketaddr!("127.0.0.1:1240"),
|
||||||
socketaddr!("127.0.0.1:1241"),
|
socketaddr!("127.0.0.1:1241"),
|
||||||
|
socketaddr!("127.0.0.1:1242"),
|
||||||
now,
|
now,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -150,6 +156,7 @@ impl ContactInfo {
|
||||||
addr,
|
addr,
|
||||||
addr,
|
addr,
|
||||||
addr,
|
addr,
|
||||||
|
addr,
|
||||||
0,
|
0,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -167,6 +174,7 @@ impl ContactInfo {
|
||||||
let tvu_addr = next_port(&bind_addr, 2);
|
let tvu_addr = next_port(&bind_addr, 2);
|
||||||
let tpu_forwards_addr = next_port(&bind_addr, 3);
|
let tpu_forwards_addr = next_port(&bind_addr, 3);
|
||||||
let tvu_forwards_addr = next_port(&bind_addr, 4);
|
let tvu_forwards_addr = next_port(&bind_addr, 4);
|
||||||
|
let repair = next_port(&bind_addr, 5);
|
||||||
let rpc_addr = SocketAddr::new(bind_addr.ip(), rpc_port::DEFAULT_RPC_PORT);
|
let rpc_addr = 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_addr = SocketAddr::new(bind_addr.ip(), rpc_port::DEFAULT_RPC_PUBSUB_PORT);
|
||||||
Self::new(
|
Self::new(
|
||||||
|
@ -174,6 +182,7 @@ impl ContactInfo {
|
||||||
gossip_addr,
|
gossip_addr,
|
||||||
tvu_addr,
|
tvu_addr,
|
||||||
tvu_forwards_addr,
|
tvu_forwards_addr,
|
||||||
|
repair,
|
||||||
tpu_addr,
|
tpu_addr,
|
||||||
tpu_forwards_addr,
|
tpu_forwards_addr,
|
||||||
"0.0.0.0:0".parse().unwrap(),
|
"0.0.0.0:0".parse().unwrap(),
|
||||||
|
@ -202,6 +211,7 @@ impl ContactInfo {
|
||||||
daddr,
|
daddr,
|
||||||
daddr,
|
daddr,
|
||||||
daddr,
|
daddr,
|
||||||
|
daddr,
|
||||||
timestamp(),
|
timestamp(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -245,6 +255,7 @@ impl Signable for ContactInfo {
|
||||||
tvu: SocketAddr,
|
tvu: SocketAddr,
|
||||||
tpu: SocketAddr,
|
tpu: SocketAddr,
|
||||||
tpu_forwards: SocketAddr,
|
tpu_forwards: SocketAddr,
|
||||||
|
repair: SocketAddr,
|
||||||
storage_addr: SocketAddr,
|
storage_addr: SocketAddr,
|
||||||
rpc: SocketAddr,
|
rpc: SocketAddr,
|
||||||
rpc_pubsub: SocketAddr,
|
rpc_pubsub: SocketAddr,
|
||||||
|
@ -259,6 +270,7 @@ impl Signable for ContactInfo {
|
||||||
tpu: me.tpu,
|
tpu: me.tpu,
|
||||||
storage_addr: me.storage_addr,
|
storage_addr: me.storage_addr,
|
||||||
tpu_forwards: me.tpu_forwards,
|
tpu_forwards: me.tpu_forwards,
|
||||||
|
repair: me.repair,
|
||||||
rpc: me.rpc,
|
rpc: me.rpc,
|
||||||
rpc_pubsub: me.rpc_pubsub,
|
rpc_pubsub: me.rpc_pubsub,
|
||||||
wallclock: me.wallclock,
|
wallclock: me.wallclock,
|
||||||
|
|
Loading…
Reference in New Issue