前提
現在の notes キャッシュは 1 ノートにつき 1 つのタイムライン種別しか保持できず、複数のタイムラインに属するノート(home ∩ social など)は最後に書き込んだタイムラインへ所属が付け替わる。また、REST 取得とストリーミング受信とでキャッシュに書き込むタイムラインキーの形式が一致しておらず、リスト・アンテナ・チャンネル・ロールではストリーミング受信分が読み出しに乗らない(孤児化)。
いずれも混入バグの直因ではないが、復帰時・オフライン時のキャッシュ表示が「薄くなる・揺れる」方向の症状に寄与している。hitalin/notedeck#651 の調査で判明(同 issue の「関連(別症状)」節参照)。
対症療法ではなくデータモデルとして理想形に組み直したい。
やってほしいこと
- ノート実体(正本 1 行)とタイムライン所属(1 ノート N バケット)を分離し、同一ノートが複数のタイムラインに属せるようにする
- タイムラインキーの正本を notecli 内の型に一元化し、REST・ストリーミングの両書込を同一の ingest 経路に統一する(層ごとのキー手組みを廃止)
- トリム・GC を所属単位に再設計する(実体はどこからも参照されなくなったら掃除)
- 可視性・ミュート等はキャッシュに焼き込まず、読み出し側の述語で処理する現行方針を維持する
- β 方針につき後方互換は残さず移行する
論点(議論してから着手)
- 実体行の GC 方針(参照消失時の掃除と TTL の併用でよいか)
- 正規キーをフロントへどう配るか(フェッチ・購読コマンドの戻り値に含める範囲)
- 取得済み連続区間(セグメント)の記録まで持つか — gap 検知は UI 層の復帰フェッチが既に担っているため、今回は見送りが妥当と考えている
- notedeck 側の読み出しコマンドのシグネチャを維持するか(維持すれば cross-repo 影響は rev pin bump 程度)
前提
現在の notes キャッシュは 1 ノートにつき 1 つのタイムライン種別しか保持できず、複数のタイムラインに属するノート(home ∩ social など)は最後に書き込んだタイムラインへ所属が付け替わる。また、REST 取得とストリーミング受信とでキャッシュに書き込むタイムラインキーの形式が一致しておらず、リスト・アンテナ・チャンネル・ロールではストリーミング受信分が読み出しに乗らない(孤児化)。
いずれも混入バグの直因ではないが、復帰時・オフライン時のキャッシュ表示が「薄くなる・揺れる」方向の症状に寄与している。hitalin/notedeck#651 の調査で判明(同 issue の「関連(別症状)」節参照)。
対症療法ではなくデータモデルとして理想形に組み直したい。
やってほしいこと
論点(議論してから着手)