RouterStore
インストールのルーターを保存するポート。変わらないバージョンで、それぞれがタイプごとの分岐、既定の分岐、認識器。
ポート: RouterStore。
indx_interfaces.protocols
で、indx_interfaces.routers
のモデルの上に宣言しています(ADR-0078)。
Router は、キー、バージョン番号、RouterSpec です。仕様は、ラベル、文書タイプごとの Branch、既定の
Branch、そして任意で Recognizer(分類器、それが答えるファセット、閾値)です。分岐は、固定するリーダー、
チャンカー、単位ごとのレーン、埋め込み空間を名指します。ストアはすべてのルーターのすべてのバージョンを
保存します。
class RouterStore(Protocol): def put(self, owner: OwnerId, router: Router) -> None: ... def get(self, owner: OwnerId, router_id: RouterId, version: int) -> Router | None: ... def versions(self, owner: OwnerId, router_id: RouterId) -> tuple[Router, ...]: ... def list(self, owner: OwnerId) -> tuple[Router, ...]: ... def delete(self, owner: OwnerId, router_id: RouterId) -> bool: ...6 つ目のストアのポートです。ポートは集約ごとに分けるからです。バージョンは書いた後に変わらないので、それを
名指した計画はいつでも読み返せます。公開も復元も次のバージョンを書きます。ルーターはエントリーポイントでは
なく、スナップショットのハッシュを動かしません(ADR-0074)。同梱するバックエンドは memory、sqlite、
postgres の 3 つで、INDX_ROUTER_STORE が名指します。
- オーナー。 どのメソッドも最初に
OwnerIdを取り、オーナーをまたぐものはありません。 - 同一性。 オーナーの中で、バージョンはキーと番号です。次の番号はサーバーが書きます。サーバーは同じ
番号を 2 度書かないので、
putが新しいものを置き換えることはありません。 - 順序。
versionsは 1 つのルーターのバージョンを古い順に返します。listは各ルーターの最新の バージョンをキー順に返します。 - 冪等性。
deleteはルーターのすべてのバージョンを消します。ないものはFalseです。 - 検証。 モデルは 1 つのタイプに 2 度並んだ分岐を拒みます。各タイプが存在し、各 ID がインストール 済みかを確かめるのは、ストアではなくサーバーです。
tests/unit/test_store_conformance.py
が、インストール済みのすべてのバックエンドをこの規則に従わせます。