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 に対して minval、maxval を設定します。
- データベースが読み込まれると、
gitlab:db:alter_cell_sequences_rangeが呼び出されてシーケンス範囲を変更します。 - 上記の rake タスクは内部的に EVENT TRIGGER alter_new_sequences_range を登録し、新しい ID に対して正しいシーケンス範囲を設定します。
代替案
この問題に対して検討された各種解決策を以下に示します。
