mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 11:07:56 +00:00
Fixed block response limit check (#9692)
* Fixed block response limit check * Fixed start block detection and added a test * Missing test
This commit is contained in:
@@ -70,7 +70,7 @@ mod state;
|
||||
mod warp;
|
||||
|
||||
/// Maximum blocks to request in a single packet.
|
||||
const MAX_BLOCKS_TO_REQUEST: usize = 128;
|
||||
const MAX_BLOCKS_TO_REQUEST: usize = 64;
|
||||
|
||||
/// Maximum blocks to store in the import queue.
|
||||
const MAX_IMPORTING_BLOCKS: usize = 2048;
|
||||
@@ -1054,12 +1054,14 @@ impl<B: BlockT> ChainSync<B> {
|
||||
self.pending_requests.add(who);
|
||||
if let Some(request) = request {
|
||||
match &mut peer.state {
|
||||
PeerSyncState::DownloadingNew(start_block) => {
|
||||
PeerSyncState::DownloadingNew(_) => {
|
||||
self.blocks.clear_peer_download(who);
|
||||
let start_block = *start_block;
|
||||
peer.state = PeerSyncState::Available;
|
||||
validate_blocks::<B>(&blocks, who, Some(request))?;
|
||||
self.blocks.insert(start_block, blocks, who.clone());
|
||||
if let Some(start_block) =
|
||||
validate_blocks::<B>(&blocks, who, Some(request))?
|
||||
{
|
||||
self.blocks.insert(start_block, blocks, who.clone());
|
||||
}
|
||||
self.drain_blocks()
|
||||
},
|
||||
PeerSyncState::DownloadingStale(_) => {
|
||||
@@ -2315,13 +2317,14 @@ where
|
||||
}
|
||||
|
||||
/// Validate that the given `blocks` are correct.
|
||||
/// Returns the number of the first block in the sequence.
|
||||
///
|
||||
/// It is expected that `blocks` are in asending order.
|
||||
/// It is expected that `blocks` are in ascending order.
|
||||
fn validate_blocks<Block: BlockT>(
|
||||
blocks: &Vec<message::BlockData<Block>>,
|
||||
who: &PeerId,
|
||||
request: Option<BlockRequest<Block>>,
|
||||
) -> Result<(), BadPeer> {
|
||||
) -> Result<Option<NumberFor<Block>>, BadPeer> {
|
||||
if let Some(request) = request {
|
||||
if Some(blocks.len() as _) > request.max {
|
||||
debug!(
|
||||
@@ -2415,7 +2418,7 @@ fn validate_blocks<Block: BlockT>(
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
Ok(blocks.first().and_then(|b| b.header.as_ref()).map(|h| *h.number()))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
@@ -194,7 +194,7 @@ impl<B: BlockT> BlockCollection<B> {
|
||||
for r in ranges {
|
||||
self.blocks.remove(&r);
|
||||
}
|
||||
trace!(target: "sync", "Drained {} blocks", drained.len());
|
||||
trace!(target: "sync", "Drained {} blocks from {:?}", drained.len(), from);
|
||||
drained
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user