BLUEPRINT
第9章 エラー処理
9.1 エラー処理モデル
DTP のエラー処理は「検出-通知-復旧」の3段階モデルに従います:
- 検出:異常状況の識別
- 通知:対向端または上位層へのエラー情報の送信
- 復旧:エラータイプに応じた復旧措置の実行
9.2 エラーコード体系
DTP は各エラータイプに一意のエラーコードを定義し、機能モジュールごとに8つの範囲に分類します:
| エラーカテゴリ | エラーコード範囲 | 処理戦略 |
|---|---|---|
| フレーム処理エラー | 1xxx | フレーム破棄 + 送信側に通知 + ログ記録 |
| 暗号化エラー | 2xxx | フレーム破棄 + 送信側に通知 + 鍵再ネゴシエーションの可能性 |
| アグリーメントエラー | 3xxx | Fragment 破棄 + 送信側に通知 + 再ネゴシエーションの可能性 |
| DAG エラー | 4xxx | Fragment 拒否 + 送信側に通知 または キャッシュして待機 |
| セッションエラー | 5xxx | セッション復旧を試行 + 失敗時はクローズして上位層に通知 |
| 再開エラー | 6xxx | 送信一時停止 + 上位アプリケーションに通知 |
| バージョンエラー | 7xxx | バージョン非互換通知を送信 + ダウングレード処理を試行 |
| 権限エラー | 8xxx | 操作拒否 + リクエスト側に通知 |
9.3 エラーコード詳細表
フレーム処理エラー (1xxx)
| エラーコード | 名称 | 説明 |
|---|---|---|
| 1001 | FRAME_DESERIALIZATION_FAILED | フレームデシリアライズ失敗 |
| 1002 | FRAME_INVALID_FORMAT | フレームフォーマット無効 |
暗号化エラー (2xxx)
| エラーコード | 名称 | 説明 |
|---|---|---|
| 2001 | DECRYPTION_FAILED | ペイロード復号失敗 |
| 2002 | KEY_NOT_READY | 鍵未準備(CAP 未完了) |
アグリーメントエラー (3xxx)
| エラーコード | 名称 | 説明 |
|---|---|---|
| 3001 | AGREEMENT_NOT_FOUND | アグリーメント不存在 |
| 3002 | AGREEMENT_EXPIRED | アグリーメント期限切れ |
| 3003 | AGREEMENT_NEGOTIATION_FAILED | アグリーメントネゴシエーション失敗 |
DAG エラー (4xxx)
| エラーコード | 名称 | 説明 |
|---|---|---|
| 4001 | DAG_CYCLE_DETECTED | DAG サイクル検出 |
| 4002 | DAG_DEPENDENCY_UNRESOLVED | DAG 依存未解決 |
セッションエラー (5xxx)
| エラーコード | 名称 | 説明 |
|---|---|---|
| 5001 | SESSION_NOT_FOUND | セッション不存在 |
| 5002 | SESSION_TIMEOUT | セッションタイムアウト |
| 5003 | SESSION_RESTORE_FAILED | セッション復元失敗 |
再開エラー (6xxx)
| エラーコード | 名称 | 説明 |
|---|---|---|
| 6001 | BUFFER_FULL | キャッシュ満杯 |
| 6002 | RETRANSMISSION_TIMEOUT | 再送タイムアウト |
バージョンエラー (7xxx)
| エラーコード | 名称 | 説明 |
|---|---|---|
| 7001 | VERSION_INCOMPATIBLE | バージョン非互換 |
権限エラー (8xxx)
| エラーコード | 名称 | 説明 |
|---|---|---|
| 8001 | PERMISSION_DENIED | 権限拒否 |
| 8002 | OBSERVER_WRITE_DENIED | オブザーバー書き込み操作拒否 |
9.4 エラー通知メカニズム
エラー通知はコントロールフレーム(Control Frame)を通じて伝達され、以下の情報を含みます:
| フィールド | 説明 |
|---|---|
| errorCode | エラーコード |
| errorMessage | エラー説明メッセージ |
| relatedFrameId | エラーをトリガーしたフレーム ID(オプション) |
| relatedAgreementId | 関連するアグリーメント ID(オプション) |
| details | 追加詳細(オプション) |
9.5 主要なエラーシナリオ
デシリアライズ失敗
受信した Logical_Frame が正しくデシリアライズできない場合:
- そのフレームを破棄
- 送信側に FRAME_DESERIALIZATION_FAILED (1001) エラー通知を送信
復号失敗
受信した Logical_Frame のペイロードが正しく復号できない場合:
- そのフレームを破棄
- 送信側に DECRYPTION_FAILED (2001) エラー通知を送信
- 連続失敗が閾値を超えた場合、CAP の鍵再交換をトリガー
DAG サイクル検出
Fragment が宣言した依存関係が DAG 内でサイクルを形成する場合:
- その Fragment を拒否
- DAG_CYCLE_DETECTED (4001) エラーを返す
未知のアグリーメント
Fragment が受信側に存在しない Agreement_ID を参照している場合:
- その Fragment を破棄
- AGREEMENT_NOT_FOUND (3001) エラーを返す
鍵未準備
データ送信を試みたが CAP の鍵交換がまだ完了していない場合:
- 送信を拒否
- 上位呼び出し元に KEY_NOT_READY (2002) エラーを返す
キャッシュ満杯
送信側の未確認 Fragment キャッシュが容量上限に達した場合:
- 新しい Fragment の送信を一時停止
- 上位アプリケーションに BUFFER_FULL (6001) 通知を送信
オブザーバー権限超過
Observer がリクエストの発行またはアグリーメントの変更を試みた場合:
- 操作を拒否
- OBSERVER_WRITE_DENIED (8002) エラーを返す
