From 87e203e9794e9c113f85c339072ac02a8fe3a147 Mon Sep 17 00:00:00 2001 From: Dan Cline <6798349+Rjected@users.noreply.github.com> Date: Thu, 29 Feb 2024 14:41:32 -0500 Subject: [PATCH 1/2] fix: use HashSet for transactions_by_peers --- crates/net/network/src/transactions/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/net/network/src/transactions/mod.rs b/crates/net/network/src/transactions/mod.rs index 700da8f2bdd7..912a2694fa72 100644 --- a/crates/net/network/src/transactions/mod.rs +++ b/crates/net/network/src/transactions/mod.rs @@ -225,7 +225,7 @@ pub struct TransactionsManager { /// /// This way we can track incoming transactions and prevent multiple pool imports for the same /// transaction - transactions_by_peers: HashMap>, + transactions_by_peers: HashMap>, /// Transactions that are currently imported into the `Pool`. /// /// The import process includes: @@ -1038,7 +1038,7 @@ where match self.transactions_by_peers.entry(*tx.hash()) { Entry::Occupied(mut entry) => { // transaction was already inserted - entry.get_mut().push(peer_id); + entry.get_mut().insert(peer_id); } Entry::Vacant(entry) => { if !self.bad_imports.contains(tx.hash()) { @@ -1046,7 +1046,7 @@ where let pool_transaction = ::from_recovered_pooled_transaction(tx); new_txs.push(pool_transaction); - entry.insert(vec![peer_id]); + entry.insert(HashSet::from([peer_id])); } else { trace!(target: "net::tx", peer_id=format!("{peer_id:#}"), From 7df6bbc76cec6b5119f547c5b6b2e344b89ea58f Mon Sep 17 00:00:00 2001 From: Dan Cline <6798349+Rjected@users.noreply.github.com> Date: Thu, 29 Feb 2024 14:46:30 -0500 Subject: [PATCH 2/2] fix test --- crates/net/network/src/transactions/mod.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/crates/net/network/src/transactions/mod.rs b/crates/net/network/src/transactions/mod.rs index 912a2694fa72..0f8900ad1064 100644 --- a/crates/net/network/src/transactions/mod.rs +++ b/crates/net/network/src/transactions/mod.rs @@ -1155,7 +1155,7 @@ where self.bad_imports.insert(hash); } - /// Returns `true` if [`TransactionsManager`] has capacity to request pending hashes. Returns + /// Returns `true` if [`TransactionsManager`] has capacity to request pending hashes. Returns /// `false` if [`TransactionsManager`] is operating close to full capacity. fn has_capacity_for_fetching_pending_hashes(&self) -> bool { self.pending_pool_imports_info @@ -1905,10 +1905,11 @@ mod tests { peer_id: *handle1.peer_id(), msg: Transactions(vec![signed_tx.clone()]), }); - assert_eq!( - *handle1.peer_id(), - transactions.transactions_by_peers.get(&signed_tx.hash()).unwrap()[0] - ); + assert!(transactions + .transactions_by_peers + .get(&signed_tx.hash()) + .unwrap() + .contains(handle1.peer_id())); // advance the transaction manager future poll_fn(|cx| {