mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 17:01:09 +00:00
expose setting kademlia replication factor through node CLI (#14391)
* expose kademlia replication factor through node CLI * set default CLI flag value for kademlia_replication_factor Co-authored-by: Bastian Köcher <git@kchr.de> * wrap CLI value as Option * make kademlia replication factor non-optional --------- Co-authored-by: Bastian Köcher <git@kchr.de>
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
//! See the documentation of [`Params`].
|
||||
|
||||
pub use crate::{
|
||||
discovery::DEFAULT_KADEMLIA_REPLICATION_FACTOR,
|
||||
protocol::NotificationsSink,
|
||||
request_responses::{
|
||||
IncomingRequest, OutgoingResponse, ProtocolConfig as RequestResponseConfig,
|
||||
@@ -50,6 +51,7 @@ use std::{
|
||||
io::{self, Write},
|
||||
iter,
|
||||
net::Ipv4Addr,
|
||||
num::NonZeroUsize,
|
||||
path::{Path, PathBuf},
|
||||
pin::Pin,
|
||||
str::{self, FromStr},
|
||||
@@ -605,6 +607,12 @@ pub struct NetworkConfiguration {
|
||||
/// the presence of potentially adversarial nodes.
|
||||
pub kademlia_disjoint_query_paths: bool,
|
||||
|
||||
/// Kademlia replication factor determines to how many closest peers a record is replicated to.
|
||||
///
|
||||
/// Discovery mechanism requires successful replication to all
|
||||
/// `kademlia_replication_factor` peers to consider record successfully put.
|
||||
pub kademlia_replication_factor: NonZeroUsize,
|
||||
|
||||
/// Enable serving block data over IPFS bitswap.
|
||||
pub ipfs_server: bool,
|
||||
|
||||
@@ -656,6 +664,8 @@ impl NetworkConfiguration {
|
||||
enable_dht_random_walk: true,
|
||||
allow_non_globals_in_dht: false,
|
||||
kademlia_disjoint_query_paths: false,
|
||||
kademlia_replication_factor: NonZeroUsize::new(DEFAULT_KADEMLIA_REPLICATION_FACTOR)
|
||||
.expect("value is a constant; constant is non-zero; qed."),
|
||||
yamux_window_size: None,
|
||||
ipfs_server: false,
|
||||
}
|
||||
|
||||
@@ -87,6 +87,10 @@ use std::{
|
||||
/// a given address.
|
||||
const MAX_KNOWN_EXTERNAL_ADDRESSES: usize = 32;
|
||||
|
||||
/// Default value for Kademlia replication factor which determines to how many closest peers a
|
||||
/// record is replicated to.
|
||||
pub const DEFAULT_KADEMLIA_REPLICATION_FACTOR: usize = 20;
|
||||
|
||||
/// `DiscoveryBehaviour` configuration.
|
||||
///
|
||||
/// Note: In order to discover nodes or load and store values via Kademlia one has to add
|
||||
@@ -101,6 +105,7 @@ pub struct DiscoveryConfig {
|
||||
enable_mdns: bool,
|
||||
kademlia_disjoint_query_paths: bool,
|
||||
kademlia_protocols: Vec<Vec<u8>>,
|
||||
kademlia_replication_factor: NonZeroUsize,
|
||||
}
|
||||
|
||||
impl DiscoveryConfig {
|
||||
@@ -116,6 +121,8 @@ impl DiscoveryConfig {
|
||||
enable_mdns: false,
|
||||
kademlia_disjoint_query_paths: false,
|
||||
kademlia_protocols: Vec::new(),
|
||||
kademlia_replication_factor: NonZeroUsize::new(DEFAULT_KADEMLIA_REPLICATION_FACTOR)
|
||||
.expect("value is a constant; constant is non-zero; qed."),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,6 +189,12 @@ impl DiscoveryConfig {
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets Kademlia replication factor.
|
||||
pub fn with_kademlia_replication_factor(&mut self, value: NonZeroUsize) -> &mut Self {
|
||||
self.kademlia_replication_factor = value;
|
||||
self
|
||||
}
|
||||
|
||||
/// Create a `DiscoveryBehaviour` from this config.
|
||||
pub fn finish(self) -> DiscoveryBehaviour {
|
||||
let Self {
|
||||
@@ -194,10 +207,13 @@ 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();
|
||||
|
||||
config.set_replication_factor(kademlia_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
|
||||
|
||||
@@ -320,6 +320,7 @@ where
|
||||
config.use_kademlia_disjoint_query_paths(
|
||||
network_config.kademlia_disjoint_query_paths,
|
||||
);
|
||||
config.with_kademlia_replication_factor(network_config.kademlia_replication_factor);
|
||||
|
||||
match network_config.transport {
|
||||
TransportConfig::MemoryOnly => {
|
||||
|
||||
Reference in New Issue
Block a user