[][src]Trait raftlog::Io

pub trait Io {
    type SaveBallot: Future<Item = (), Error = Error>;
    type LoadBallot: Future<Item = Option<Ballot>, Error = Error>;
    type SaveLog: Future<Item = (), Error = Error>;
    type LoadLog: Future<Item = Log, Error = Error>;
    type Timeout: Future<Item = (), Error = Error>;
    fn try_recv_message(&mut self) -> Result<Option<Message>>;
fn send_message(&mut self, message: Message);
fn save_ballot(&mut self, ballot: Ballot) -> Self::SaveBallot;
fn load_ballot(&mut self) -> Self::LoadBallot;
fn save_log_prefix(&mut self, prefix: LogPrefix) -> Self::SaveLog;
fn save_log_suffix(&mut self, suffix: &LogSuffix) -> Self::SaveLog;
fn load_log(
        &mut self,
        start: LogIndex,
        end: Option<LogIndex>
    ) -> Self::LoadLog;
fn create_timeout(&mut self, role: Role) -> Self::Timeout; fn is_busy(&mut self) -> bool { ... } }

Raftの実行に必要なI/O機能を提供するためのトレイト.

機能としてはおおまかに以下の三つに区分される:

  • ストレージ
    • ローカルノードの状態やログを保存するための永続ストレージ
    • Raftが完全に正しく動作するためには、このストレージは完全に信頼できるものである必要がある
      • 一度書き込まれたデータは(明示的に削除されない限り)失われたり、壊れたりすることは無い
      • 実際には、それを達成するのは困難なので、信頼性とストレージコストのトレードオフとなる
  • チャンネル
    • ノード間通信(RPC)用のメッセージ送受信チャンネル
    • このチャンネルの信頼性はある程度低くても良い
      • メッセージ群の順番の入れ替わりや、欠損、重複配送、は許容される
      • ただし、メッセージの改竄や捏造、はNG
  • タイマー
    • タイムアウト管理用のタイマー

Associated Types

type SaveBallot: Future<Item = (), Error = Error>

ローカルノードの投票状況を保存するためのFuture.

type LoadBallot: Future<Item = Option<Ballot>, Error = Error>

ノーカルノードの投票情報を取得ためのFuture.

type SaveLog: Future<Item = (), Error = Error>

ローカルログを保存するためのFuture.

type LoadLog: Future<Item = Log, Error = Error>

ローカルログを取得するためのFuture.

type Timeout: Future<Item = (), Error = Error>

タイムアウトを表現するためのFuture.

Loading content...

Required methods

fn try_recv_message(&mut self) -> Result<Option<Message>>

ローカルノードに対して送信されたメッセージの受信を試みる.

注意

このメソッドがErrを返した場合には、ローカルのRaftノードが 停止してしまうので、時間経過によって自動的には回復しない 致命的なものを除いては、Errは返さないことが望ましい.

fn send_message(&mut self, message: Message)

メッセージを送信する.

もしメッセージ送信に何らかの理由で失敗した場合でも、単に無視される. 仮にチャンネルの致命的な問題が発生している場合には、次のtry_recv_messageメソッドの 呼び出しでErrを返すこと.

fn save_ballot(&mut self, ballot: Ballot) -> Self::SaveBallot

ローカルノードの投票状況を保存する.

fn load_ballot(&mut self) -> Self::LoadBallot

ローカルノードの前回の投票状況を取得する.

fn save_log_prefix(&mut self, prefix: LogPrefix) -> Self::SaveLog

ローカルログの前半部分(i.e., スナップショット)を保存する.

保存に成功した場合は、それ以前のログ領域は破棄してしまって構わない.

fn save_log_suffix(&mut self, suffix: &LogSuffix) -> Self::SaveLog

ローカルログの末尾部分を保存(追記)する.

suffixの開始位置が、現在のログの末尾よりも前方の場合は、 新しい開始位置よりも後ろの古いエントリは削除してしまって構わない. (リーダの入れ替えにより、ログの未コミット部分で競合が発生したことを示している)

fn load_log(&mut self, start: LogIndex, end: Option<LogIndex>) -> Self::LoadLog

ローカルログの指定範囲のエントリを取得する.

範囲はstartから始まり、endを含まない最後のエントリまでを取得する. endの値がNoneの場合には、ログの末端までを取得する.

なお、endが指定されているにも関わらず、指定よりも少ないエントリしか 取得できなかった場合には「取得できたエントリのみを返す」ないし「エラーを返す」の どちらの挙動も許容される.

ただし、startとは異なる位置から、エントリの取得を開始することは許可されない.

fn create_timeout(&mut self, role: Role) -> Self::Timeout

選挙における役割に応じた時間のタイムアウトオブジェクトを生成する.

Loading content...

Provided methods

fn is_busy(&mut self) -> bool

I/O処理を行う余裕があるかどうかを返す.

これがtrueを返している間は、フォロワーの同期処理は実施されない.

Loading content...

Implementors

Loading content...