Struct pallet_im_online::HeartbeatStatus
source · pub(crate) struct HeartbeatStatus<BlockNumber> {
pub session_index: SessionIndex,
pub sent_at: BlockNumber,
}
Expand description
Status of the offchain worker code.
This stores the block number at which heartbeat was requested and when the worker
has actually managed to produce it.
Note we store such status for every authority_index
separately.
Fields§
§session_index: SessionIndex
An index of the session that we are supposed to send heartbeat for.
sent_at: BlockNumber
A block number at which the heartbeat for that session has been actually sent.
It may be 0 in case the sending failed. In such case we should just retry as soon as possible (i.e. in a worker running for the next block).
Implementations§
source§impl<BlockNumber: PartialEq + AtLeast32BitUnsigned + Copy> HeartbeatStatus<BlockNumber>
impl<BlockNumber: PartialEq + AtLeast32BitUnsigned + Copy> HeartbeatStatus<BlockNumber>
sourcepub(crate) fn is_recent(
&self,
session_index: SessionIndex,
now: BlockNumber
) -> bool
pub(crate) fn is_recent( &self, session_index: SessionIndex, now: BlockNumber ) -> bool
Returns true if heartbeat has been recently sent.
Parameters:
session_index
- index of current session.
now
- block at which the offchain worker is running.
This function will return true
iff:
- the session index is the same (we don’t care if it went up or down)
- the heartbeat has been sent recently (within the threshold)
The reasoning for 1. is that it’s better to send an extra heartbeat than to stall or not send one in case of a bug.
Trait Implementations§
source§impl<BlockNumber: Clone> Clone for HeartbeatStatus<BlockNumber>
impl<BlockNumber: Clone> Clone for HeartbeatStatus<BlockNumber>
source§fn clone(&self) -> HeartbeatStatus<BlockNumber>
fn clone(&self) -> HeartbeatStatus<BlockNumber>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<BlockNumber> Debug for HeartbeatStatus<BlockNumber>where
BlockNumber: Debug,
impl<BlockNumber> Debug for HeartbeatStatus<BlockNumber>where
BlockNumber: Debug,
source§impl<BlockNumber> Decode for HeartbeatStatus<BlockNumber>where
BlockNumber: Decode,
impl<BlockNumber> Decode for HeartbeatStatus<BlockNumber>where
BlockNumber: Decode,
source§fn decode<__CodecInputEdqy: Input>(
__codec_input_edqy: &mut __CodecInputEdqy
) -> Result<Self, Error>
fn decode<__CodecInputEdqy: Input>( __codec_input_edqy: &mut __CodecInputEdqy ) -> Result<Self, Error>
§fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>
) -> Result<DecodeFinished, Error>where
I: Input,
fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>
) -> Result<DecodeFinished, Error>where
I: Input,
§fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
§fn encoded_fixed_size() -> Option<usize>
fn encoded_fixed_size() -> Option<usize>
source§impl<BlockNumber> Encode for HeartbeatStatus<BlockNumber>where
BlockNumber: Encode,
impl<BlockNumber> Encode for HeartbeatStatus<BlockNumber>where
BlockNumber: Encode,
source§fn size_hint(&self) -> usize
fn size_hint(&self) -> usize
source§fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>( &self, __codec_dest_edqy: &mut __CodecOutputEdqy )
§fn using_encoded<R, F>(&self, f: F) -> R
fn using_encoded<R, F>(&self, f: F) -> R
§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
source§impl<BlockNumber: PartialEq> PartialEq for HeartbeatStatus<BlockNumber>
impl<BlockNumber: PartialEq> PartialEq for HeartbeatStatus<BlockNumber>
source§fn eq(&self, other: &HeartbeatStatus<BlockNumber>) -> bool
fn eq(&self, other: &HeartbeatStatus<BlockNumber>) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl<BlockNumber> TypeInfo for HeartbeatStatus<BlockNumber>where
BlockNumber: TypeInfo + 'static,
impl<BlockNumber> TypeInfo for HeartbeatStatus<BlockNumber>where
BlockNumber: TypeInfo + 'static,
impl<BlockNumber> EncodeLike for HeartbeatStatus<BlockNumber>where
BlockNumber: Encode,
impl<BlockNumber: Eq> Eq for HeartbeatStatus<BlockNumber>
impl<BlockNumber> StructuralPartialEq for HeartbeatStatus<BlockNumber>
Auto Trait Implementations§
impl<BlockNumber> Freeze for HeartbeatStatus<BlockNumber>where
BlockNumber: Freeze,
impl<BlockNumber> RefUnwindSafe for HeartbeatStatus<BlockNumber>where
BlockNumber: RefUnwindSafe,
impl<BlockNumber> Send for HeartbeatStatus<BlockNumber>where
BlockNumber: Send,
impl<BlockNumber> Sync for HeartbeatStatus<BlockNumber>where
BlockNumber: Sync,
impl<BlockNumber> Unpin for HeartbeatStatus<BlockNumber>where
BlockNumber: Unpin,
impl<BlockNumber> UnwindSafe for HeartbeatStatus<BlockNumber>where
BlockNumber: UnwindSafe,
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> CheckedConversion for T
impl<T> CheckedConversion for T
§fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
§fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
§impl<T> DecodeAll for Twhere
T: Decode,
impl<T> DecodeAll for Twhere
T: Decode,
§fn decode_all(input: &mut &[u8]) -> Result<T, Error>
fn decode_all(input: &mut &[u8]) -> Result<T, Error>
Self
and consume all of the given input data. Read more§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Hashable for Twhere
T: Codec,
impl<T> Hashable for Twhere
T: Codec,
§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> 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> IsType<T> for T
impl<T> IsType<T> for T
§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
§impl<T> KeyedVec for Twhere
T: Codec,
impl<T> KeyedVec for Twhere
T: Codec,
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read more§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.§impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
type Error = <U as TryFromKey<T>>::Error
fn try_into_key(self) -> Result<U, <U as TryFromKey<T>>::Error>
§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.