第9章 エラー処理

9.1 エラー処理モデル

DTP のエラー処理は「検出-通知-復旧」の3段階モデルに従います:

  1. 検出:異常状況の識別
  2. 通知:対向端または上位層へのエラー情報の送信
  3. 復旧:エラータイプに応じた復旧措置の実行

9.2 エラーコード体系

DTP は各エラータイプに一意のエラーコードを定義し、機能モジュールごとに8つの範囲に分類します:

エラーカテゴリエラーコード範囲処理戦略
フレーム処理エラー1xxxフレーム破棄 + 送信側に通知 + ログ記録
暗号化エラー2xxxフレーム破棄 + 送信側に通知 + 鍵再ネゴシエーションの可能性
アグリーメントエラー3xxxFragment 破棄 + 送信側に通知 + 再ネゴシエーションの可能性
DAG エラー4xxxFragment 拒否 + 送信側に通知 または キャッシュして待機
セッションエラー5xxxセッション復旧を試行 + 失敗時はクローズして上位層に通知
再開エラー6xxx送信一時停止 + 上位アプリケーションに通知
バージョンエラー7xxxバージョン非互換通知を送信 + ダウングレード処理を試行
権限エラー8xxx操作拒否 + リクエスト側に通知

9.3 エラーコード詳細表

フレーム処理エラー (1xxx)

エラーコード名称説明
1001FRAME_DESERIALIZATION_FAILEDフレームデシリアライズ失敗
1002FRAME_INVALID_FORMATフレームフォーマット無効

暗号化エラー (2xxx)

エラーコード名称説明
2001DECRYPTION_FAILEDペイロード復号失敗
2002KEY_NOT_READY鍵未準備(CAP 未完了)

アグリーメントエラー (3xxx)

エラーコード名称説明
3001AGREEMENT_NOT_FOUNDアグリーメント不存在
3002AGREEMENT_EXPIREDアグリーメント期限切れ
3003AGREEMENT_NEGOTIATION_FAILEDアグリーメントネゴシエーション失敗

DAG エラー (4xxx)

エラーコード名称説明
4001DAG_CYCLE_DETECTEDDAG サイクル検出
4002DAG_DEPENDENCY_UNRESOLVEDDAG 依存未解決

セッションエラー (5xxx)

エラーコード名称説明
5001SESSION_NOT_FOUNDセッション不存在
5002SESSION_TIMEOUTセッションタイムアウト
5003SESSION_RESTORE_FAILEDセッション復元失敗

再開エラー (6xxx)

エラーコード名称説明
6001BUFFER_FULLキャッシュ満杯
6002RETRANSMISSION_TIMEOUT再送タイムアウト

バージョンエラー (7xxx)

エラーコード名称説明
7001VERSION_INCOMPATIBLEバージョン非互換

権限エラー (8xxx)

エラーコード名称説明
8001PERMISSION_DENIED権限拒否
8002OBSERVER_WRITE_DENIEDオブザーバー書き込み操作拒否

9.4 エラー通知メカニズム

エラー通知はコントロールフレーム(Control Frame)を通じて伝達され、以下の情報を含みます:

フィールド説明
errorCodeエラーコード
errorMessageエラー説明メッセージ
relatedFrameIdエラーをトリガーしたフレーム ID(オプション)
relatedAgreementId関連するアグリーメント ID(オプション)
details追加詳細(オプション)

9.5 主要なエラーシナリオ

デシリアライズ失敗

受信した Logical_Frame が正しくデシリアライズできない場合:

  1. そのフレームを破棄
  2. 送信側に FRAME_DESERIALIZATION_FAILED (1001) エラー通知を送信

復号失敗

受信した Logical_Frame のペイロードが正しく復号できない場合:

  1. そのフレームを破棄
  2. 送信側に DECRYPTION_FAILED (2001) エラー通知を送信
  3. 連続失敗が閾値を超えた場合、CAP の鍵再交換をトリガー

DAG サイクル検出

Fragment が宣言した依存関係が DAG 内でサイクルを形成する場合:

  1. その Fragment を拒否
  2. DAG_CYCLE_DETECTED (4001) エラーを返す

未知のアグリーメント

Fragment が受信側に存在しない Agreement_ID を参照している場合:

  1. その Fragment を破棄
  2. AGREEMENT_NOT_FOUND (3001) エラーを返す

鍵未準備

データ送信を試みたが CAP の鍵交換がまだ完了していない場合:

  1. 送信を拒否
  2. 上位呼び出し元に KEY_NOT_READY (2002) エラーを返す

キャッシュ満杯

送信側の未確認 Fragment キャッシュが容量上限に達した場合:

  1. 新しい Fragment の送信を一時停止
  2. 上位アプリケーションに BUFFER_FULL (6001) 通知を送信

オブザーバー権限超過

Observer がリクエストの発行またはアグリーメントの変更を試みた場合:

  1. 操作を拒否
  2. OBSERVER_WRITE_DENIED (8002) エラーを返す