pub struct ViewSyncTaskState<TYPES: NodeType, V: Versions> {Show 18 fields
pub cur_view: TYPES::View,
pub next_view: TYPES::View,
pub cur_epoch: Option<TYPES::Epoch>,
pub membership_coordinator: EpochMembershipCoordinator<TYPES>,
pub public_key: TYPES::SignatureKey,
pub private_key: <TYPES::SignatureKey as SignatureKey>::PrivateKey,
pub id: u64,
pub num_timeouts_tracked: u64,
pub replica_task_map: RwLock<BTreeMap<Option<<TYPES as NodeType>::Epoch>, BTreeMap<<TYPES as NodeType>::View, ViewSyncReplicaTaskState<TYPES, V>>>>,
pub pre_commit_relay_map: RwLock<BTreeMap<Option<<TYPES as NodeType>::Epoch>, BTreeMap<<TYPES as NodeType>::View, BTreeMap<u64, VoteCollectionTaskState<TYPES, ViewSyncPreCommitVote2<TYPES>, ViewSyncPreCommitCertificate2<TYPES>, V>>>>>,
pub commit_relay_map: RwLock<BTreeMap<Option<<TYPES as NodeType>::Epoch>, BTreeMap<<TYPES as NodeType>::View, BTreeMap<u64, VoteCollectionTaskState<TYPES, ViewSyncCommitVote2<TYPES>, ViewSyncCommitCertificate2<TYPES>, V>>>>>,
pub finalize_relay_map: RwLock<BTreeMap<Option<<TYPES as NodeType>::Epoch>, BTreeMap<<TYPES as NodeType>::View, BTreeMap<u64, VoteCollectionTaskState<TYPES, ViewSyncFinalizeVote2<TYPES>, ViewSyncFinalizeCertificate2<TYPES>, V>>>>>,
pub view_sync_timeout: Duration,
pub last_garbage_collected_view: TYPES::View,
pub upgrade_lock: UpgradeLock<TYPES, V>,
pub first_epoch: Option<(TYPES::View, TYPES::Epoch)>,
pub highest_finalized_epoch_view: (Option<TYPES::Epoch>, TYPES::View),
pub epoch_height: u64,
}
Expand description
Main view sync task state
Fields§
§cur_view: TYPES::View
View HotShot is currently in
next_view: TYPES::View
View HotShot wishes to be in
cur_epoch: Option<TYPES::Epoch>
Epoch HotShot is currently in
membership_coordinator: EpochMembershipCoordinator<TYPES>
Membership for the quorum
public_key: TYPES::SignatureKey
This Nodes Public Key
private_key: <TYPES::SignatureKey as SignatureKey>::PrivateKey
Our Private Key
id: u64
Our node id; for logging
num_timeouts_tracked: u64
How many timeouts we’ve seen in a row; is reset upon a successful view change
replica_task_map: RwLock<BTreeMap<Option<<TYPES as NodeType>::Epoch>, BTreeMap<<TYPES as NodeType>::View, ViewSyncReplicaTaskState<TYPES, V>>>>
Map of running replica tasks
pre_commit_relay_map: RwLock<BTreeMap<Option<<TYPES as NodeType>::Epoch>, BTreeMap<<TYPES as NodeType>::View, BTreeMap<u64, VoteCollectionTaskState<TYPES, ViewSyncPreCommitVote2<TYPES>, ViewSyncPreCommitCertificate2<TYPES>, V>>>>>
Map of pre-commit vote accumulates for the relay
commit_relay_map: RwLock<BTreeMap<Option<<TYPES as NodeType>::Epoch>, BTreeMap<<TYPES as NodeType>::View, BTreeMap<u64, VoteCollectionTaskState<TYPES, ViewSyncCommitVote2<TYPES>, ViewSyncCommitCertificate2<TYPES>, V>>>>>
Map of commit vote accumulates for the relay
finalize_relay_map: RwLock<BTreeMap<Option<<TYPES as NodeType>::Epoch>, BTreeMap<<TYPES as NodeType>::View, BTreeMap<u64, VoteCollectionTaskState<TYPES, ViewSyncFinalizeVote2<TYPES>, ViewSyncFinalizeCertificate2<TYPES>, V>>>>>
Map of finalize vote accumulates for the relay
view_sync_timeout: Duration
Timeout duration for view sync rounds
last_garbage_collected_view: TYPES::View
Last view we garbage collected old tasks
upgrade_lock: UpgradeLock<TYPES, V>
Lock for a decided upgrade
first_epoch: Option<(TYPES::View, TYPES::Epoch)>
First view in which epoch version takes effect
highest_finalized_epoch_view: (Option<TYPES::Epoch>, TYPES::View)
Keeps track of the highest finalized view and epoch, used for garbage collection
epoch_height: u64
Implementations§
Source§impl<TYPES: NodeType, V: Versions> ViewSyncTaskState<TYPES, V>
impl<TYPES: NodeType, V: Versions> ViewSyncTaskState<TYPES, V>
Sourcepub async fn send_to_or_create_replica(
&mut self,
event: Arc<HotShotEvent<TYPES>>,
view: TYPES::View,
epoch: Option<TYPES::Epoch>,
sender: &Sender<Arc<HotShotEvent<TYPES>>>,
)
pub async fn send_to_or_create_replica( &mut self, event: Arc<HotShotEvent<TYPES>>, view: TYPES::View, epoch: Option<TYPES::Epoch>, sender: &Sender<Arc<HotShotEvent<TYPES>>>, )
Handles incoming events for the main view sync task
Sourcepub async fn handle(
&mut self,
event: Arc<HotShotEvent<TYPES>>,
event_stream: Sender<Arc<HotShotEvent<TYPES>>>,
) -> Result<()>
pub async fn handle( &mut self, event: Arc<HotShotEvent<TYPES>>, event_stream: Sender<Arc<HotShotEvent<TYPES>>>, ) -> Result<()>
Handles incoming events for the main view sync task
Sourceasync fn garbage_collect_tasks(&self)
async fn garbage_collect_tasks(&self)
Garbage collect tasks for epochs older than the highest finalized epoch or older than the previous epoch, whichever is greater. Garbage collect views older than the highest finalized view including the highest finalized view.
async fn garbage_collect_tasks_helper<VAL>( map: &RwLock<BTreeMap<Option<<TYPES as NodeType>::Epoch>, BTreeMap<<TYPES as NodeType>::View, VAL>>>, gc_epoch: &Option<TYPES::Epoch>, gc_view: &TYPES::View, )
Trait Implementations§
Source§impl<TYPES: NodeType, V: Versions> TaskState for ViewSyncTaskState<TYPES, V>
impl<TYPES: NodeType, V: Versions> TaskState for ViewSyncTaskState<TYPES, V>
Source§type Event = HotShotEvent<TYPES>
type Event = HotShotEvent<TYPES>
Source§fn handle_event<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
event: Arc<Self::Event>,
sender: &'life1 Sender<Arc<Self::Event>>,
_receiver: &'life2 Receiver<Arc<Self::Event>>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn handle_event<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
event: Arc<Self::Event>,
sender: &'life1 Sender<Arc<Self::Event>>,
_receiver: &'life2 Receiver<Arc<Self::Event>>,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn cancel_subtasks(&mut self)
fn cancel_subtasks(&mut self)
Auto Trait Implementations§
impl<TYPES, V> !Freeze for ViewSyncTaskState<TYPES, V>
impl<TYPES, V> !RefUnwindSafe for ViewSyncTaskState<TYPES, V>
impl<TYPES, V> Send for ViewSyncTaskState<TYPES, V>
impl<TYPES, V> Sync for ViewSyncTaskState<TYPES, V>
impl<TYPES, V> Unpin for ViewSyncTaskState<TYPES, V>where
<TYPES as NodeType>::View: Unpin,
<TYPES as NodeType>::SignatureKey: Unpin,
<<TYPES as NodeType>::SignatureKey as SignatureKey>::PrivateKey: Unpin,
<TYPES as NodeType>::Epoch: Unpin,
V: Unpin,
impl<TYPES, V> !UnwindSafe for ViewSyncTaskState<TYPES, V>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.