Skip to content

Commit

Permalink
network-libp2p: Expose a configuration for the desired number of peers
Browse files Browse the repository at this point in the history
Expose a configuration for the desired number of peers for the
connection pool to realize when to try to connect to more peers.
This configuration is exposed in the network and is set in the client
to be `consensus.min_peers`.
  • Loading branch information
jsdanielh committed Jan 25, 2024
1 parent 262fd31 commit ed35e8b
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 8 deletions.
1 change: 1 addition & 0 deletions lib/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ impl ClientInner {
false,
required_services,
tls_config,
config.consensus.min_peers,
config.network.autonat_allow_non_global_ips,
config.network.only_secure_ws_connections,
config.network.allow_loopback_addresses,
Expand Down
1 change: 1 addition & 0 deletions network-libp2p/src/behaviour.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ impl Behaviour {
peer_id,
config.seeds,
config.discovery.required_services,
config.desired_peer_count,
);

// Request Response behaviour
Expand Down
3 changes: 3 additions & 0 deletions network-libp2p/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ pub struct Config {
pub memory_transport: bool,
pub required_services: Services,
pub tls: Option<TlsConfig>,
pub desired_peer_count: usize,
pub autonat_allow_non_global_ips: bool,
pub only_secure_ws_connections: bool,
pub allow_loopback_addresses: bool,
Expand All @@ -41,6 +42,7 @@ impl Config {
memory_transport: bool,
required_services: Services,
tls_settings: Option<TlsConfig>,
desired_peer_count: usize,
autonat_allow_non_global_ips: bool,
only_secure_ws_connections: bool,
allow_loopback_addresses: bool,
Expand Down Expand Up @@ -87,6 +89,7 @@ impl Config {
memory_transport,
required_services,
tls: tls_settings,
desired_peer_count,
autonat_allow_non_global_ips,
only_secure_ws_connections,
allow_loopback_addresses,
Expand Down
20 changes: 12 additions & 8 deletions network-libp2p/src/connection_pool/behaviour.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ struct Limits {
#[derive(Clone, Debug)]
struct Config {
/// Desired count of peers
peer_count_desired: usize,
desired_peer_count: usize,
/// Maximum count of peers
peer_count_max: usize,
/// Maximum peer count per IP
Expand Down Expand Up @@ -75,7 +75,7 @@ struct IpInfo {
impl Default for Config {
fn default() -> Self {
Self {
peer_count_desired: 12,
desired_peer_count: 12,
peer_count_max: 4000,
peer_count_per_ip_max: 20,
peer_count_per_subnet_max: 20,
Expand Down Expand Up @@ -310,13 +310,17 @@ impl Behaviour {
own_peer_id: PeerId,
seeds: Vec<Multiaddr>,
required_services: Services,
desired_peer_count: usize,
) -> Self {
let limits = Limits {
ip_count: HashMap::new(),
ip_subnet_count: HashMap::new(),
peer_count: 0,
};
let config = Config::default();
let config = Config {
desired_peer_count,
..Default::default()
};
let housekeeping_timer = wasm_timer::Interval::new(config.housekeeping_interval);

Self {
Expand Down Expand Up @@ -356,7 +360,7 @@ impl Behaviour {
}
}

/// Tries to maintain at least `peer_count_desired` connections.
/// Tries to maintain at least `desired_peer_count` connections.
///
/// For this it will try to select peers or seeds to dial in order to
/// achieve that many connection.
Expand All @@ -375,18 +379,18 @@ impl Behaviour {
// Make sure seeds and peers are dial-able again to reach desired peers.
// Otherwise we might be stuck in this state forever.
if self.active
&& self.peer_ids.num_connected() < self.config.peer_count_desired
&& self.peer_ids.num_connected() < self.config.desired_peer_count
&& self.peer_ids.num_dialing() + self.addresses.num_dialing() == 0
{
self.addresses.reset_down();
self.peer_ids.reset_down();
}

// Try to maintain at least `peer_count_desired` connections.
// Try to maintain at least `desired_peer_count` connections.
// Note: when counting dialing IDs we have to account for peer IDs and
// addresses (seeds may only be in the `addresses` set).
if self.active
&& self.peer_ids.num_connected() < self.config.peer_count_desired
&& self.peer_ids.num_connected() < self.config.desired_peer_count
&& self.peer_ids.num_dialing() + self.addresses.num_dialing()
< self.config.dialing_count_max
{
Expand Down Expand Up @@ -447,7 +451,7 @@ impl Behaviour {

fn choose_peers_to_dial(&self) -> Vec<PeerId> {
let num_peers = usize::min(
self.config.peer_count_desired - self.peer_ids.num_connected(),
self.config.desired_peer_count - self.peer_ids.num_connected(),
self.config.dialing_count_max - self.peer_ids.num_dialing(),
);
let contacts = self.contacts.read();
Expand Down
1 change: 1 addition & 0 deletions network-libp2p/tests/network.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ fn network_config(address: Multiaddr) -> Config {
memory_transport: true,
required_services: Services::all(),
tls: None,
desired_peer_count: 3,
autonat_allow_non_global_ips: true,
only_secure_ws_connections: false,
allow_loopback_addresses: true,
Expand Down
1 change: 1 addition & 0 deletions network-libp2p/tests/request_response.rs
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,7 @@ fn network_config(address: Multiaddr) -> Config {
memory_transport: true,
required_services: Services::all(),
tls: None,
desired_peer_count: 3,
autonat_allow_non_global_ips: true,
only_secure_ws_connections: false,
allow_loopback_addresses: true,
Expand Down
1 change: 1 addition & 0 deletions test-utils/src/test_network.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ impl TestNetwork for Network {
true,
Services::all(),
None,
3,
true,
false,
true,
Expand Down

0 comments on commit ed35e8b

Please sign in to comment.