From 5dbecd6b6bf27de24e7878f6ed4435b25eefd317 Mon Sep 17 00:00:00 2001 From: Rob Walker Date: Thu, 16 Aug 2018 18:00:53 -0700 Subject: [PATCH] add logging, more conservative reset --- src/erasure.rs | 23 ++++++++++++++++++----- src/packet.rs | 3 +++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/erasure.rs b/src/erasure.rs index 9fd78d1e8c..4e96be3688 100644 --- a/src/erasure.rs +++ b/src/erasure.rs @@ -508,6 +508,12 @@ pub fn recover( if let Some(b) = window[j].coding.clone() { if size.is_none() { size = Some(b.read().unwrap().meta.size - BLOB_HEADER_SIZE); + trace!( + "{:x} recover size {} from {}", + debug_id, + size.unwrap(), + i as u64 + block_start_idx + ); } blobs.push(b); } else { @@ -518,12 +524,13 @@ pub fn recover( erasures.push(((i - coding_start) + NUM_DATA) as i32); } } + // now that we have size (from coding), zero out data blob tails + let size = size.unwrap(); for i in block_start..block_end { let j = i % window.len(); if let Some(b) = &window[j].data { - let size = size.unwrap(); let mut b_wl = b.write().unwrap(); for i in b_wl.meta.size..size { b_wl.data[i] = 0; @@ -537,7 +544,7 @@ pub fn recover( "erasures[]: {:x} {:?} data_size: {}", debug_id, erasures, - size.unwrap(), + size, ); //lock everything for write for b in &blobs { @@ -550,10 +557,10 @@ pub fn recover( for (i, l) in locks.iter_mut().enumerate() { if i < NUM_DATA { trace!("{:x} pushing data: {}", debug_id, i); - data_ptrs.push(&mut l.data[..size.unwrap()]); + data_ptrs.push(&mut l.data[..size]); } else { trace!("{:x} pushing coding: {}", debug_id, i); - coding_ptrs.push(&mut l.data_mut()[..size.unwrap()]); + coding_ptrs.push(&mut l.data_mut()[..size]); } } trace!( @@ -580,7 +587,7 @@ pub fn recover( data_size = locks[n].get_data_size().unwrap(); data_size -= BLOB_HEADER_SIZE as u64; } else { - data_size = size.unwrap() as u64; + data_size = size as u64; idx -= NUM_CODING as u64; locks[n].set_index(idx).unwrap(); } @@ -596,6 +603,12 @@ pub fn recover( locks[n].data()[0] ); if data_size > BLOB_DATA_SIZE as u64 { + trace!( + "{:x} corrupt blob[{}] data_size: {}", + debug_id, + idx, + data_size + ); corrupt = true; } } diff --git a/src/packet.rs b/src/packet.rs index 33ced51cd0..f7f0e22105 100644 --- a/src/packet.rs +++ b/src/packet.rs @@ -165,6 +165,9 @@ impl Reset for Blob { fn reset(&mut self) { self.meta = Meta::default(); self.data[..BLOB_HEADER_SIZE].copy_from_slice(&[0u8; BLOB_HEADER_SIZE]); + for i in 0..BLOB_SIZE { + self.data[i] = 0; + } } }