コンテンツへ移動

同期

bae の同期は coven の同期です。bae はテーブルと blob を宣言し、残りは coven が行います。このページは bae に適用される仕組みです。各部分の詳細は coven 自身のドキュメントにあります。

coven は SQLite 接続を所有するため、bae がコミットするすべての書き込みは coven を通ります。同期テーブルを変更するトランザクションがコミットされると、coven は同じトランザクション内で、各行の変更を触れた列とともに記録します。そのため、直後にアプリがクラッシュしても、コミットされた変更は失われません。差分取りも dirty フラグもありません。捕捉は接続の性質であり、書き込みは取り逃がされません。変更はデバイス上で待機し、送信するときに初めて暗号化と署名が行われます。書き込みに鍵もネットワークも要りません。

クラウドホーム内のライブラリの全履歴は、番号付きのオブジェクトの 1 つの列です。各オブジェクトは、1 台のデバイスの変更のまとまり、管理エントリ、1 人のメンバーに向けて封印された鍵、またはスナップショットの告知のいずれかです。すべてのデバイスがそれを順に適用し、飛ばすことはないため、何がいつ起きたかについて全デバイスの認識が一致します。デバイスは、それより前のすべてを適用してから次のオブジェクトを追加します。

同期パスは、デバイスが最後に適用したオブジェクトから欠けているものが見つかるまで先へ読み、それぞれの署名を確認して適用し、このデバイスの待機中の変更を 1 つの新しいオブジェクトとして送り、その後、新しい状態が必要とする作業を行います。アクセスの共有や解除、スナップショットの作成、古い履歴の削除です。変化のないライブラリでのパスは、規模にかかわらずリクエスト 2 回で済みます。

パスはローカル変更後、アイドルタイマー、そして 今すぐ同期 で即時に実行されます。失敗は 1 つのバックオフ計画で再試行され、進めないものはすべて何を待っているかを示し、bae はそれを同期ステータス行に表示します。

離れた場所にある 2 台のデバイスが同じライブラリを編集することは、例外ではなく通常の状況です。変更が出会ったときは次のようになります。

  • 異なる行または異なる列への編集は両方が適用されます。ラップトップでリリースの年を編集し、デスクトップでレーベルを編集した場合、両方が残ります。
  • 同じ行の同じ列への編集はタイムスタンプで順序付けられます。後の編集が勝ち、すべてのデバイスで決定的かつ同一です。
  • 削除は同時編集に勝ちます。その後に削除された行への編集は、いつ届いても負けます。そのため、あるデバイスで削除されたリリースは、同じ間隔に別のデバイスで編集されても削除されたままです。

coven は置き換えられた値を失われた値として保持します。bae はそれを表示も破棄もしないため、競合 UI はありません。どの到着順でも、すべてのデバイスは同じ結果へ収束します。

スナップショット

このセクションへのリンク

参加または復元するデバイスは、履歴を最初から再生しません。デバイスはスナップショット、つまり列のある時点でのライブラリの完全な状態を作成し、ライブラリとすべての非公開サークルがスナップショットを持てば、それ以前の履歴は削除されます。新しいデバイスは最新のスナップショットを読み込み、その後に来たものだけを適用します。保持される履歴より長く離れていたデバイスも同じようにし、未送信の編集は保持します。

スキーマバージョン

このセクションへのリンク

bae のスキーマは 1 つのマイグレーションで、デバイスが送るすべての変更は、作成時のスキーマバージョンを記録します。自分より新しいスキーマからの変更に到達したデバイスは、アプリが更新されるまでそこで止まり、それ以降は何も適用しません。失われるものはなく、誤って適用されるものもありません。

スキーマバージョンより粗い単位が 互換性世代 です。各バイナリに組み込まれた固定 coven リビジョンです。2 つのビルドは同じ世代内でだけ同期します。coven のワイヤー形式が壊れる場合は新しい世代となり、すべてのアプリでメジャーバージョンが上がります。1.0 前はすべてのビルドが世代 0 で、形式はマイグレーションなしに変わります。

プロバイダーが見るもの

このセクションへのリンク

プロバイダーは、暗号化された変更、スナップショット、メンバーシップレコード、ファイルを保存します。オブジェクト数、サイズ、タイミング、各オブジェクトを書き込んだアカウントは観測できますが、中身は読めません。デバイスが取得するすべてのオブジェクトは、署名とメンバーシップが検証されてからデータベースに触れます。ストレージは信頼できない受け渡し箱です。暗号化 と 身元とメンバーシップ を参照してください。