TVU rework (#352)

Refactored TVU, into stages
* blob fetch stage for blobs
* window stage for maintaining the blob window
* pulled out NCP out of the TVU so they can be separate units
TVU is now just the fetch -> window -> request and bank processing
This commit is contained in:
anatoly yakovenko
2018-06-13 21:52:23 -07:00
committed by GitHub
parent 34e0cb0092
commit c24b0a1a3f
9 changed files with 220 additions and 115 deletions

View File

@@ -18,6 +18,7 @@ pub type PacketReceiver = mpsc::Receiver<SharedPackets>;
pub type PacketSender = mpsc::Sender<SharedPackets>;
pub type BlobSender = mpsc::Sender<VecDeque<SharedBlob>>;
pub type BlobReceiver = mpsc::Receiver<VecDeque<SharedBlob>>;
pub type Window = Arc<RwLock<Vec<Option<SharedBlob>>>>;
fn recv_loop(
sock: &UdpSocket,
@@ -143,7 +144,7 @@ pub fn blob_receiver(
}
fn find_next_missing(
locked_window: &Arc<RwLock<Vec<Option<SharedBlob>>>>,
locked_window: &Window,
crdt: &Arc<RwLock<Crdt>>,
consumed: &mut usize,
received: &mut usize,
@@ -168,7 +169,7 @@ fn find_next_missing(
}
fn repair_window(
locked_window: &Arc<RwLock<Vec<Option<SharedBlob>>>>,
locked_window: &Window,
crdt: &Arc<RwLock<Crdt>>,
_recycler: &BlobRecycler,
last: &mut usize,
@@ -211,7 +212,7 @@ fn repair_window(
}
fn recv_window(
locked_window: &Arc<RwLock<Vec<Option<SharedBlob>>>>,
locked_window: &Window,
crdt: &Arc<RwLock<Crdt>>,
recycler: &BlobRecycler,
consumed: &mut usize,
@@ -353,7 +354,7 @@ fn recv_window(
Ok(())
}
fn print_window(locked_window: &Arc<RwLock<Vec<Option<SharedBlob>>>>, consumed: usize) {
fn print_window(locked_window: &Window, consumed: usize) {
{
let buf: Vec<_> = locked_window
.read()
@@ -382,14 +383,14 @@ fn print_window(locked_window: &Arc<RwLock<Vec<Option<SharedBlob>>>>, consumed:
}
}
pub fn default_window() -> Arc<RwLock<Vec<Option<SharedBlob>>>> {
pub fn default_window() -> Window {
Arc::new(RwLock::new(vec![None; WINDOW_SIZE]))
}
pub fn window(
exit: Arc<AtomicBool>,
crdt: Arc<RwLock<Crdt>>,
window: Arc<RwLock<Vec<Option<SharedBlob>>>>,
window: Window,
recycler: BlobRecycler,
r: BlobReceiver,
s: BlobSender,
@@ -432,7 +433,7 @@ pub fn window(
fn broadcast(
crdt: &Arc<RwLock<Crdt>>,
window: &Arc<RwLock<Vec<Option<SharedBlob>>>>,
window: &Window,
recycler: &BlobRecycler,
r: &BlobReceiver,
sock: &UdpSocket,
@@ -517,7 +518,7 @@ pub fn broadcaster(
sock: UdpSocket,
exit: Arc<AtomicBool>,
crdt: Arc<RwLock<Crdt>>,
window: Arc<RwLock<Vec<Option<SharedBlob>>>>,
window: Window,
recycler: BlobRecycler,
r: BlobReceiver,
) -> JoinHandle<()> {