発生しうる異常の分類ごとに振る舞い方針(案) を以下に示す。
凡例:
* 通信の自動的なリトライ: Jubatus が通信を自動的にリトライするか否か
* クライアントAPへのエラー通知: クライアントAPへのエラー通知有無
* ユーザーへのエラー通知: 起動時エラーの場合、ユーザー(操作者)へのエラー通知有無
* プロセス継続性: Jubatus Server、Jubatus Proxy の処理継続性
* ログ出力: ログの出力有無、出力レベル、出力時に含むべき情報
- 例) API 引数誤り
- 振る舞い方針(案)
- 通信の自動的なリトライ: クライアント および クライアントの実装に任せる
- クライアントAPへのエラー通知: エラーを返却する
- プロセス継続性: プロセスを継続する
- ログ出力: なし
- 例) コマンドオプション誤り、コマンド引数誤り(無効な値)
- 振る舞い方針(案)
- 通信の自動的なリトライ: 実施しない (通信は「指定された ZK への接続」が対象)
- クライアントAPへのエラー通知: 起動時エラーのため、クライアントからの通信は発生しない
- ユーザーへのエラー通知: 原則、標準エラーへエラー内容と usage を出力する
- スタンドアロンでビルド時に分散モードのオプションが指定された場合: 指定されたオプションを無視し、処理を継続する (異常としない)
- 指定されたZKへの接続失敗時: ログを通じてエラーを通知する
- プロセス継続性: 原則、プロセスを安全に停止する
- スタンドアロンでビルド時に分散モードのオプションが指定された場合: 指定されたオプションを無視し、処理を継続する (異常としない)
- ログ出力: 原則、なし
- スタンドアロンでビルド時に分散モードのオプションが指定された場合:
- レベル: WARNING
- 含むべき情報: 無視したオプション名
- 指定されたZKへの接続失敗時:
- レベル: FATAL
- 含むべき情報: 発生した ZK エラー内容
- 例) 設定ファイル内容誤り
- 振る舞い方針(案)
- 通信の自動的なリトライ: 通信は発生しない
- クライアントAPへのエラー通知: 起動時エラーのため、クライアントからの通信は発生しない
- ユーザーへのエラー通知: ログを通じてエラーを通知する
- プロセス継続性: プロセスを安全に停止する
- ログ出力:
スタンドアロン構成においては、C/S間通信と読み替える
- 例) 接続失敗 (クライアントリクエスト)
- 振る舞い方針(案)
- 通信の自動的なリトライ: クライアント および クライアントの実装 に任せる
- クライアントAPへのエラー通知: エラーを返却する
- プロセス継続性: プロセスを継続する
- ログ出力: なし
- 例) 接続失敗 (クライアントリクエスト)
- 振る舞い方針(案)
- 通信の自動的なリトライ: 実施する
- クライアントAPへのエラー通知: リトライオーバー時にエラーを返却する
- プロセス継続性: プロセスを継続する
- ログ出力:
- レベル: WARNING
- 含むべき情報: 接続先ホスト、ポート番号
- 例) 接続失敗 (MIX)
- 振る舞い方針(案)
- 通信の自動的なリトライ: 実施する (通信個別ではなく、MIXのループをリトライと考える)
- クライアントAPへのエラー通知: なし (サーバー間通信のため)
- プロセス継続性: プロセスを継続する
- ログ出力:
- レベル: WARNING
- 含むべき情報: 接続先ホスト、ポート番号
- 例) 接続失敗
- 振る舞い方針(案)
- 通信の自動的なリトライ: 実施しない
- クライアントAPへのエラー通知: なし (仕掛中のリクエストへ対しては、通常時と同様に処理を行う)
- プロセス継続性: プロセスを安全に停止する
- ログ出力:
- レベル: FATAL
- 含むべき情報: 発生した ZK エラー内容
- 例) 接続失敗
- 振る舞い方針(案)
- 通信の自動的なリトライ: 実施しない
- クライアントAPへのエラー通知: なし (仕掛中のリクエストへ対しては、通常時と同様に処理を行う)
- プロセス継続性: プロセスを安全に停止する
- ログ出力:
- レベル: FATAL
- 含むべき情報: 発生した ZK エラー内容
スタンドアロン構成においては、C/S間通信と読み替える
- 例) タイムアウト (クライアントリクエスト)
- 振る舞い方針(案)
- 通信の自動的なリトライ: クライアント および クライアントの実装 に任せる
- クライアントAPへのエラー通知: エラーを返却する
- プロセス継続性: プロセスを継続する
- ログ出力: なし
TBD
- C/P間のタイムアウトに至る前に P/S間 のタイムアウトが発生させることに対して、議論が必要。
- クライアントには P/S間 のタイムアウトは隠蔽(その前にクライアントがタイムアウトする)されるべきでは。
- 例) タイムアウト (MIX)
- 振る舞い方針(案)
- 通信の自動的なリトライ: 実施する (通信個別ではなく、MIXのループをリトライと考える)
- クライアントAPへのエラー通知: なし (サーバー間通信のため)
- プロセス継続性: プロセスを継続する
- ログ出力:
- レベル: WARNING
- 含むべき情報: 接続先ホスト、ポート番号
- 例) 接続失敗
- 振る舞い方針(案)
- 通信の自動的なリトライ: 実施しない
- クライアントAPへのエラー通知: なし (仕掛中のリクエストへ対しては、通常時と同様に処理を行う)
- プロセス継続性: プロセスを安全に停止する
- ログ出力:
- レベル: FATAL
- 含むべき情報: 発生した ZK エラー内容
- 例) 接続失敗
- 振る舞い方針(案)
- 通信の自動的なリトライ: 実施しない
- クライアントAPへのエラー通知: なし (仕掛中のリクエストへ対しては、通常時と同様に処理を行う)
- プロセス継続性: プロセスを安全に停止する
- ログ出力:
- レベル: FATAL
- 含むべき情報: 発生した ZK エラー内容
- 例) メモリ確保エラー(malloc失敗, bad_alloc)
- 振る舞い方針(案)
- 通信の自動的なリトライ: エラー返却が可能であるか不定
- クライアントAPへのエラー通知: 不定
- ユーザーへのエラー通知: 起動時の場合は、ログを通じてエラーを通知する
- プロセス継続性: プロセスを即時に停止する
- ログ出力(可能な限り):
- レベル: FATAL
- 含むべき情報: 発生箇所のスタックトレース
- 例) save 時にディスク容量不足
- 振る舞い方針(案)
- 通信の自動的なリトライ: クライアント および クライアントの実装 に任せる (save はリトライしないのがベスト・プラクティス)
- クライアントAPへのエラー通知: エラーを返却する
- ユーザーへのエラー通知: 起動時の場合は、ログを通じてエラーを通知する
- プロセス継続性: プロセスを継続する
- ログ出力(可能な限り):
- レベル: FATAL
- 含むべき情報: 作成/更新を試みたファイルのパス
- 例) save 時に I/O エラー
- 振る舞い方針(案)
- 通信の自動的なリトライ: クライアント および クライアントの実装 に任せる (save はリトライしないのがベスト・プラクティス)
- クライアントAPへのエラー通知: エラーを返却する
- ユーザーへのエラー通知: 起動時の場合は、ログを通じてエラーを通知する
- プロセス継続性: プロセスを継続する
- ログ出力(可能な限り):
- レベル: FATAL
- 含むべき情報: 作成/更新を試みたファイルのパス
- 例) ASSERT文、システムコール失敗
- 振る舞い方針(案)
- 通信の自動的なリトライ: エラー返却が可能であるか不定
- クライアントAPへのエラー通知: 不定
- ユーザーへのエラー通知: 起動時の場合は、ログを通じてエラーを通知する
- プロセス継続性: プロセスを即時に停止する
- ログ出力(可能な限り):
- レベル: FATAL
- 含むべき情報: 発生箇所のスタックトレース、システムコールの戻り値
Jubatus での検知スコープ外とする
- 例) モデルに Inf が含まれる場合 など
- 振る舞い方針(案)
- 通信の自動的なリトライ: クライアント および クライアントの実装 に任せる
- クライアントAPへのエラー通知: 結果をそのまま返却する (通常時の応答と同様)
- プロセス継続性: プロセスを継続する
- ログ出力:
- レベル: ERROR
- 含むべき情報: 異常の内容、異常の発生したデータを特定できる情報
別途 #497 にて整理中
- 例) ZK API からの戻り値が異常
- 振る舞い方針(案)
- 通信の自動的なリトライ: クライアント および クライアントの実装 に任せる
- クライアントAPへのエラー通知: 結果をそのまま返却する (通常時の応答と同様)
- プロセス継続性: 原則、プロセスを安全に停止する
- ログ出力:
- レベル: FATAL
- 含むべき情報: 異常の内容、異常の発生したデータを特定できる情報