Merge bugfixes from master to beta (#1605)

* Attempt to fix blochchain DB sync

* Fix bloomchain on blockchain repair

* Make sure reserved peers are in the node table

* fixed #1606 (#1615)
This commit is contained in:
Arkadiy Paronyan
2016-07-14 12:52:07 +02:00
committed by Gav Wood
parent 69847e3b8b
commit ed5d797662
7 changed files with 46 additions and 17 deletions

View File

@@ -435,6 +435,7 @@ impl<Message> Host<Message> where Message: Send + Sync + Clone {
let entry = NodeEntry { endpoint: n.endpoint.clone(), id: n.id.clone() };
self.reserved_nodes.write().unwrap().insert(n.id.clone());
self.nodes.write().unwrap().add_node(Node::new(entry.id.clone(), entry.endpoint.clone()));
if let Some(ref mut discovery) = *self.discovery.lock().unwrap() {
discovery.add_node(entry);
@@ -758,7 +759,9 @@ impl<Message> Host<Message> where Message: Send + Sync + Clone {
trace!(target: "network", "Session read error: {}:{:?} ({:?}) {:?}", token, s.id(), s.remote_addr(), e);
if let UtilError::Network(NetworkError::Disconnect(DisconnectReason::IncompatibleProtocol)) = e {
if let Some(id) = s.id() {
self.nodes.write().unwrap().mark_as_useless(id);
if !self.reserved_nodes.read().unwrap().contains(id) {
self.nodes.write().unwrap().mark_as_useless(id);
}
}
}
kill = true;
@@ -892,7 +895,7 @@ impl<Message> Host<Message> where Message: Send + Sync + Clone {
trace!(target: "network", "Removed from node table: {}", i);
self.kill_connection(i, io, false);
}
self.nodes.write().unwrap().update(node_changes);
self.nodes.write().unwrap().update(node_changes, &*self.reserved_nodes.read().unwrap());
}
}

View File

@@ -236,13 +236,15 @@ impl NodeTable {
}
/// Apply table changes coming from discovery
pub fn update(&mut self, mut update: TableUpdates) {
pub fn update(&mut self, mut update: TableUpdates, reserved: &HashSet<NodeId>) {
for (_, node) in update.added.drain() {
let mut entry = self.nodes.entry(node.id.clone()).or_insert_with(|| Node::new(node.id.clone(), node.endpoint.clone()));
entry.endpoint = node.endpoint;
}
for r in update.removed {
self.nodes.remove(&r);
if !reserved.contains(&r) {
self.nodes.remove(&r);
}
}
}