Add is_last_blob flag to blob to signal the end of a slot

This commit is contained in:
Carl
2019-02-11 17:30:46 -08:00
committed by Grimes
parent 8f1b7c3fff
commit bc162637a6
3 changed files with 22 additions and 4 deletions

View File

@@ -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")]

View File

@@ -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])
}