blocks + hashes
This commit is contained in:
parent
62f3b8cae5
commit
9727f27854
@ -1075,6 +1075,10 @@ impl ChainSync {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn create_latest_block_rlp(chain: &BlockChainClient) -> Bytes {
|
||||||
|
chain.block(&chain.chain_info().best_block_hash).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
fn get_lagging_peers(&self, io: &SyncIo) -> Vec<usize> {
|
fn get_lagging_peers(&self, io: &SyncIo) -> Vec<usize> {
|
||||||
let chain = io.chain();
|
let chain = io.chain();
|
||||||
let chain_info = chain.chain_info();
|
let chain_info = chain.chain_info();
|
||||||
@ -1108,6 +1112,19 @@ impl ChainSync {
|
|||||||
lucky_peers.iter().take(min(lucky_peers.len(), MAX_PEERS_PROPAGATION)).cloned().collect::<Vec<usize>>()
|
lucky_peers.iter().take(min(lucky_peers.len(), MAX_PEERS_PROPAGATION)).cloned().collect::<Vec<usize>>()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut sent = 0;
|
||||||
|
let local_best = io.chain().chain_info().best_block_hash;
|
||||||
|
for peer_id in updated_peers {
|
||||||
|
let rlp = ChainSync::create_latest_block_rlp(io.chain());
|
||||||
|
self.send_request(io, peer_id, PeerAsking::Nothing, NEW_BLOCK_PACKET, rlp);
|
||||||
|
self.peers.get_mut(&peer_id).expect("ChainSync: unknown peer").latest = local_best.clone();
|
||||||
|
sent = sent + 1;
|
||||||
|
}
|
||||||
|
sent
|
||||||
|
}
|
||||||
|
|
||||||
|
fn propagade_new_hashes(&mut self, io: &mut SyncIo) -> usize {
|
||||||
|
let updated_peers = self.get_lagging_peers(io);
|
||||||
let mut sent = 0;
|
let mut sent = 0;
|
||||||
let local_best = io.chain().chain_info().best_block_hash;
|
let local_best = io.chain().chain_info().best_block_hash;
|
||||||
for peer_id in updated_peers {
|
for peer_id in updated_peers {
|
||||||
@ -1133,8 +1150,11 @@ impl ChainSync {
|
|||||||
self.check_resume(io);
|
self.check_resume(io);
|
||||||
|
|
||||||
if self.state == SyncState::Idle {
|
if self.state == SyncState::Idle {
|
||||||
let blocks_propagaded = self.propagade_blocks(io);
|
let peers = self.propagade_new_hashes(io);
|
||||||
trace!(target: "sync", "Sent new blocks to peers: {:?}", blocks_propagaded);
|
trace!(target: "sync", "Sent new hashes to peers: {:?}", peers);
|
||||||
|
|
||||||
|
let peers = self.propagade_blocks(io);
|
||||||
|
trace!(target: "sync", "Sent latest block to peers: {:?}", peers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1263,7 +1283,25 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn sends_packet_to_lagging_peer() {
|
fn sends_new_hashes_to_lagging_peer() {
|
||||||
|
let mut client = TestBlockChainClient::new();
|
||||||
|
client.add_blocks(100, false);
|
||||||
|
let mut queue = VecDeque::new();
|
||||||
|
let mut sync = dummy_sync_with_peer(client.block_hash_delta_minus(5));
|
||||||
|
let mut io = TestIo::new(&mut client, &mut queue, None);
|
||||||
|
|
||||||
|
let peer_count = sync.propagade_new_hashes(&mut io);
|
||||||
|
|
||||||
|
// 1 message should be send
|
||||||
|
assert_eq!(1, io.queue.len());
|
||||||
|
// 1 peer should be updated
|
||||||
|
assert_eq!(1, peer_count);
|
||||||
|
// NEW_BLOCK_HASHES_PACKET
|
||||||
|
assert_eq!(0x01, io.queue[0].packet_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sends_latest_block_to_lagging_peer() {
|
||||||
let mut client = TestBlockChainClient::new();
|
let mut client = TestBlockChainClient::new();
|
||||||
client.add_blocks(100, false);
|
client.add_blocks(100, false);
|
||||||
let mut queue = VecDeque::new();
|
let mut queue = VecDeque::new();
|
||||||
@ -1276,7 +1314,7 @@ mod tests {
|
|||||||
assert_eq!(1, io.queue.len());
|
assert_eq!(1, io.queue.len());
|
||||||
// 1 peer should be updated
|
// 1 peer should be updated
|
||||||
assert_eq!(1, peer_count);
|
assert_eq!(1, peer_count);
|
||||||
// NEW_BLOCK_HASHES_PACKET
|
// NEW_BLOCK_PACKET
|
||||||
assert_eq!(0x01, io.queue[0].packet_id);
|
assert_eq!(0x07, io.queue[0].packet_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user