From 4c94878cf7798b1cd001b91b9e6cfb576b53d4f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Mon, 9 Jan 2017 11:20:02 +0100 Subject: [PATCH] Sending transactions in chunks. (#4089) --- sync/src/chain.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sync/src/chain.rs b/sync/src/chain.rs index a9a806dd3..a87c7d1be 100644 --- a/sync/src/chain.rs +++ b/sync/src/chain.rs @@ -125,6 +125,8 @@ const MAX_NEW_HASHES: usize = 64; const MAX_TX_TO_IMPORT: usize = 512; const MAX_NEW_BLOCK_AGE: BlockNumber = 20; const MAX_TRANSACTION_SIZE: usize = 300*1024; +// Maximal number of transactions in sent in single packet. +const MAX_TRANSACTIONS_TO_PROPAGATE: usize = 64; // Min number of blocks to be behind for a snapshot sync const SNAPSHOT_RESTORE_THRESHOLD: BlockNumber = 100000; const SNAPSHOT_MIN_PEERS: usize = 3; @@ -1991,7 +1993,10 @@ impl ChainSync { } // Get hashes of all transactions to send to this peer - let to_send = all_transactions_hashes.difference(&peer_info.last_sent_transactions).cloned().collect::>(); + let to_send = all_transactions_hashes.difference(&peer_info.last_sent_transactions) + .take(MAX_TRANSACTIONS_TO_PROPAGATE) + .cloned() + .collect::>(); if to_send.is_empty() { return None; } @@ -2007,7 +2012,11 @@ impl ChainSync { } } - peer_info.last_sent_transactions = all_transactions_hashes.clone(); + peer_info.last_sent_transactions = all_transactions_hashes + .intersection(&peer_info.last_sent_transactions) + .chain(&to_send) + .cloned() + .collect(); Some((*peer_id, to_send.len(), packet.out())) }) .collect::>()