コンテンツにスキップ

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 が、インストール済みのすべてのバックエンドをこの規則に従わせます。