Struct raft::raw_node::RawNode

source ·
pub struct RawNode<T: Storage> {
    pub raft: Raft<T>,
    /* private fields */
}
Expand description

RawNode is a thread-unsafe Node. The methods of this struct correspond to the methods of Node and are described more fully there.

Fields§

§raft: Raft<T>

The internal raft state.

Implementations§

source§

impl<T: Storage> RawNode<T>

source

pub fn new(config: &Config, store: T, logger: &Logger) -> Result<Self>

Create a new RawNode given some Config.

source

pub fn with_default_logger(c: &Config, store: T) -> Result<Self>

Create a new RawNode given some Config and the default logger.

The default logger is an slog to log adapter.

source

pub fn set_priority(&mut self, priority: i64)

Sets priority of node.

source

pub fn tick(&mut self) -> bool

Tick advances the internal logical clock by a single tick.

Returns true to indicate that there will probably be some readiness which needs to be handled.

source

pub fn campaign(&mut self) -> Result<()>

Campaign causes this RawNode to transition to candidate state.

source

pub fn propose(&mut self, context: Vec<u8>, data: Vec<u8>) -> Result<()>

Propose proposes data be appended to the raft log.

source

pub fn ping(&mut self)

Broadcast heartbeats to all the followers.

If it’s not leader, nothing will happen.

source

pub fn propose_conf_change( &mut self, context: Vec<u8>, cc: impl ConfChangeI ) -> Result<()>

ProposeConfChange proposes a config change.

If the node enters joint state with auto_leave set to true, it’s caller’s responsibility to propose an empty conf change again to force leaving joint state.

source

pub fn apply_conf_change(&mut self, cc: &impl ConfChangeI) -> Result<ConfState>

Applies a config change to the local node. The app must call this when it applies a configuration change, except when it decides to reject the configuration change, in which case no call must take place.

source

pub fn step(&mut self, m: Message) -> Result<()>

Step advances the state machine using the given message.

source

pub fn on_entries_fetched(&mut self, context: GetEntriesContext)

A callback when entries are fetched asynchronously. The context should provide the context passed from Storage.entires(). See more in the comment of Storage.entires().

Panics

Panics if passed with the context of context.can_async() == false

source

pub fn ready(&mut self) -> Ready

Returns the outstanding work that the application needs to handle.

This includes appending and applying entries or a snapshot, updating the HardState, and sending messages. The returned Ready MUST be handled and subsequently passed back via advance or its families. Before that, DO NOT call any function like step, propose, campaign to change internal state.

Self::has_ready should be called first to check if it’s necessary to handle the ready.

source

pub fn has_ready(&self) -> bool

HasReady called when RawNode user need to check if any Ready pending.

source

pub fn on_persist_ready(&mut self, number: u64)

Notifies that the ready of this number has been persisted.

Since Ready must be persisted in order, calling this function implicitly means all readies with numbers smaller than this one have been persisted.

Self::has_ready and Self::ready should be called later to handle further updates that become valid after ready being persisted.

source

pub fn advance(&mut self, rd: Ready) -> LightReady

Advances the ready after fully processing it.

Fully processing a ready requires to persist snapshot, entries and hard states, apply all committed entries, send all messages.

Returns the LightReady that contains commit index, committed entries and messages. LightReady contains updates that only valid after persisting last ready. It should also be fully processed. Then Self::advance_apply or Self::advance_apply_to should be used later to update applying progress.

source

pub fn advance_append(&mut self, rd: Ready) -> LightReady

Advances the ready without applying committed entries. Self::advance_apply or Self::advance_apply_to should be used later to update applying progress.

Returns the LightReady that contains commit index, committed entries and messages.

Since Ready must be persisted in order, calling this function implicitly means all ready collected before have been persisted.

source

pub fn advance_append_async(&mut self, rd: Ready)

Same as Self::advance_append except that it allows to only store the updates in cache. Self::on_persist_ready should be used later to update the persisting progress.

Raft works on an assumption persisted updates should not be lost, which usually requires expensive operations like fsync. advance_append_async allows you to control the rate of such operations and get a reasonable batch size. However, it’s still required that the updates can be read by raft from the Storage trait before calling advance_append_async.

source

pub fn advance_apply(&mut self)

Advance apply to the index of the last committed entries given before.

source

pub fn advance_apply_to(&mut self, applied: u64)

Advance apply to the passed index.

source

pub fn snap(&self) -> Option<&Snapshot>

Grabs the snapshot from the raft if available.

source

pub fn status(&self) -> Status<'_>

Status returns the current status of the given group.

source

pub fn report_unreachable(&mut self, id: u64)

ReportUnreachable reports the given node is not reachable for the last send.

source

pub fn report_snapshot(&mut self, id: u64, status: SnapshotStatus)

ReportSnapshot reports the status of the sent snapshot.

source

pub fn request_snapshot(&mut self) -> Result<()>

Request a snapshot from a leader. The snapshot’s index must be greater or equal to the request_index (last_index) or the leader’s term must be greater than the request term (last_index’s term).

source

pub fn transfer_leader(&mut self, transferee: u64)

TransferLeader tries to transfer leadership to the given transferee.

source

pub fn read_index(&mut self, rctx: Vec<u8>)

ReadIndex requests a read state. The read state will be set in ready. Read State has a read index. Once the application advances further than the read index, any linearizable read requests issued before the read request can be processed safely. The read state will have the same rctx attached.

source

pub fn store(&self) -> &T

Returns the store as an immutable reference.

source

pub fn mut_store(&mut self) -> &mut T

Returns the store as a mutable reference.

source

pub fn skip_bcast_commit(&mut self, skip: bool)

Set whether skip broadcast empty commit messages at runtime.

source

pub fn set_batch_append(&mut self, batch_append: bool)

Set whether to batch append msg at runtime.

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for RawNode<T>where T: RefUnwindSafe,

§

impl<T> Send for RawNode<T>where T: Send,

§

impl<T> Sync for RawNode<T>where T: Sync,

§

impl<T> Unpin for RawNode<T>where T: Unpin,

§

impl<T> UnwindSafe for RawNode<T>where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> SendSyncUnwindSafe for Twhere T: Send + Sync + UnwindSafe + ?Sized,