Only free in replicate if we did not hold the reference in window stage
And then free when we are consuming blobs
This commit is contained in:
parent
6e568c69a7
commit
f4c4b9df9c
|
@ -9,6 +9,7 @@ use rayon::prelude::*;
|
||||||
use std::collections::VecDeque;
|
use std::collections::VecDeque;
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
use transaction::Transaction;
|
use transaction::Transaction;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
// a Block is a slice of Entries
|
// a Block is a slice of Entries
|
||||||
|
|
||||||
|
@ -52,7 +53,11 @@ pub fn reconstruct_entries_from_blobs(
|
||||||
let msg = blob.read().unwrap();
|
let msg = blob.read().unwrap();
|
||||||
deserialize(&msg.data()[..msg.meta.size])
|
deserialize(&msg.data()[..msg.meta.size])
|
||||||
};
|
};
|
||||||
|
// if erasure is enabled, the window may hold a reference to the blob
|
||||||
|
// to be able to perform erasure decoding for missing blobs
|
||||||
|
if Arc::strong_count(&blob) == 1 {
|
||||||
blob_recycler.recycle(blob);
|
blob_recycler.recycle(blob);
|
||||||
|
}
|
||||||
|
|
||||||
match entry {
|
match entry {
|
||||||
Ok(entry) => entries.push(entry),
|
Ok(entry) => entries.push(entry),
|
||||||
|
|
|
@ -331,7 +331,12 @@ fn recv_window(
|
||||||
let block_start = *consumed - (*consumed % erasure::NUM_CODED);
|
let block_start = *consumed - (*consumed % erasure::NUM_CODED);
|
||||||
let coding_end = block_start + erasure::NUM_CODED;
|
let coding_end = block_start + erasure::NUM_CODED;
|
||||||
// We've received all this block's data blobs, go and null out the window now
|
// We've received all this block's data blobs, go and null out the window now
|
||||||
for j in block_start..coding_end {
|
for j in block_start..*consumed {
|
||||||
|
if let Some(b) = mem::replace(&mut window[j % WINDOW_SIZE], None) {
|
||||||
|
recycler.recycle(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for j in *consumed..coding_end {
|
||||||
window[j % WINDOW_SIZE] = None;
|
window[j % WINDOW_SIZE] = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue