Add is_last_blob flag to blob to signal the end of a slot
This commit is contained in:
@@ -60,7 +60,7 @@ impl Broadcast {
|
||||
num_entries += entries.len();
|
||||
ventries.push(entries);
|
||||
}
|
||||
let last_tick = {
|
||||
let contains_last_tick = {
|
||||
if let Some(Some(last)) = ventries.last().map(|entries| entries.last()) {
|
||||
last.tick_height == self.max_tick_height
|
||||
} else {
|
||||
@@ -90,10 +90,14 @@ impl Broadcast {
|
||||
|
||||
inc_new_counter_info!("streamer-broadcast-sent", blobs.len());
|
||||
|
||||
if contains_last_tick {
|
||||
blobs.last().unwrap().write().unwrap().set_is_last_blob();
|
||||
}
|
||||
|
||||
blocktree.write_shared_blobs(&blobs)?;
|
||||
|
||||
// Send out data
|
||||
ClusterInfo::broadcast(&self.id, last_tick, &broadcast_table, sock, &blobs)?;
|
||||
ClusterInfo::broadcast(&self.id, contains_last_tick, &broadcast_table, sock, &blobs)?;
|
||||
|
||||
// Fill in the coding blob data from the window data blobs
|
||||
#[cfg(feature = "erasure")]
|
||||
|
||||
@@ -292,6 +292,8 @@ macro_rules! align {
|
||||
|
||||
pub const BLOB_HEADER_SIZE: usize = align!(SIZE_RANGE.end, 8);
|
||||
|
||||
pub const BLOB_FLAG_IS_LAST: u32 = 0x2;
|
||||
|
||||
pub const BLOB_FLAG_IS_CODING: u32 = 0x1;
|
||||
|
||||
impl Blob {
|
||||
@@ -350,6 +352,15 @@ impl Blob {
|
||||
self.set_flags(flags | BLOB_FLAG_IS_CODING);
|
||||
}
|
||||
|
||||
pub fn set_is_last_blob(&mut self) {
|
||||
let flags = self.flags();
|
||||
self.set_flags(flags | BLOB_FLAG_IS_LAST);
|
||||
}
|
||||
|
||||
pub fn is_last_blob(&self) -> bool {
|
||||
(self.flags() & BLOB_FLAG_IS_LAST) != 0
|
||||
}
|
||||
|
||||
pub fn data_size(&self) -> u64 {
|
||||
LittleEndian::read_u64(&self.data[SIZE_RANGE])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user