mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
fix(download): handle bodies range reset after unwind (#1942)
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
This commit is contained in:
@ -280,28 +280,34 @@ where
|
||||
/// downloaded or are not in progress, they will be re-requested.
|
||||
fn set_download_range(&mut self, range: Range<BlockNumber>) -> DownloadResult<()> {
|
||||
// Check if the range is valid.
|
||||
let is_valid = !range.is_empty();
|
||||
if is_valid {
|
||||
// Check if the provided range is the subset of the existing range.
|
||||
let is_current_range_subset =
|
||||
self.download_range.contains(&range.start) && range.end == self.download_range.end;
|
||||
if is_current_range_subset {
|
||||
tracing::trace!(target: "downloaders::bodies", ?range, "Download range already in progress");
|
||||
// The current range already includes requested.
|
||||
return Ok(())
|
||||
}
|
||||
|
||||
// Check if the provided range is the next expected range.
|
||||
let is_next_range = range.start >= self.download_range.end;
|
||||
if is_next_range {
|
||||
// New range received.
|
||||
tracing::trace!(target: "downloaders::bodies", ?range, "New download range set");
|
||||
self.download_range = range;
|
||||
return Ok(())
|
||||
}
|
||||
if range.is_empty() {
|
||||
tracing::error!(target: "downloaders::bodies", ?range, "Range is invalid");
|
||||
return Err(DownloadError::InvalidBodyRange { range })
|
||||
}
|
||||
|
||||
Err(DownloadError::InvalidBodyRange { range })
|
||||
// Check if the provided range is the subset of the existing range.
|
||||
let is_current_range_subset =
|
||||
self.download_range.contains(&range.start) && range.end == self.download_range.end;
|
||||
if is_current_range_subset {
|
||||
tracing::trace!(target: "downloaders::bodies", ?range, "Download range already in progress");
|
||||
// The current range already includes requested.
|
||||
return Ok(())
|
||||
}
|
||||
|
||||
// Check if the provided range is the next expected range.
|
||||
let is_next_range = range.start >= self.download_range.end;
|
||||
if is_next_range {
|
||||
// New range received.
|
||||
tracing::trace!(target: "downloaders::bodies", ?range, "New download range set");
|
||||
self.download_range = range;
|
||||
return Ok(())
|
||||
}
|
||||
|
||||
// The block range reset after unwind.
|
||||
tracing::trace!(target: "downloaders::bodies", ?range, prev_range = ?self.download_range, "Download range reset");
|
||||
self.clear();
|
||||
self.download_range = range;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user