Skip to main content

LogEntry

Struct LogEntry 

Source
pub struct LogEntry {
    pub term: Term,
    pub index: Index,
    pub kind: EntryKind,
    pub command: Vec<u8>,
}
Expand description

A single entry in the replicated log.

The command is opaque bytes: for a Normal entry the protocol replicates and orders it but never interprets it, and the application’s state machine decodes it on apply; for a Config entry the bytes encode the new voting membership. Each entry records the term in which the leader created it and its index in the log, which together identify it uniquely.

§Examples

use raft_io::LogEntry;

let entry = LogEntry::new(2, 7, b"put k v".to_vec());
assert_eq!(entry.term, 2);
assert_eq!(entry.index, 7);
assert_eq!(entry.command, b"put k v");

Fields§

§term: Term

Term in which the leader created this entry.

§index: Index

1-based position of this entry in the log.

§kind: EntryKind

Whether this is a normal command or a configuration change.

§command: Vec<u8>

Opaque bytes: an application command, or an encoded member set for a Config entry.

Implementations§

Source§

impl LogEntry

Source

pub fn new(term: Term, index: Index, command: Vec<u8>) -> Self

Creates a Normal log entry at index in term carrying command.

§Examples
use raft_io::LogEntry;

let e = LogEntry::new(1, 1, vec![0xAB]);
assert_eq!(e.command, vec![0xAB]);
Source

pub fn config(term: Term, index: Index, members: &[NodeId]) -> Self

Creates a Config log entry carrying the voting membership members.

§Examples
use raft_io::LogEntry;

let e = LogEntry::config(3, 9, &[1, 2, 3]);
assert_eq!(e.members(), Some(vec![1, 2, 3]));
Source

pub fn members(&self) -> Option<Vec<NodeId>>

Returns the voting membership a Config entry carries, or None for a Normal entry.

§Examples
use raft_io::LogEntry;

assert_eq!(LogEntry::new(1, 1, vec![]).members(), None);
assert_eq!(LogEntry::config(1, 2, &[7, 8]).members(), Some(vec![7, 8]));

Trait Implementations§

Source§

impl Clone for LogEntry

Source§

fn clone(&self) -> LogEntry

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LogEntry

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deserialize for LogEntry

Source§

fn deserialize<__D: Decode + ?Sized>(__decoder: &mut __D) -> Result<Self>

Read a value of Self from the decoder, advancing its cursor. Read more
Source§

fn deserialize_many<D>( decoder: &mut D, count: usize, ) -> Result<Vec<Self>, SerialError>
where D: Decode + ?Sized,

Read count consecutive Self values into a freshly-allocated Vec. Read more
Source§

impl Eq for LogEntry

Source§

impl PartialEq for LogEntry

Source§

fn eq(&self, other: &LogEntry) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for LogEntry

Source§

fn serialize<__E: Encode + ?Sized>(&self, __encoder: &mut __E) -> Result<()>

Append the encoded bytes of self to encoder. Read more
Source§

fn serialize_slice<E>( slice: &[Self], encoder: &mut E, ) -> Result<(), SerialError>
where E: Encode + ?Sized, Self: Sized,

Append the encoded bytes of every element of slice to encoder. Read more
Source§

impl StructuralPartialEq for LogEntry

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<E> WithErrorCode<E> for E

Source§

fn with_code(self, code: impl Into<String>) -> CodedError<E>

Attach an error code to an error