Cells ADR 008: クラスター全体で一意なデータベースシーケンス

コンテキスト

クラスター全体でシーケンスが重複しない一意性を持つことは、Cell 間での Organization 移動のために必要です。 この点は core-platform-section/-/epics/3 でも強調されており、 異なる解決策が https://gitlab.com/gitlab-org/core-platform-section/data-stores/-/issues/102 で議論されました。

決定事項

すべての Cell は作成時に bigint の ID を使用します。プロビジョニング時に、各 Cell は Topology Service から使用するシーケンスの範囲を割り当てられます。

Topology Service はこちらで説明されているロジックを使用してシーケンス範囲を計算し、既存および新規作成されるすべてのシーケンス ID に対して minvalmaxval を設定します。

  • データベースが読み込まれると、gitlab:db:alter_cell_sequences_range が呼び出されてシーケンス範囲を変更します。
  • 上記の rake タスクは内部的に EVENT TRIGGER alter_new_sequences_range を登録し、新しい ID に対して正しいシーケンス範囲を設定します。

代替案

この問題に対して検討された各種解決策を以下に示します。