fix(download): handle bodies range reset after unwind (#1942)

Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
This commit is contained in:
Roman Krasiuk
2023-03-24 12:16:08 +02:00
committed by GitHub
parent 4a18614e18
commit b59f7df72d

View File

@ -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(())
}
}