raftlog/error.rs
1use prometrics;
2use std;
3use trackable::error::TrackableError;
4use trackable::error::{ErrorKind as TrackableErrorKind, ErrorKindExt};
5
6/// クレート固有の`Error`型.
7#[derive(Debug, Clone, TrackableError)]
8pub struct Error(TrackableError<ErrorKind>);
9impl From<std::io::Error> for Error {
10 fn from(f: std::io::Error) -> Self {
11 ErrorKind::Other.cause(f).into()
12 }
13}
14impl From<prometrics::Error> for Error {
15 fn from(f: prometrics::Error) -> Self {
16 ErrorKind::Other.cause(f).into()
17 }
18}
19
20/// 発生し得るエラーの種類.
21#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22pub enum ErrorKind {
23 /// リーダのみが処理可能な操作が、リーダではないノードに対して行われた.
24 ///
25 /// このエラーを受け取った場合、利用者はリーダノードに対して、
26 /// 同じ要求をリトライすべきである.
27 NotLeader,
28
29 /// リソースに空きが無くて、要求を受け付けることができない.
30 ///
31 /// このエラーを受け取った場合、利用者はある程度時間を空ける、ないし、
32 /// 現在実行中の処理の完了を確認してから、同様の要求をリトライすべきである.
33 ///
34 /// 典型的には、あるスナップショットのインストール中に、
35 /// 別のスナップショットのインストールが要求された場合に、
36 /// このエラーが返される.
37 Busy,
38
39 /// 入力が不正.
40 ///
41 /// このエラーを受け取った場合、利用者は可能であれば、
42 /// 入力値を適切なものに修正して、同様の操作をリトライすることが望ましい.
43 InvalidInput,
44
45 /// 不整合な状態に陥った.
46 ///
47 /// プログラムのバグやI/O周りの重大な問題(e.g., データ改善)により、
48 /// 本来発生するはずのない状態が生じてしまった.
49 ///
50 /// このエラーを受け取った場合、利用者はそのノードの使用を停止して、
51 /// どのような問題が発生しているかを詳細に調査すべきである.
52 ///
53 /// もし使用を継続した場合には、最悪のケースでは、コミット済みのログ領域が
54 /// 別のエントリによって上書きされてしまうこともあり得る.
55 InconsistentState,
56
57 /// その他エラー.
58 ///
59 /// 主に`Io`トレイトの実装のために設けられたエラー区分.
60 ///
61 /// このエラーを受け取った場合、利用者はそのノードの使用を停止して、
62 /// どのような問題が発生しているかを詳細に調査すべきである.
63 Other,
64}
65impl TrackableErrorKind for ErrorKind {}