From 5be4924672e5d58399ee1701ade075569fb61a2e Mon Sep 17 00:00:00 2001 From: David Date: Tue, 10 Mar 2020 23:58:54 +0100 Subject: [PATCH] =?UTF-8?q?Misc=20docs=20and=20renames=20=E2=80=A6and=20on?= =?UTF-8?q?e=20less=20clone=20(#11556)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Misc docs and renames …and one less clone * unused import * Docs * Update ethcore/src/client/client.rs Co-Authored-By: Niklas Adolfsson Co-authored-by: Niklas Adolfsson --- ethcore/engine/src/engine.rs | 4 +++- ethcore/machine/src/machine.rs | 4 +++- ethcore/src/client/client.rs | 12 ++++++++---- ethcore/src/test_helpers/test_client.rs | 2 +- ethcore/sync/src/chain/handler.rs | 6 +++--- ethcore/sync/src/chain/mod.rs | 2 +- ethcore/sync/src/chain/requester.rs | 2 +- ethcore/sync/src/chain/supplier.rs | 2 +- ethcore/types/src/io_message.rs | 6 +++--- 9 files changed, 24 insertions(+), 16 deletions(-) diff --git a/ethcore/engine/src/engine.rs b/ethcore/engine/src/engine.rs index 39118089d..dadd223a8 100644 --- a/ethcore/engine/src/engine.rs +++ b/ethcore/engine/src/engine.rs @@ -399,7 +399,9 @@ pub trait Engine: Sync + Send { self.machine().verify_transaction_basic(t, header) } - /// Performs pre-validation of RLP decoded transaction before other processing + /// Performs pre-validation of RLP encoded transaction before other + /// processing: check length against `max_transaction_size` and decode the + /// RLP. fn decode_transaction(&self, transaction: &[u8]) -> Result { self.machine().decode_transaction(transaction) } diff --git a/ethcore/machine/src/machine.rs b/ethcore/machine/src/machine.rs index 30ec44a5a..0f4e51f4f 100644 --- a/ethcore/machine/src/machine.rs +++ b/ethcore/machine/src/machine.rs @@ -364,7 +364,9 @@ impl Machine { Ok(()) } - /// Performs pre-validation of RLP decoded transaction before other processing + /// Performs pre-validation of RLP encoded transaction before other + /// processing: check length against `max_transaction_size` and decode the + /// RLP. pub fn decode_transaction(&self, transaction: &[u8]) -> Result { let rlp = Rlp::new(&transaction); if rlp.as_raw().len() > self.params().max_transaction_size { diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index 4e6c24c45..06206dc1d 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -2186,7 +2186,7 @@ impl IoClient for Client { fn queue_transactions(&self, transactions: Vec, peer_id: usize) { trace_time!("queue_transactions"); let len = transactions.len(); - self.queue_transactions.queue(&self.io_channel.read(), len, move |client| { + self.queue_transactions.enqueue(&self.io_channel.read(), len, move |client| { trace_time!("import_queued_transactions"); let txs: Vec = transactions @@ -2231,7 +2231,7 @@ impl IoClient for Client { let queued = self.queued_ancient_blocks.clone(); let lock = self.ancient_blocks_import_lock.clone(); - self.queue_ancient_blocks.queue(&self.io_channel.read(), 1, move |client| { + self.queue_ancient_blocks.enqueue(&self.io_channel.read(), 1, move |client| { trace_time!("import_ancient_block"); // Make sure to hold the lock here to prevent importing out of order. // We use separate lock, cause we don't want to block queueing. @@ -2265,7 +2265,7 @@ impl IoClient for Client { } fn queue_consensus_message(&self, message: Bytes) { - match self.queue_consensus_message.queue(&self.io_channel.read(), 1, move |client| { + match self.queue_consensus_message.enqueue(&self.io_channel.read(), 1, move |client| { if let Err(e) = client.engine().handle_message(&message) { debug!(target: "poa", "Invalid message received: {}", e); } @@ -2798,7 +2798,11 @@ impl IoChannelQueue { } } - pub fn queue(&self, channel: &IoChannel>, count: usize, fun: F) -> EthcoreResult<()> where + /// Try to to add an item to the queue for deferred processing by the IO + /// client. Messages take the form of `Fn` closures that carry a `Client` + /// reference with them. Enqueuing a message can fail if the queue is full + /// or if the `send()` on the `IoChannel` fails. + pub fn enqueue(&self, channel: &IoChannel>, count: usize, fun: F) -> EthcoreResult<()> where F: Fn(&Client) + Send + Sync + 'static, { let queue_size = self.currently_queued.load(AtomicOrdering::Relaxed); diff --git a/ethcore/src/test_helpers/test_client.rs b/ethcore/src/test_helpers/test_client.rs index a3b2d6381..b1ad6cc27 100644 --- a/ethcore/src/test_helpers/test_client.rs +++ b/ethcore/src/test_helpers/test_client.rs @@ -937,7 +937,7 @@ impl BlockChainClient for TestBlockChainClient { impl IoClient for TestBlockChainClient { fn queue_transactions(&self, transactions: Vec, _peer_id: usize) { // import right here - let txs = transactions.into_iter().filter_map(|bytes| Rlp::new(&bytes).as_val().ok()).collect(); + let txs = transactions.iter().filter_map(|bytes| Rlp::new(bytes).as_val().ok()).collect(); self.miner.import_external_transactions(self, txs); } diff --git a/ethcore/sync/src/chain/handler.rs b/ethcore/sync/src/chain/handler.rs index dcc8f56cb..21e82cfed 100644 --- a/ethcore/sync/src/chain/handler.rs +++ b/ethcore/sync/src/chain/handler.rs @@ -675,7 +675,7 @@ impl SyncHandler { } /// Called when peer sends us new transactions - pub fn on_peer_transactions(sync: &ChainSync, io: &mut dyn SyncIo, peer_id: PeerId, r: &Rlp) -> Result<(), PacketDecodeError> { + pub fn on_peer_transactions(sync: &ChainSync, io: &mut dyn SyncIo, peer_id: PeerId, tx_rlp: Rlp) -> Result<(), PacketDecodeError> { // Accept transactions only when fully synced if !io.is_chain_queue_empty() || (sync.state != SyncState::Idle && sync.state != SyncState::NewBlocks) { trace!(target: "sync", "{} Ignoring transactions while syncing", peer_id); @@ -686,11 +686,11 @@ impl SyncHandler { return Ok(()); } - let item_count = r.item_count()?; + let item_count = tx_rlp.item_count()?; trace!(target: "sync", "{:02} -> Transactions ({} entries)", peer_id, item_count); let mut transactions = Vec::with_capacity(item_count); for i in 0 .. item_count { - let rlp = r.at(i)?; + let rlp = tx_rlp.at(i)?; let tx = rlp.as_raw().to_vec(); transactions.push(tx); } diff --git a/ethcore/sync/src/chain/mod.rs b/ethcore/sync/src/chain/mod.rs index e9bb3cae4..98627c4d1 100644 --- a/ethcore/sync/src/chain/mod.rs +++ b/ethcore/sync/src/chain/mod.rs @@ -762,7 +762,7 @@ impl ChainSync { self.transactions_stats.stats() } - /// Updates transactions were received by a peer + /// Updates the set of transactions recently sent to this peer to avoid spamming. pub fn transactions_received(&mut self, txs: &[UnverifiedTransaction], peer_id: PeerId) { if let Some(peer_info) = self.peers.get_mut(&peer_id) { peer_info.last_sent_transactions.extend(txs.iter().map(|tx| tx.hash())); diff --git a/ethcore/sync/src/chain/requester.rs b/ethcore/sync/src/chain/requester.rs index 9f95e6133..3b44a59e0 100644 --- a/ethcore/sync/src/chain/requester.rs +++ b/ethcore/sync/src/chain/requester.rs @@ -68,7 +68,7 @@ impl SyncRequester { let mut rlp = RlpStream::new_list(hashes.len()); trace!(target: "sync", "{} <- GetBlockBodies: {} entries starting from {:?}, set = {:?}", peer_id, hashes.len(), hashes.first(), set); for h in &hashes { - rlp.append(&h.clone()); + rlp.append(h); } SyncRequester::send_request(sync, io, peer_id, PeerAsking::BlockBodies, GetBlockBodiesPacket, rlp.out()); let peer = sync.peers.get_mut(&peer_id).expect("peer_id may originate either from on_packet, where it is already validated or from enumerating self.peers. qed"); diff --git a/ethcore/sync/src/chain/supplier.rs b/ethcore/sync/src/chain/supplier.rs index dbfb0ff1e..14651c99b 100644 --- a/ethcore/sync/src/chain/supplier.rs +++ b/ethcore/sync/src/chain/supplier.rs @@ -128,7 +128,7 @@ impl SyncSupplier { TransactionsPacket => { let res = { let sync_ro = sync.read(); - SyncHandler::on_peer_transactions(&*sync_ro, io, peer, &rlp) + SyncHandler::on_peer_transactions(&*sync_ro, io, peer, rlp) }; if res.is_err() { // peer sent invalid data, disconnect. diff --git a/ethcore/types/src/io_message.rs b/ethcore/types/src/io_message.rs index a86901c9e..db33feb48 100644 --- a/ethcore/types/src/io_message.rs +++ b/ethcore/types/src/io_message.rs @@ -37,18 +37,18 @@ pub enum ClientIoMessage { FeedBlockChunk(H256, Bytes), /// Take a snapshot for the block with given number. TakeSnapshot(u64), - /// Execute wrapped closure + /// Execute wrapped Fn closure Execute(Callback), } impl ClientIoMessage { - /// Create new `ClientIoMessage` that executes given procedure. + /// Create new `ClientIoMessage` that can execute the wrapped Fn closure. pub fn execute(fun: F) -> Self { ClientIoMessage::Execute(Callback(Box::new(fun))) } } -/// A function to invoke in the client thread. +/// A wrapper around an Fn closure to invoke in the client thread. pub struct Callback(pub Box); impl fmt::Debug for Callback {