Skip to content

Commit

Permalink
[network] Consolidate network seeds building
Browse files Browse the repository at this point in the history
  • Loading branch information
gregnazario authored and bors-libra committed Jun 2, 2021
1 parent 5c38214 commit d864268
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 44 deletions.
85 changes: 44 additions & 41 deletions network/builder/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ impl NetworkBuilder {

pub fn new_for_test(
chain_id: ChainId,
seeds: &PeerSet,
seeds: PeerSet,
trusted_peers: Arc<RwLock<PeerSet>>,
network_context: Arc<NetworkContext>,
time_service: TimeService,
Expand Down Expand Up @@ -210,9 +210,6 @@ impl NetworkBuilder {
config.ping_failures_tolerated,
);

// Sanity check seed addresses.
config.verify_seeds().expect("Seeds must be well formed");

// Don't turn on connectivity manager if we're a public-facing server,
// for example.
//
Expand All @@ -230,29 +227,10 @@ impl NetworkBuilder {
|| !config.seed_addrs.is_empty()
|| !config.seeds.is_empty()
{
let mut seeds = config.seeds.clone();

// Merge old seed configuration with new seed configuration
// TODO(gnazario): Once fully migrated, remove `seed_addrs`
config
.seed_addrs
.iter()
.map(|(peer_id, addrs)| {
(
peer_id,
Peer::from_addrs(PeerRole::ValidatorFullNode, addrs.clone()),
)
})
.for_each(|(peer_id, peer)| {
seeds
.entry(*peer_id)
// Sad clone due to Rust not realizing these are two distinct paths
.and_modify(|seed| seed.extend(peer.clone()).unwrap())
.or_insert(peer);
});
let seeds = merge_seeds(config);

network_builder.add_connectivity_manager(
&seeds,
seeds,
trusted_peers,
config.max_outbound_connections,
config.connection_backoff_base,
Expand Down Expand Up @@ -338,7 +316,7 @@ impl NetworkBuilder {
/// permissioned.
pub fn add_connectivity_manager(
&mut self,
seeds: &PeerSet,
seeds: PeerSet,
trusted_peers: Arc<RwLock<PeerSet>>,
max_outbound_connections: usize,
connection_backoff_base: u64,
Expand All @@ -355,21 +333,6 @@ impl NetworkBuilder {
None
};

// Merge pubkeys that may be in the seed addresses
let mut seeds = seeds.clone();
seeds.values_mut().for_each(
|Peer {
addresses, keys, ..
}| {
addresses
.iter()
.filter_map(NetworkAddress::find_noise_proto)
.for_each(|pubkey| {
keys.insert(pubkey);
});
},
);

self.connectivity_manager_builder = Some(ConnectivityManagerBuilder::create(
self.network_context(),
self.time_service.clone(),
Expand Down Expand Up @@ -516,3 +479,43 @@ impl NetworkBuilder {
)
}
}

/// Retrieve and merge seeds so that they have all keys associated
fn merge_seeds(config: &NetworkConfig) -> PeerSet {
config.verify_seeds().expect("Seeds must be well formed");
let mut seeds = config.seeds.clone();

// Merge old seed configuration with new seed configuration
// TODO(gnazario): Once fully migrated, remove `seed_addrs`
config
.seed_addrs
.iter()
.map(|(peer_id, addrs)| {
(
peer_id,
Peer::from_addrs(PeerRole::ValidatorFullNode, addrs.clone()),
)
})
.for_each(|(peer_id, peer)| {
seeds
.entry(*peer_id)
// Sad clone due to Rust not realizing these are two distinct paths
.and_modify(|seed| seed.extend(peer.clone()).unwrap())
.or_insert(peer);
});

// Pull public keys out of addresses
seeds.values_mut().for_each(
|Peer {
addresses, keys, ..
}| {
addresses
.iter()
.filter_map(NetworkAddress::find_noise_proto)
.for_each(|pubkey| {
keys.insert(pubkey);
});
},
);
seeds
}
4 changes: 2 additions & 2 deletions network/builder/src/dummy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ pub fn setup_network() -> DummyNetwork {
));
let mut network_builder = NetworkBuilder::new_for_test(
chain_id,
&seeds,
seeds.clone(),
trusted_peers,
network_context,
TimeService::real(),
Expand Down Expand Up @@ -175,7 +175,7 @@ pub fn setup_network() -> DummyNetwork {

let mut network_builder = NetworkBuilder::new_for_test(
chain_id,
&seeds,
seeds,
trusted_peers,
network_context,
TimeService::real(),
Expand Down
2 changes: 1 addition & 1 deletion state-sync/tests/test_harness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ impl StateSyncEnvironment {

let mut network_builder = NetworkBuilder::new_for_test(
ChainId::default(),
&seeds,
seeds,
trusted_peers,
network_context,
TimeService::real(),
Expand Down

0 comments on commit d864268

Please sign in to comment.