Several small optimizations.
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "alfis"
|
name = "alfis"
|
||||||
version = "0.4.11"
|
version = "0.4.12"
|
||||||
authors = ["Revertron <alfis@revertron.com>"]
|
authors = ["Revertron <alfis@revertron.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|||||||
@@ -206,6 +206,12 @@ impl Chain {
|
|||||||
None => { return None; }
|
None => { return None; }
|
||||||
Some(ref block) => { block.clone() }
|
Some(ref block) => { block.clone() }
|
||||||
};
|
};
|
||||||
|
// TODO maybe make some config option to mine signing blocks above?
|
||||||
|
let sign_count = self.height() - block.index;
|
||||||
|
if sign_count >= BLOCK_SIGNERS_MIN {
|
||||||
|
trace!("Block {} has enough signing blocks", block.index);
|
||||||
|
return None;
|
||||||
|
}
|
||||||
let keystore = keystore.clone().unwrap().clone();
|
let keystore = keystore.clone().unwrap().clone();
|
||||||
let signers: HashSet<Bytes> = self.get_block_signers(&block).into_iter().collect();
|
let signers: HashSet<Bytes> = self.get_block_signers(&block).into_iter().collect();
|
||||||
if signers.contains(&keystore.get_public()) {
|
if signers.contains(&keystore.get_public()) {
|
||||||
|
|||||||
+11
-2
@@ -65,6 +65,7 @@ impl Network {
|
|||||||
let mut ui_timer = Instant::now();
|
let mut ui_timer = Instant::now();
|
||||||
let mut log_timer = Instant::now();
|
let mut log_timer = Instant::now();
|
||||||
let mut bootstrap_timer = Instant::now();
|
let mut bootstrap_timer = Instant::now();
|
||||||
|
let mut last_events_time = Instant::now();
|
||||||
loop {
|
loop {
|
||||||
if peers.get_peers_count() == 0 && bootstrap_timer.elapsed().as_secs() > 60 {
|
if peers.get_peers_count() == 0 && bootstrap_timer.elapsed().as_secs() > 60 {
|
||||||
// Starting peer connections to bootstrap nodes
|
// Starting peer connections to bootstrap nodes
|
||||||
@@ -136,6 +137,9 @@ impl Network {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !events.is_empty() {
|
||||||
|
last_events_time = Instant::now();
|
||||||
|
}
|
||||||
events.clear();
|
events.clear();
|
||||||
|
|
||||||
if ui_timer.elapsed().as_millis() > UI_REFRESH_DELAY_MS {
|
if ui_timer.elapsed().as_millis() > UI_REFRESH_DELAY_MS {
|
||||||
@@ -144,11 +148,16 @@ impl Network {
|
|||||||
let mut context = context.lock().unwrap();
|
let mut context = context.lock().unwrap();
|
||||||
let height = context.chain.height();
|
let height = context.chain.height();
|
||||||
let nodes = peers.get_peers_active_count();
|
let nodes = peers.get_peers_active_count();
|
||||||
|
let banned = peers.get_peers_banned_count();
|
||||||
if nodes > 0 {
|
if nodes > 0 {
|
||||||
context.bus.post(crate::event::Event::NetworkStatus { nodes, blocks: height });
|
context.bus.post(crate::event::Event::NetworkStatus { nodes, blocks: height });
|
||||||
}
|
}
|
||||||
if log_timer.elapsed().as_secs() > LOG_REFRESH_DELAY_SEC {
|
if log_timer.elapsed().as_secs() > LOG_REFRESH_DELAY_SEC {
|
||||||
info!("Active nodes count: {}, blocks count: {}", nodes, height);
|
info!("Active nodes count: {}, banned count: {}, blocks count: {}", nodes, banned, height);
|
||||||
|
let elapsed = last_events_time.elapsed().as_secs();
|
||||||
|
if elapsed >= 10 {
|
||||||
|
warn!("Last network events time {} seconds ago", elapsed);
|
||||||
|
}
|
||||||
log_timer = Instant::now();
|
log_timer = Instant::now();
|
||||||
let keystore = context.keystore.clone();
|
let keystore = context.keystore.clone();
|
||||||
if let Some(event) = context.chain.update(&keystore) {
|
if let Some(event) = context.chain.update(&keystore) {
|
||||||
@@ -433,7 +442,7 @@ fn handle_message(context: Arc<Mutex<Context>>, message: Message, peers: &mut Pe
|
|||||||
State::message(Message::GetBlock { index: my_height })
|
State::message(Message::GetBlock { index: my_height })
|
||||||
} else {
|
} else {
|
||||||
if random::<u8>() < 10 {
|
if random::<u8>() < 10 {
|
||||||
debug!("Requesting more peers");
|
debug!("Requesting more peers from {}", peer.get_addr().ip());
|
||||||
State::message(Message::GetPeers)
|
State::message(Message::GetPeers)
|
||||||
} else {
|
} else {
|
||||||
State::idle()
|
State::idle()
|
||||||
|
|||||||
@@ -173,6 +173,10 @@ impl Peers {
|
|||||||
count
|
count
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_peers_banned_count(&self) -> usize {
|
||||||
|
self.ignored.len()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn ignore_peer(&mut self, registry: &Registry, token: &Token) {
|
pub fn ignore_peer(&mut self, registry: &Registry, token: &Token) {
|
||||||
let peer = self.peers.get_mut(token).unwrap();
|
let peer = self.peers.get_mut(token).unwrap();
|
||||||
peer.set_state(State::Banned);
|
peer.set_state(State::Banned);
|
||||||
|
|||||||
Reference in New Issue
Block a user