Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

expose Kademlia replication factor in node CLI #14374

Closed
wants to merge 11 commits into from
Closed
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion client/cli/src/params/network_params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ use sc_service::{
config::{Multiaddr, MultiaddrWithPeerId},
ChainSpec, ChainType,
};
use std::{borrow::Cow, path::PathBuf};
use std::{borrow::Cow, path::PathBuf, num::NonZeroUsize};

/// Parameters used to create the network configuration.
#[derive(Debug, Clone, Args)]
Expand Down Expand Up @@ -127,6 +127,10 @@ pub struct NetworkParams {
#[arg(long)]
pub kademlia_disjoint_query_paths: bool,

/// Kademlia replication factor.
altonen marked this conversation as resolved.
Show resolved Hide resolved
#[arg(long)]
pub kademlia_replication_factor: Option<NonZeroUsize>,

/// Join the IPFS network and serve transactions over bitswap protocol.
#[arg(long)]
pub ipfs_server: bool,
Expand Down Expand Up @@ -238,6 +242,7 @@ impl NetworkParams {
enable_dht_random_walk: !self.reserved_only,
allow_non_globals_in_dht,
kademlia_disjoint_query_paths: self.kademlia_disjoint_query_paths,
kademlia_replication_factor: self.kademlia_replication_factor,
yamux_window_size: None,
ipfs_server: self.ipfs_server,
sync_mode: self.sync.into(),
Expand Down
6 changes: 5 additions & 1 deletion client/network/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ use std::{
net::Ipv4Addr,
path::{Path, PathBuf},
pin::Pin,
str::{self, FromStr},
str::{self, FromStr}, num::NonZeroUsize,
};

pub use libp2p::{
Expand Down Expand Up @@ -605,6 +605,9 @@ pub struct NetworkConfiguration {
/// the presence of potentially adversarial nodes.
pub kademlia_disjoint_query_paths: bool,

/// None will end up using default Kadmelia value.
pub kademlia_replication_factor: Option<NonZeroUsize>,

/// Enable serving block data over IPFS bitswap.
pub ipfs_server: bool,

Expand Down Expand Up @@ -657,6 +660,7 @@ impl NetworkConfiguration {
enable_dht_random_walk: true,
allow_non_globals_in_dht: false,
kademlia_disjoint_query_paths: false,
kademlia_replication_factor: None,
yamux_window_size: None,
ipfs_server: false,
}
Expand Down
13 changes: 13 additions & 0 deletions client/network/src/discovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ pub struct DiscoveryConfig {
enable_mdns: bool,
kademlia_disjoint_query_paths: bool,
kademlia_protocols: Vec<Vec<u8>>,
kademlia_replication_factor: Option<NonZeroUsize>,
}

impl DiscoveryConfig {
Expand All @@ -118,6 +119,7 @@ impl DiscoveryConfig {
enable_mdns: false,
kademlia_disjoint_query_paths: false,
kademlia_protocols: Vec::new(),
kademlia_replication_factor: None,
}
}

Expand Down Expand Up @@ -184,6 +186,11 @@ impl DiscoveryConfig {
self
}

pub fn with_kademlia_replication_factor(&mut self, value: NonZeroUsize) -> &mut Self {
self.kademlia_replication_factor = Some(value);
self
}

/// Create a `DiscoveryBehaviour` from this config.
pub fn finish(self) -> DiscoveryBehaviour {
let Self {
Expand All @@ -196,10 +203,16 @@ impl DiscoveryConfig {
enable_mdns,
kademlia_disjoint_query_paths,
kademlia_protocols,
kademlia_replication_factor,
} = self;

let kademlia = if !kademlia_protocols.is_empty() {
let mut config = KademliaConfig::default();

if let Some(replication_factor) = kademlia_replication_factor {
config.set_replication_factor(replication_factor);
}

config.set_protocol_names(kademlia_protocols.into_iter().map(Into::into).collect());
// By default Kademlia attempts to insert all peers into its routing table once a
// dialing attempt succeeds. In order to control which peer is added, disable the
Expand Down
4 changes: 4 additions & 0 deletions client/network/src/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,10 @@ where
params.network_config.kademlia_disjoint_query_paths,
);

if let Some(kademlia_replication_factor) = params.network_config.kademlia_replication_factor {
config.with_kademlia_replication_factor(kademlia_replication_factor);
}

match params.network_config.transport {
TransportConfig::MemoryOnly => {
config.with_mdns(false);
Expand Down