Skip to content

Commit

Permalink
Change: move log id related traits to mod openraft::log_id
Browse files Browse the repository at this point in the history
Move trait `RaftLogId`, `LogIdOptionExt` and `LogIndexOptionExt` from `openraft::raft_types` to mod `openraft::log_id`
  • Loading branch information
drmingdrmer committed Mar 14, 2023
1 parent cb9fbed commit 3b4f4e1
Show file tree
Hide file tree
Showing 20 changed files with 112 additions and 97 deletions.
4 changes: 2 additions & 2 deletions openraft/src/core/raft_core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ use crate::error::InitializeError;
use crate::error::QuorumNotEnough;
use crate::error::RPCError;
use crate::error::Timeout;
use crate::log_id::LogIdOptionExt;
use crate::log_id::RaftLogId;
use crate::metrics::RaftMetrics;
use crate::metrics::ReplicationMetrics;
use crate::metrics::UpdateMatchedLogId;
Expand All @@ -63,8 +65,6 @@ use crate::raft::VoteRequest;
use crate::raft::VoteResponse;
use crate::raft::VoteTx;
use crate::raft_state::LogStateReader;
use crate::raft_types::LogIdOptionExt;
use crate::raft_types::RaftLogId;
use crate::replication::Replicate;
use crate::replication::ReplicationCore;
use crate::replication::ReplicationHandle;
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/core/replication_state.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::raft_types::LogIndexOptionExt;
use crate::log_id::LogIndexOptionExt;

/// Calculate the distance between the matched log index on a replication target and local last log
/// index
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/defensive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use std::ops::RangeBounds;

use async_trait::async_trait;

use crate::raft_types::LogIdOptionExt;
use crate::log_id::LogIdOptionExt;
use crate::DefensiveError;
use crate::Entry;
use crate::ErrorSubject;
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/engine/log_id_list.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::raft_types::RaftLogId;
use crate::log_id::RaftLogId;
use crate::storage::StorageHelper;
use crate::LogId;
use crate::LogIdOptionExt;
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/entry/entry_ref.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::fmt::Debug;

use crate::entry::traits::RaftPayload;
use crate::entry::RaftEntry;
use crate::raft_types::RaftLogId;
use crate::log_id::RaftLogId;
use crate::EntryPayload;
use crate::LogId;
use crate::Membership;
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/entry/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::fmt::Debug;

use crate::raft_types::RaftLogId;
use crate::log_id::RaftLogId;
use crate::LogId;
use crate::Membership;
use crate::MessageSummary;
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/entry/traits.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::raft_types::RaftLogId;
use crate::log_id::RaftLogId;
use crate::Membership;
use crate::Node;
use crate::NodeId;
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/leader/leader.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
use std::collections::BTreeSet;

use crate::log_id::LogIndexOptionExt;
use crate::progress::entry::ProgressEntry;
use crate::progress::Progress;
use crate::progress::VecProgress;
use crate::quorum::QuorumSet;
use crate::raft_types::LogIndexOptionExt;
use crate::LogId;
use crate::NodeId;
use crate::Vote;
Expand Down
3 changes: 2 additions & 1 deletion openraft/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ pub use crate::defensive::DefensiveCheck;
pub use crate::defensive::DefensiveCheckBase;
pub use crate::entry::Entry;
pub use crate::entry::EntryPayload;
pub use crate::log_id::LogIdOptionExt;
pub use crate::log_id::LogIndexOptionExt;
pub use crate::membership::EffectiveMembership;
pub use crate::membership::Membership;
pub use crate::membership::StoredMembership;
Expand All @@ -104,7 +106,6 @@ pub use crate::raft::Raft;
pub use crate::raft::RaftTypeConfig;
pub use crate::raft_state::MembershipState;
pub use crate::raft_state::RaftState;
pub use crate::raft_types::LogIdOptionExt;
pub(crate) use crate::raft_types::MetricsChangeFlags;
pub use crate::raft_types::SnapshotId;
pub use crate::raft_types::SnapshotSegmentId;
Expand Down
33 changes: 33 additions & 0 deletions openraft/src/log_id/log_id_option_ext.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
use crate::LogId;
use crate::NodeId;

pub trait LogIdOptionExt {
fn index(&self) -> Option<u64>;
fn next_index(&self) -> u64;
}

impl<NID: NodeId> LogIdOptionExt for Option<LogId<NID>> {
fn index(&self) -> Option<u64> {
self.map(|x| x.index)
}

fn next_index(&self) -> u64 {
match self {
None => 0,
Some(log_id) => log_id.index + 1,
}
}
}

impl<NID: NodeId> LogIdOptionExt for Option<&LogId<NID>> {
fn index(&self) -> Option<u64> {
self.map(|x| x.index)
}

fn next_index(&self) -> u64 {
match self {
None => 0,
Some(log_id) => log_id.index + 1,
}
}
}
33 changes: 33 additions & 0 deletions openraft/src/log_id/log_index_option_ext.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
pub trait LogIndexOptionExt {
fn next_index(&self) -> u64;
fn prev_index(&self) -> Self;
fn add(&self, v: u64) -> Self;
}

impl LogIndexOptionExt for Option<u64> {
fn next_index(&self) -> u64 {
match self {
None => 0,
Some(v) => v + 1,
}
}

fn prev_index(&self) -> Self {
match self {
None => {
panic!("None has no previous value");
}
Some(v) => {
if *v == 0 {
None
} else {
Some(*v - 1)
}
}
}
}

fn add(&self, v: u64) -> Self {
Some(self.next_index() + v).prev_index()
}
}
11 changes: 8 additions & 3 deletions openraft/src/log_id/mod.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
mod log_id_option_ext;
mod log_index_option_ext;
mod raft_log_id;

use std::fmt::Display;
use std::fmt::Formatter;

use crate::raft_types::RaftLogId;
pub use log_id_option_ext::LogIdOptionExt;
pub use log_index_option_ext::LogIndexOptionExt;
pub use raft_log_id::RaftLogId;

use crate::CommittedLeaderId;
use crate::MessageSummary;
use crate::NodeId;

mod traits;

/// The identity of a raft log.
/// A term, node_id and an index identifies an log globally.
#[derive(Debug, Default, Copy, Clone, PartialOrd, Ord, PartialEq, Eq)]
Expand Down
22 changes: 22 additions & 0 deletions openraft/src/log_id/raft_log_id.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
use crate::CommittedLeaderId;
use crate::LogId;
use crate::NodeId;

/// Defines API to operate an object that contains a log-id, such as a log entry or a log id.
pub trait RaftLogId<NID: NodeId> {
/// Returns a reference to the leader id that proposed this log id.
///
/// When a `LeaderId` is committed, some of its data can be discarded.
/// For example, a leader id in standard raft is `(term, node_id)`, but a log id does not have
/// to store the `node_id`, because in standard raft there is at most one leader that can be
/// established.
fn leader_id(&self) -> &CommittedLeaderId<NID> {
self.get_log_id().committed_leader_id()
}

/// Return a reference to the log-id it stores.
fn get_log_id(&self) -> &LogId<NID>;

/// Update the log id it contains.
fn set_log_id(&mut self, log_id: &LogId<NID>);
}
Empty file removed openraft/src/log_id/traits.rs
Empty file.
2 changes: 1 addition & 1 deletion openraft/src/membership/effective_membership.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ use std::fmt::Debug;
use std::sync::Arc;

use crate::entry::RaftEntry;
use crate::log_id::RaftLogId;
use crate::node::Node;
use crate::quorum::Joint;
use crate::quorum::QuorumSet;
use crate::raft_types::RaftLogId;
use crate::LogId;
use crate::Membership;
use crate::MessageSummary;
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/metrics/wait_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ use tokio::sync::watch;
use tokio::time::sleep;

use crate::core::ServerState;
use crate::log_id::LogIdOptionExt;
use crate::metrics::Wait;
use crate::metrics::WaitError;
use crate::raft_types::LogIdOptionExt;
use crate::vote::CommittedLeaderId;
use crate::LogId;
use crate::Membership;
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/raft_state/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ use crate::entry::RaftEntry;
use crate::equal;
use crate::error::ForwardToLeader;
use crate::less_equal;
use crate::log_id::RaftLogId;
use crate::node::Node;
use crate::raft_types::RaftLogId;
use crate::utime::UTime;
use crate::validate::Validate;
use crate::LogId;
Expand Down
79 changes: 0 additions & 79 deletions openraft/src/raft_types.rs
Original file line number Diff line number Diff line change
@@ -1,85 +1,6 @@
use std::fmt::Display;
use std::fmt::Formatter;

use crate::vote::CommittedLeaderId;
use crate::LogId;
use crate::NodeId;

pub trait RaftLogId<NID: NodeId> {
fn leader_id(&self) -> &CommittedLeaderId<NID> {
self.get_log_id().committed_leader_id()
}

fn get_log_id(&self) -> &LogId<NID>;

fn set_log_id(&mut self, log_id: &LogId<NID>);
}

pub trait LogIdOptionExt {
fn index(&self) -> Option<u64>;
fn next_index(&self) -> u64;
}

impl<NID: NodeId> LogIdOptionExt for Option<LogId<NID>> {
fn index(&self) -> Option<u64> {
self.map(|x| x.index)
}

fn next_index(&self) -> u64 {
match self {
None => 0,
Some(log_id) => log_id.index + 1,
}
}
}

impl<NID: NodeId> LogIdOptionExt for Option<&LogId<NID>> {
fn index(&self) -> Option<u64> {
self.map(|x| x.index)
}

fn next_index(&self) -> u64 {
match self {
None => 0,
Some(log_id) => log_id.index + 1,
}
}
}

pub trait LogIndexOptionExt {
fn next_index(&self) -> u64;
fn prev_index(&self) -> Self;
fn add(&self, v: u64) -> Self;
}

impl LogIndexOptionExt for Option<u64> {
fn next_index(&self) -> u64 {
match self {
None => 0,
Some(v) => v + 1,
}
}

fn prev_index(&self) -> Self {
match self {
None => {
panic!("None has no previous value");
}
Some(v) => {
if *v == 0 {
None
} else {
Some(*v - 1)
}
}
}
}

fn add(&self, v: u64) -> Self {
Some(self.next_index() + v).prev_index()
}
}

// Everytime a snapshot is created, it is assigned with a globally unique id.
pub type SnapshotId = String;

Expand Down
2 changes: 1 addition & 1 deletion openraft/src/replication/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ use crate::error::HigherVote;
use crate::error::RPCError;
use crate::error::ReplicationError;
use crate::error::Timeout;
use crate::log_id::LogIdOptionExt;
use crate::log_id_range::LogIdRange;
use crate::raft::AppendEntriesRequest;
use crate::raft::AppendEntriesResponse;
use crate::raft::InstallSnapshotRequest;
use crate::raft::RaftMsg;
use crate::raft_types::LogIdOptionExt;
use crate::storage::RaftLogReader;
use crate::storage::Snapshot;
use crate::ErrorSubject;
Expand Down
2 changes: 1 addition & 1 deletion openraft/src/runtime/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::engine::Command;
use crate::raft_types::RaftLogId;
use crate::log_id::RaftLogId;
use crate::Entry;
use crate::RaftTypeConfig;
use crate::StorageError;
Expand Down

0 comments on commit 3b4f4e1

Please sign in to comment.