Network optimizations.

pull/302/head v0.8.1
Revertron 2 years ago
parent a36860e46c
commit 74b84f0e65

@ -1,6 +1,6 @@
[package] [package]
name = "alfis" name = "alfis"
version = "0.8.0" version = "0.8.1"
authors = ["Revertron <alfis@revertron.com>"] authors = ["Revertron <alfis@revertron.com>"]
edition = "2021" edition = "2021"
build = "build.rs" build = "build.rs"

@ -227,11 +227,15 @@ impl Network {
} }
if event.is_readable() { if event.is_readable() {
return self.process_readable(registry, event, seen_blocks); if !self.process_readable(registry, event, seen_blocks) {
return false;
}
} }
if event.is_writable() { if event.is_writable() {
return self.process_writable(registry, event); if !self.process_writable(registry, event) {
return false;
}
} }
true true

@ -9,6 +9,7 @@ use chrono::Utc;
use log::{debug, error, info, trace, warn}; use log::{debug, error, info, trace, warn};
use mio::net::TcpStream; use mio::net::TcpStream;
use mio::{Interest, Registry, Token}; use mio::{Interest, Registry, Token};
use rand::prelude::SliceRandom;
use rand::random; use rand::random;
use rand::seq::IteratorRandom; use rand::seq::IteratorRandom;
@ -362,10 +363,11 @@ impl Peers {
fn ask_blocks_from_peers(&mut self, registry: &Registry, height: u64, max_height: u64, have_blocks: HashSet<u64>) { fn ask_blocks_from_peers(&mut self, registry: &Registry, height: u64, max_height: u64, have_blocks: HashSet<u64>) {
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
let peers = self.peers let mut peers = self.peers
.iter_mut() .iter_mut()
.filter_map(|(token, peer)| if peer.has_more_blocks(height) { Some((token, peer)) } else { None }) .filter_map(|(token, peer)| if peer.has_more_blocks(height) { Some((token, peer)) } else { None })
.choose_multiple(&mut rng, (max_height - height) as usize); .choose_multiple(&mut rng, (max_height - height) as usize);
peers.shuffle(&mut rng);
let mut index = height + 1; let mut index = height + 1;
for (token, peer) in peers { for (token, peer) in peers {
if have_blocks.contains(&index) { if have_blocks.contains(&index) {
@ -374,7 +376,7 @@ impl Peers {
continue; continue;
} }
debug!("Peer {} is higher than we are, requesting block {}", &peer.get_addr().ip(), index); debug!("Peer {} is higher than we are, requesting block {}", &peer.get_addr().ip(), index);
registry.reregister(peer.get_stream(), *token, Interest::WRITABLE | Interest::READABLE).unwrap(); registry.reregister(peer.get_stream(), *token, Interest::WRITABLE).unwrap();
peer.set_state(State::message(Message::GetBlock { index })); peer.set_state(State::message(Message::GetBlock { index }));
index += 1; index += 1;
if index > max_height { if index > max_height {

Loading…
Cancel
Save