必要なストップの追加
必須停車駅は、顧客に迷惑をかけるため、絶対に必要であると判断された場合のみ追加してください。必須停車駅を追加する前に、必須停車駅を回避する代替アプローチが存在しないか検討してください。やむを得ず必要な停留所を設ける場合もあります。その場合は、以下の指示に従ってください。
一時停止が必要な一般的なシナリオ
長期にわたるマイグレーションの最終決定
マイグレーションに時間がかかると、アップグレード中にタイムアウトが発生するお客様が多数発生する可能性があります。サポート量の増加により、必要な停止を導入する可能性があります。バックグラウンドマイグレーションでは、特に大規模なお客様でこのようなイシューが発生する可能性がありますが、通常、影響が広範囲に及ぶ場合にのみ停止を導入しています。
- 原因アップグレードに1時間以上かかると、オムニバスがタイムアウトします。
- 緩和策次の必要な停止の後に、最初のマイナーバージョンの確定をスケジュールします。
バックグラウンドマイグレーションの不適切なファイナライズ
次のような場合、緩和のために必須停止を導入する必要があるかもしれません:
- バックグラウンドマイグレーションが確定していない場合。
-
そのバックグラウンドマイグレーションに依存するマイグレーションが書かれます。
- 原因バックグラウンドマイグレーションが不完全な場合、依存するマイグレーションが失敗する可能性があります。
- 対策依存マイグレーションを作成する前に、すべてのバックグラウンドマイグレーションが完了していることを確認してください。
マイグレーションの削除
マイグレーションが削除された場合、顧客が必要な変更を見逃さないように、必要な停止を導入する必要があるかもしれません。
- 原因必要なマイグレーションが削除されたために、依存するマイグレーションが失敗したり、アプリケーションが機能しなくなったりする可能性があります。
- 対策マイグレーションが、計画された必須停止の一部であった後にのみ削除されるようにします。
マイグレーションのタイムスタンプが非常に古い
マイグレーションのタイムスタンプが非常に古い場合(3週間以上前、または最終停止前)、これらのシナリオでイシューが発生する可能性があります:
- マイグレーションが、タイムスタンプが新しいが、必要な停止の_後に_以前のリリースで導入された別のマイグレーションに依存している場合、新しいマイグレーションは前提条件となるマイグレーションよりも早く順次実行され、失敗する可能性があります。
-
マイグレーションのタイムスタンプIDが最終のものよりも前の場合、チームが必要な停止から他のマイグレーションをつぶすときに、誤ってつぶしてしまう可能性があります。
- 原因マイグレーションが、以前のバージョンで導入された後のタイムスタンプを持つマイグレーションに依存している場合、マイグレーションが失敗することがあります。または、マイグレーションが必要な停止の後に不注意でつぶされる可能性があります。
- 対策マイグレーションのタイムスタンプがリリースの日付内に収まるようにし、最後に必要な停止よりも前の日付にならないようにしてください。
マイグレーション関連ツールのバグ
マイグレーション関連ツールのバグにより、停止を余儀なくされることがあります。テストではこれを防ぐことを目標としていますが、時にはこのようなことも起こります。
- 原因私たちがこのような事態に気づくのが遅すぎたためです。
- 対策通常、マイグレーションの修正はバックポートするようにしていますが、不可能な場合もあります。
必要な停止がリリースされる前に
必要なストップをリリースする前に、以下のステップを完了してください。リリース後に必要なストップが特定された場合でも、以下の手順を完了する必要があります:
- アップグレードパスを更新して、新しい必須停止を含めます。
- 顧客サポートチームおよびリリース管理チームと変更を伝達します。
-
次のリリースでそのバージョンへのマイグレーションをつぶすために、データベースグループにイシューを提出します。イシューにはこのテンプレートを使用してください:
Title: `Squash migrations to <Required stop version>` As a result of the required stop added for <required stop version> we should squash migrations up to that version, and update the minimum schema version. Deliverables: - [ ] Migrations are squashed up to <required stop version> - [ ] `Gitlab::Database::MIN_SCHEMA_VERSION` matches init_schema version /label ~"group::database" ~"section::enablement" ~"devops::data_stores" ~"Category:Database" ~"type::maintenance" /cc @gitlab-org/database-team/triage
必要な停止に続くリリースで
-
lib/gitlab/database.rb
のGitlab::Database::MIN_SCHEMA_GITLAB_VERSION
を新しい必須停止バージョンに更新してください。Gitlab::Database::MIN_SCHEMA_VERSION
は変更しないでください。 -
charts
プロジェクトで、アップグレードチェックフックを必要な停止バージョンに更新します。 -
omnibus-gitlab
プロジェクトで、インストール前のバージョンチェックを必要な停止バージョンに更新します。