Improve error messages

This commit is contained in:
Igor Katson 2024-03-30 14:29:59 +00:00
parent 70c730a2d3
commit 8f3cd291b0

View file

@ -34,23 +34,32 @@ pub struct ChunkTracker {
// E.g. we might have more pieces, but the client asks to download only some files // E.g. we might have more pieces, but the client asks to download only some files
// partially. // partially.
fn compute_chunk_status(lengths: &Lengths, needed_pieces: &BF) -> anyhow::Result<BF> { fn compute_chunk_status(lengths: &Lengths, needed_pieces: &BF) -> anyhow::Result<BF> {
if needed_pieces.len() != lengths.total_pieces() as usize {
anyhow::bail!(
"bug: needed_pieces.len() != lengths.total_pieces(); {} != {}",
needed_pieces.len(),
lengths.total_pieces()
);
}
let required_size = lengths.chunk_bitfield_bytes(); let required_size = lengths.chunk_bitfield_bytes();
let vec = vec![0u8; required_size]; let vec = vec![0u8; required_size];
let mut chunk_bf = BF::from_boxed_slice(vec.into_boxed_slice()); let mut chunk_bf = BF::from_boxed_slice(vec.into_boxed_slice());
let range = 0..lengths.total_pieces() as usize; let range = 0..lengths.total_pieces() as usize;
for piece_index in needed_pieces for piece_index in needed_pieces
.get(range.clone()) .get(range.clone())
.with_context(|| format!("error getting range {range:?} from needed_pieces"))? .with_context(|| format!("bug: error getting range {range:?} from needed_pieces. needed_pieces.len() = {}, range={:?}", needed_pieces.len(), range))?
.iter_zeros() .iter_zeros()
{ {
let offset = piece_index * lengths.default_chunks_per_piece() as usize; let offset = piece_index * lengths.default_chunks_per_piece() as usize;
let chunks_per_piece = lengths let chunks_per_piece = lengths.chunks_per_piece(
.chunks_per_piece(lengths.try_validate_piece_index(piece_index as u32)?) lengths
as usize; .try_validate_piece_index(piece_index as u32)
.context("bug")?,
) as usize;
let range = offset..offset + chunks_per_piece; let range = offset..offset + chunks_per_piece;
chunk_bf chunk_bf
.get_mut(range.clone()) .get_mut(range.clone())
.with_context(|| format!("error getting range {range:?} from chunk_bf"))? .with_context(|| format!("bug: error getting range {range:?} from chunk_bf"))?
.fill(true); .fill(true);
} }
Ok(chunk_bf) Ok(chunk_bf)