Networking and syncing tweaks (#2990)

* Reduce periodic snapshot delay

* Prevent connecting to peers over the min_peers limit

* Smaller block requests for slower connections
This commit is contained in:
Arkadiy Paronyan 2016-10-30 15:39:36 +01:00 committed by Gav Wood
parent d3a2f7dce9
commit 6931878ff1
3 changed files with 25 additions and 23 deletions

View File

@ -53,7 +53,7 @@ use url;
const SNAPSHOT_PERIOD: u64 = 10000; const SNAPSHOT_PERIOD: u64 = 10000;
// how many blocks to wait before starting a periodic snapshot. // how many blocks to wait before starting a periodic snapshot.
const SNAPSHOT_HISTORY: u64 = 500; const SNAPSHOT_HISTORY: u64 = 100;
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct RunCmd { pub struct RunCmd {

View File

@ -29,7 +29,7 @@ use sync_io::SyncIo;
use blocks::BlockCollection; use blocks::BlockCollection;
const MAX_HEADERS_TO_REQUEST: usize = 128; const MAX_HEADERS_TO_REQUEST: usize = 128;
const MAX_BODIES_TO_REQUEST: usize = 128; const MAX_BODIES_TO_REQUEST: usize = 64;
const MAX_RECEPITS_TO_REQUEST: usize = 128; const MAX_RECEPITS_TO_REQUEST: usize = 128;
const SUBCHAIN_SIZE: u64 = 256; const SUBCHAIN_SIZE: u64 = 256;
const MAX_ROUND_PARENTS: usize = 32; const MAX_ROUND_PARENTS: usize = 32;

View File

@ -747,7 +747,7 @@ impl Host {
let socket = match self.tcp_listener.lock().accept() { let socket = match self.tcp_listener.lock().accept() {
Ok((sock, _addr)) => sock, Ok((sock, _addr)) => sock,
Err(e) => { Err(e) => {
warn!("Error accepting connection: {:?}", e); debug!(target: "network", "Error accepting connection: {:?}", e);
break break
}, },
}; };
@ -801,29 +801,31 @@ impl Host {
}, },
Ok(SessionData::Ready) => { Ok(SessionData::Ready) => {
self.num_sessions.fetch_add(1, AtomicOrdering::SeqCst); self.num_sessions.fetch_add(1, AtomicOrdering::SeqCst);
if !s.info.originated { let session_count = self.session_count();
let session_count = self.session_count(); let (min_peers, max_peers, reserved_only) = {
let (max_peers, reserved_only) = { let info = self.info.read();
let info = self.info.read(); let mut max_peers = info.config.max_peers;
let mut max_peers = info.config.max_peers; for cap in s.info.capabilities.iter() {
for cap in s.info.capabilities.iter() { if let Some(num) = info.config.reserved_protocols.get(&cap.protocol) {
if let Some(num) = info.config.reserved_protocols.get(&cap.protocol) { max_peers += *num;
max_peers += *num; break;
break;
}
}
(max_peers, info.config.non_reserved_mode == NonReservedPeerMode::Deny)
};
if session_count >= max_peers as usize || reserved_only {
// only proceed if the connecting peer is reserved.
if !self.reserved_nodes.read().contains(s.id().unwrap()) {
s.disconnect(io, DisconnectReason::TooManyPeers);
return;
} }
} }
(info.config.min_peers as usize, max_peers as usize, info.config.non_reserved_mode == NonReservedPeerMode::Deny)
};
// Add it no node table if reserved_only ||
(s.info.originated && session_count >= min_peers) ||
(!s.info.originated && session_count >= max_peers) {
// only proceed if the connecting peer is reserved.
if !self.reserved_nodes.read().contains(s.id().unwrap()) {
s.disconnect(io, DisconnectReason::TooManyPeers);
return;
}
}
// Add it to the node table
if !s.info.originated {
if let Ok(address) = s.remote_addr() { if let Ok(address) = s.remote_addr() {
let entry = NodeEntry { id: s.id().unwrap().clone(), endpoint: NodeEndpoint { address: address, udp_port: address.port() } }; let entry = NodeEntry { id: s.id().unwrap().clone(), endpoint: NodeEndpoint { address: address, udp_port: address.port() } };
self.nodes.write().add_node(Node::new(entry.id.clone(), entry.endpoint.clone())); self.nodes.write().add_node(Node::new(entry.id.clone(), entry.endpoint.clone()));