From a2f9b599b172906ff3f3f05715a3f281c6f52878 Mon Sep 17 00:00:00 2001 From: SeongChan Lee Date: Wed, 20 Nov 2019 18:00:54 +0900 Subject: [PATCH 1/4] Change waitNodeUntilTerm to return TermMetadata --- test/src/e2e.dynval/setup.ts | 4 ++-- test/src/helper/spawn.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/src/e2e.dynval/setup.ts b/test/src/e2e.dynval/setup.ts index 493f6ef602..2c4aefa645 100644 --- a/test/src/e2e.dynval/setup.ts +++ b/test/src/e2e.dynval/setup.ts @@ -451,7 +451,7 @@ interface TermWaiter { target: number; termPeriods: number; } - ): Promise; + ): Promise; } export function setTermTestTimeout( @@ -483,7 +483,7 @@ export function setTermTestTimeout( termPeriods: number; } ) { - await node.waitForTermChange( + return await node.waitForTermChange( waiterParams.target, termPeriodsToTime(waiterParams.termPeriods, 0.5) ); diff --git a/test/src/helper/spawn.ts b/test/src/helper/spawn.ts index 8c3816360a..82fd314403 100644 --- a/test/src/helper/spawn.ts +++ b/test/src/helper/spawn.ts @@ -861,7 +861,7 @@ export default class CodeChain { while (true) { const termMetadata = await stake.getTermMetadata(this.sdk); if (termMetadata && termMetadata.currentTermId >= target) { - break; + return termMetadata; } await wait(1000); if (timeout) { From bfda70048dc81de650065287d371f23ace2068eb Mon Sep 17 00:00:00 2001 From: SeongChan Lee Date: Tue, 3 Dec 2019 16:27:48 +0900 Subject: [PATCH 2/4] Refactor send status function --- sync/src/block/extension.rs | 63 ++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/sync/src/block/extension.rs b/sync/src/block/extension.rs index 1ea7eb4c5b..16fd3ad6be 100644 --- a/sync/src/block/extension.rs +++ b/sync/src/block/extension.rs @@ -109,6 +109,38 @@ impl Extension { } } + fn send_status(&mut self, id: &NodeId) { + let chain_info = self.client.chain_info(); + self.api.send( + id, + Arc::new( + Message::Status { + total_score: chain_info.best_proposal_score, + best_hash: chain_info.best_proposal_block_hash, + genesis_hash: chain_info.genesis_hash, + } + .rlp_bytes(), + ), + ); + } + + fn send_status_broadcast(&mut self) { + let chain_info = self.client.chain_info(); + for id in self.connected_nodes.iter() { + self.api.send( + id, + Arc::new( + Message::Status { + total_score: chain_info.best_proposal_score, + best_hash: chain_info.best_proposal_block_hash, + genesis_hash: chain_info.genesis_hash, + } + .rlp_bytes(), + ), + ); + } + } + fn send_header_request(&mut self, id: &NodeId, request: RequestMessage) { if let Some(requests) = self.requests.get_mut(id) { ctrace!(SYNC, "Send header request to {}", id); @@ -212,18 +244,8 @@ impl NetworkExtension for Extension { fn on_node_added(&mut self, id: &NodeId, _version: u64) { cinfo!(SYNC, "New peer detected #{}", id); - let chain_info = self.client.chain_info(); - self.api.send( - id, - Arc::new( - Message::Status { - total_score: chain_info.best_proposal_score, - best_hash: chain_info.best_proposal_block_hash, - genesis_hash: chain_info.genesis_hash, - } - .rlp_bytes(), - ), - ); + self.send_status(id); + let t = self.connected_nodes.insert(*id); debug_assert!(t, "{} is already added to peer list", id); @@ -420,22 +442,7 @@ impl Extension { self.body_downloader.remove_target(&imported); self.body_downloader.remove_target(&invalid); - - let chain_info = self.client.chain_info(); - - for id in &self.connected_nodes { - self.api.send( - id, - Arc::new( - Message::Status { - total_score: chain_info.best_proposal_score, - best_hash: chain_info.best_proposal_block_hash, - genesis_hash: chain_info.genesis_hash, - } - .rlp_bytes(), - ), - ); - } + self.send_status_broadcast(); } } From 351e3cf8c6fd452752ba5429686867bd4f304ef1 Mon Sep 17 00:00:00 2001 From: SeongChan Lee Date: Tue, 3 Dec 2019 16:42:37 +0900 Subject: [PATCH 3/4] Remove unnecessary cloning in block sync --- sync/src/block/extension.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/sync/src/block/extension.rs b/sync/src/block/extension.rs index 16fd3ad6be..0b40141598 100644 --- a/sync/src/block/extension.rs +++ b/sync/src/block/extension.rs @@ -408,11 +408,8 @@ pub enum Event { impl Extension { fn new_headers(&mut self, imported: Vec, enacted: Vec, retracted: Vec) { - let peer_ids: Vec<_> = self.header_downloaders.keys().cloned().collect(); - for id in peer_ids { - if let Some(peer) = self.header_downloaders.get_mut(&id) { - peer.mark_as_imported(imported.clone()); - } + for peer in self.header_downloaders.values_mut() { + peer.mark_as_imported(imported.clone()); } let mut headers_to_download: Vec<_> = enacted .into_iter() From 0045dd2d98db1a82f8929db43b88f217cb680f8c Mon Sep 17 00:00:00 2001 From: SeongChan Lee Date: Wed, 20 Nov 2019 21:28:24 +0900 Subject: [PATCH 4/4] Enhance error message in waitForTermChange --- test/src/helper/spawn.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/src/helper/spawn.ts b/test/src/helper/spawn.ts index 82fd314403..2e1e21ffc1 100644 --- a/test/src/helper/spawn.ts +++ b/test/src/helper/spawn.ts @@ -859,14 +859,16 @@ export default class CodeChain { public async waitForTermChange(target: number, timeout?: number) { const start = Date.now(); while (true) { - const termMetadata = await stake.getTermMetadata(this.sdk); - if (termMetadata && termMetadata.currentTermId >= target) { + const termMetadata = (await stake.getTermMetadata(this.sdk))!; + if (termMetadata.currentTermId >= target) { return termMetadata; } await wait(1000); if (timeout) { if (Date.now() - start > timeout * 1000) { - throw new Error(`Term didn't changed in ${timeout} s`); + throw new Error( + `Term didn't changed to ${target} in ${timeout} s. It is ${termMetadata.currentTermId} now` + ); } } }