Network optimizations.

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

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

@ -227,11 +227,15 @@ impl Network {
}
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() {
return self.process_writable(registry, event);
if !self.process_writable(registry, event) {
return false;
}
}
true

@ -9,6 +9,7 @@ use chrono::Utc;
use log::{debug, error, info, trace, warn};
use mio::net::TcpStream;
use mio::{Interest, Registry, Token};
use rand::prelude::SliceRandom;
use rand::random;
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>) {
let mut rng = rand::thread_rng();
let peers = self.peers
let mut peers = self.peers
.iter_mut()
.filter_map(|(token, peer)| if peer.has_more_blocks(height) { Some((token, peer)) } else { None })
.choose_multiple(&mut rng, (max_height - height) as usize);
peers.shuffle(&mut rng);
let mut index = height + 1;
for (token, peer) in peers {
if have_blocks.contains(&index) {
@ -374,7 +376,7 @@ impl Peers {
continue;
}
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 }));
index += 1;
if index > max_height {

Loading…
Cancel
Save