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
// partially.
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 vec = vec![0u8; required_size];
let mut chunk_bf = BF::from_boxed_slice(vec.into_boxed_slice());
let range = 0..lengths.total_pieces() as usize;
for piece_index in needed_pieces
.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()
{
let offset = piece_index * lengths.default_chunks_per_piece() as usize;
let chunks_per_piece = lengths
.chunks_per_piece(lengths.try_validate_piece_index(piece_index as u32)?)
as usize;
let chunks_per_piece = lengths.chunks_per_piece(
lengths
.try_validate_piece_index(piece_index as u32)
.context("bug")?,
) as usize;
let range = offset..offset + chunks_per_piece;
chunk_bf
.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);
}
Ok(chunk_bf)