永続化
- 規範的
- ドラフト 1.0
- 更新日
- Markdown で表示
11.1 ストレージ
サービスは、状態を組み込みの SQLite データベースに保存するべきである。推奨するテーブルの構成は次のとおりである。
| テーブル | 内容 |
|---|---|
service_config |
サービスの ID と設定。 |
clients |
ペアリング済みクライアント、トークンのハッシュ、スコープ。 |
models |
モデルのメタデータと内容のダイジェスト。 |
responses |
保存済みのレスポンス。 |
tasks |
非同期タスク。 |
task_events |
各タスクのイベントログ。シーケンス番号付き。 |
idempotency_keys |
冪等キー、リクエストのダイジェスト、結果。 |
モデルファイルはデータベースの外に置かなければならない。データベースが保持するのは、メタデータと内容のダイジェストだけである。
テーブル名とレイアウトは実装の選択である。クライアントが観察でき、相互運用のために必要なのは、次の 2 つの節にある動作である。
11.2 規則
サービスは、どのようなストレージを使うにしても、次のことを行う。
202 Acceptedを返す前に、タスクを永続化しなければならない。- イベントのシーケンス番号とタスクの状態を、同じトランザクションで更新しなければならない。
- キャンセルの遷移をアトミックにし、タスクがキャンセルされた後に完了するという競合を避けなければならない。
- 完了したタスクとイベントを、設定可能な保持期間の間、保持するべきである。
- ログの整理の際に、未完了のタスクを削除してはならない。
- 起動時に、残っている
queued、loading、running、cancellingのタスクを走査し、それぞれの再起動ポリシーを適用しなければならない(7.5 節)。
11.3 起動時の復旧
次の表は、残っていたタスクが、on_restart ポリシーに応じて移される状態を示す。
| 起動時に見つかった状態 | fail |
retry |
resume |
|---|---|---|---|
queued |
failed |
queued |
queued |
loading |
failed |
queued |
queued |
running |
failed |
queued |
running(スナップショットから続行) |
cancelling |
cancelled |
cancelled |
cancelled |
failed に移されたタスクには、エラーコード server_restarted と response.failed イベントが付く。cancelled に移されたタスクには、response.cancelled イベントが付く。新しい状態とそのイベントは、1 つのトランザクションで書き込まれる(11.2 節)。