Skip to content

notes キャッシュの実体/タイムライン所属の分離(複数 TL 所属とキー不一致の解消) #30

Description

@hitalin

前提

現在の notes キャッシュは 1 ノートにつき 1 つのタイムライン種別しか保持できず、複数のタイムラインに属するノート(home ∩ social など)は最後に書き込んだタイムラインへ所属が付け替わる。また、REST 取得とストリーミング受信とでキャッシュに書き込むタイムラインキーの形式が一致しておらず、リスト・アンテナ・チャンネル・ロールではストリーミング受信分が読み出しに乗らない(孤児化)。

いずれも混入バグの直因ではないが、復帰時・オフライン時のキャッシュ表示が「薄くなる・揺れる」方向の症状に寄与している。notedeck-dev/notedeck#651 の調査で判明(同 issue の「関連(別症状)」節参照)。

対症療法ではなくデータモデルとして理想形に組み直したい。

やってほしいこと

  • ノート実体(正本 1 行)とタイムライン所属(1 ノート N バケット)を分離し、同一ノートが複数のタイムラインに属せるようにする
  • タイムラインキーの正本を notecli 内の型に一元化し、REST・ストリーミングの両書込を同一の ingest 経路に統一する(層ごとのキー手組みを廃止)
  • トリム・GC を所属単位に再設計する(実体はどこからも参照されなくなったら掃除)
  • 可視性・ミュート等はキャッシュに焼き込まず、読み出し側の述語で処理する現行方針を維持する
  • β 方針につき後方互換は残さず移行する

論点(議論してから着手)

  • 実体行の GC 方針(参照消失時の掃除と TTL の併用でよいか)
  • 正規キーをフロントへどう配るか(フェッチ・購読コマンドの戻り値に含める範囲)
  • 取得済み連続区間(セグメント)の記録まで持つか — gap 検知は UI 層の復帰フェッチが既に担っているため、今回は見送りが妥当と考えている
  • notedeck 側の読み出しコマンドのシグネチャを維持するか(維持すれば cross-repo 影響は rev pin bump 程度)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions