pub struct ConsensusUpgradableReadLockGuard<'a, TYPES: NodeType> {
lock_guard: ManuallyDrop<RwLockUpgradableReadGuard<'a, Consensus<TYPES>>>,
taken: bool,
}
Expand description
A thin wrapper around RwLockUpgradableReadGuard
for Consensus
that leaves debug traces when the lock is freed or upgraded
Fields§
§lock_guard: ManuallyDrop<RwLockUpgradableReadGuard<'a, Consensus<TYPES>>>
Inner RwLockUpgradableReadGuard
taken: bool
A helper bool to indicate whether inner lock has been unsafely taken or not
Implementations§
Source§impl<'a, TYPES: NodeType> ConsensusUpgradableReadLockGuard<'a, TYPES>
impl<'a, TYPES: NodeType> ConsensusUpgradableReadLockGuard<'a, TYPES>
Sourcepub fn new(lock_guard: RwLockUpgradableReadGuard<'a, Consensus<TYPES>>) -> Self
pub fn new(lock_guard: RwLockUpgradableReadGuard<'a, Consensus<TYPES>>) -> Self
Creates a new instance of ConsensusUpgradableReadLockGuard
with the same name as parent OuterConsensus
Sourcepub async fn upgrade(guard: Self) -> ConsensusWriteLockGuard<'a, TYPES>
pub async fn upgrade(guard: Self) -> ConsensusWriteLockGuard<'a, TYPES>
Upgrades the inner RwLockUpgradableReadGuard
and leaves debug traces
Methods from Deref<Target = Consensus<TYPES>>§
Sourcepub fn last_decided_view(&self) -> TYPES::View
pub fn last_decided_view(&self) -> TYPES::View
Get the last decided view.
Sourcepub fn locked_view(&self) -> TYPES::View
pub fn locked_view(&self) -> TYPES::View
Get the locked view.
Sourcepub fn high_qc(&self) -> &QuorumCertificate2<TYPES>
pub fn high_qc(&self) -> &QuorumCertificate2<TYPES>
Get the high QC.
Sourcepub fn transition_qc(
&self,
) -> Option<&(QuorumCertificate2<TYPES>, NextEpochQuorumCertificate2<TYPES>)>
pub fn transition_qc( &self, ) -> Option<&(QuorumCertificate2<TYPES>, NextEpochQuorumCertificate2<TYPES>)>
Get the transition QC.
Sourcepub fn state_cert(&self) -> Option<&LightClientStateUpdateCertificate<TYPES>>
pub fn state_cert(&self) -> Option<&LightClientStateUpdateCertificate<TYPES>>
Get the current light client state certificate
Sourcepub fn next_epoch_high_qc(&self) -> Option<&NextEpochQuorumCertificate2<TYPES>>
pub fn next_epoch_high_qc(&self) -> Option<&NextEpochQuorumCertificate2<TYPES>>
Get the next epoch high QC.
Sourcepub fn validated_state_map(&self) -> &BTreeMap<TYPES::View, View<TYPES>>
pub fn validated_state_map(&self) -> &BTreeMap<TYPES::View, View<TYPES>>
Get the validated state map.
Sourcepub fn saved_leaves(&self) -> &CommitmentMap<Leaf2<TYPES>>
pub fn saved_leaves(&self) -> &CommitmentMap<Leaf2<TYPES>>
Get the saved leaves.
Sourcepub fn saved_payloads(
&self,
) -> &BTreeMap<TYPES::View, Arc<PayloadWithMetadata<TYPES>>>
pub fn saved_payloads( &self, ) -> &BTreeMap<TYPES::View, Arc<PayloadWithMetadata<TYPES>>>
Get the saved payloads.
Get the vid shares.
Sourcepub fn saved_da_certs(&self) -> &HashMap<TYPES::View, DaCertificate2<TYPES>>
pub fn saved_da_certs(&self) -> &HashMap<TYPES::View, DaCertificate2<TYPES>>
Get the saved DA certs.
Sourcepub fn last_proposals(
&self,
) -> &BTreeMap<TYPES::View, Proposal<TYPES, QuorumProposalWrapper<TYPES>>>
pub fn last_proposals( &self, ) -> &BTreeMap<TYPES::View, Proposal<TYPES, QuorumProposalWrapper<TYPES>>>
Get the map of our recent proposals
Sourcepub async fn parent_leaf_info(
&self,
leaf: &Leaf2<TYPES>,
public_key: &TYPES::SignatureKey,
) -> Option<LeafInfo<TYPES>>
pub async fn parent_leaf_info( &self, leaf: &Leaf2<TYPES>, public_key: &TYPES::SignatureKey, ) -> Option<LeafInfo<TYPES>>
Get the parent Leaf Info from a given leaf and our public key. Returns None if we don’t have the data in out state
Sourcepub fn visit_leaf_ancestors<F>(
&self,
start_from: TYPES::View,
terminator: Terminator<TYPES::View>,
ok_when_finished: bool,
f: F,
) -> Result<(), HotShotError<TYPES>>where
F: FnMut(&Leaf2<TYPES>, Arc<<TYPES as NodeType>::ValidatedState>, Option<Arc<<<TYPES as NodeType>::ValidatedState as ValidatedState<TYPES>>::Delta>>) -> bool,
pub fn visit_leaf_ancestors<F>(
&self,
start_from: TYPES::View,
terminator: Terminator<TYPES::View>,
ok_when_finished: bool,
f: F,
) -> Result<(), HotShotError<TYPES>>where
F: FnMut(&Leaf2<TYPES>, Arc<<TYPES as NodeType>::ValidatedState>, Option<Arc<<<TYPES as NodeType>::ValidatedState as ValidatedState<TYPES>>::Delta>>) -> bool,
gather information from the parent chain of leaves
§Errors
If the leaf or its ancestors are not found in storage
Sourcepub fn decided_leaf(&self) -> Leaf2<TYPES>
pub fn decided_leaf(&self) -> Leaf2<TYPES>
Gets the last decided leaf.
§Panics
if the last decided view’s leaf does not exist in the state map or saved leaves, which should never happen.
pub fn undecided_leaves(&self) -> Vec<Leaf2<TYPES>>
Sourcepub fn state(
&self,
view_number: TYPES::View,
) -> Option<&Arc<TYPES::ValidatedState>>
pub fn state( &self, view_number: TYPES::View, ) -> Option<&Arc<TYPES::ValidatedState>>
Gets the validated state with the given view number, if in the state map.
Sourcepub fn state_and_delta(&self, view_number: TYPES::View) -> StateAndDelta<TYPES>
pub fn state_and_delta(&self, view_number: TYPES::View) -> StateAndDelta<TYPES>
Gets the validated state and state delta with the given view number, if in the state map.
Sourcepub fn decided_state(&self) -> Arc<TYPES::ValidatedState>
pub fn decided_state(&self) -> Arc<TYPES::ValidatedState>
Gets the last decided validated state.
§Panics
If the last decided view’s state does not exist in the state map, which should never happen.
Sourcepub fn is_epoch_transition(&self, leaf_commit: LeafCommitment<TYPES>) -> bool
pub fn is_epoch_transition(&self, leaf_commit: LeafCommitment<TYPES>) -> bool
Returns true if a given leaf is for the epoch transition
Sourcepub fn is_high_qc_for_epoch_transition(&self) -> bool
pub fn is_high_qc_for_epoch_transition(&self) -> bool
Returns true if our high QC is for one of the epoch transition blocks
Sourcepub fn check_eqc(
&self,
proposed_leaf: &Leaf2<TYPES>,
parent_leaf: &Leaf2<TYPES>,
) -> bool
pub fn check_eqc( &self, proposed_leaf: &Leaf2<TYPES>, parent_leaf: &Leaf2<TYPES>, ) -> bool
Returns true if the parent_leaf
formed an eQC for the previous epoch to the proposed_leaf
Sourcepub fn is_high_qc_ge_root_block(&self) -> bool
pub fn is_high_qc_ge_root_block(&self) -> bool
Returns true if our high QC is for the block equal or greater than the root epoch block
Trait Implementations§
Source§impl<TYPES: NodeType> Deref for ConsensusUpgradableReadLockGuard<'_, TYPES>
impl<TYPES: NodeType> Deref for ConsensusUpgradableReadLockGuard<'_, TYPES>
Auto Trait Implementations§
impl<'a, TYPES> Freeze for ConsensusUpgradableReadLockGuard<'a, TYPES>
impl<'a, TYPES> !RefUnwindSafe for ConsensusUpgradableReadLockGuard<'a, TYPES>
impl<'a, TYPES> Send for ConsensusUpgradableReadLockGuard<'a, TYPES>
impl<'a, TYPES> Sync for ConsensusUpgradableReadLockGuard<'a, TYPES>
impl<'a, TYPES> Unpin for ConsensusUpgradableReadLockGuard<'a, TYPES>
impl<'a, TYPES> !UnwindSafe for ConsensusUpgradableReadLockGuard<'a, TYPES>
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> 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.