필수 중지 추가

필수 중지는 고객들에게 혼란을 야기시키기 때문에 절대적으로 필요할 때에만 추가되어야 합니다. 필수 중지를 추가하기 전에 필수 중지를 피할 수 있는 대안이 있는지 고려해보세요. 때로는 필수 중지를 피할 수 없을 때도 있습니다. 그런 경우에는 아래의 지침을 따르세요.

중지가 필요한 일반 시나리오

완료되는 장기 마이그레이션

마이그레이션이 오랜 시간이 걸리면 많은 고객들이 업그레이드 중에 타임아웃을 겪을 수 있습니다. 증가된 지원 부하로 인해 필수 중지를 도입할 수도 있습니다. 특히 큰 고객들이 있는 경우 백그라운드 마이그레이션은 이러한 문제를 일으킬 수 있지만, 일반적으로 영향이 넓게 퍼졌을 때에만 중지를 도입합니다.

  • 원인: 업그레이드에 1시간 이상이 걸리면 omnibus가 시간 초과됩니다.
  • 완화책: 다음 필수 중지 이후의 첫 번째 소수 버전에 대한 완료 일정을 예약하세요.

적절하게 완료되지 않은 백그라운드 마이그레이션

다음 상황에서 필수 중지를 도입해야 할 수 있습니다.

  • 백그라운드 마이그레이션이 완료되지 않은 경우, 그리고
  • 그 백그라운드 마이그레이션에 의존하는 마이그레이션이 작성된 경우.

  • 원인: 의존하는 마이그레이션이 백그라운드 마이그레이션이 완료되지 않은 경우 실패할 수 있습니다.
  • 완화책: 모든 백그라운드 마이그레이션이 의존하는 마이그레이션을 작성하기 전에 완료되었는지 확인하세요.

마이그레이션 제거

마이그레이션이 제거되면 필수 변경사항이 누락되지 않도록하기 위해 필수 중지를 도입해야 할 수 있습니다.

  • 원인: 의존하는 마이그레이션이 실패할 수 있거나 필요한 마이그레이션이 제거되어 응용 프로그램이 제대로 작동하지 않을 수 있습니다.
  • 완화책: 마이그레이션은 필수 중지에 포함된 후에만 제거되도록 확인하세요.

마이그레이션 타임스탬프가 매우 오래됨

마이그레이션 타임스탬프가 매우 오래될 경우(> 3주, 또는 마지막 중지 이전), 다음 시나리오들이 문제를 일으킬 수 있습니다.

  • 만약 마이그레이션이 이전 버전에서 필수 중지 이후에 소개된 보다 새로운 타임스탬프를 가진 다른 마이그레이션에 의존한다면, 새로운 마이그레이션이 선행 마이그레이션보다 빨리 순차적으로 실행될 수 있고, 따라서 실패할 수 있습니다.
  • 마이그레이션 타임스탬프 ID가 마지막 중지 이전에 있다면, 팀이 다른 마이그레이션을 압축하는 동안 실수로 압축될 수 있습니다.

  • 원인: 마이그레이션이 이전 버전에서 소개된 최신 타임스탬프를 가진 마이그레이션에 의존하는 경우 실패할 수 있습니다. 또는 마이그레이션이 필수 중지 이후로 실수로 압축될 수 있습니다.
  • 완화책: 마이그레이션 타임스탬프가 릴리스 날짜 내에 있도록 노력하고, 마지막 필수 중지 전으로 날짜가 되지 않도록 확인하세요.

마이그레이션 관련 도구의 버그

일부 상황에서 마이그레이션 관련 도구의 버그로 인해 필수 중지를 도입해야 했습니다. 이러한 문제들을 테스트에서 방지하려 노력하지만 가끔 발생할 수 있습니다.

  • 원인: 우리는 이러한 문제들을 너무 늦게 알아채는 경우가 있었습니다.
  • 완화책: 일반적으로 우리는 마이그레이션에 대한 수정사항을 백포트하려 노력하지만, 경우에 따라서는 불가능할 수도 있습니다.

필수 중지가 릴리스되기 전

알려진 필수 중지를 릴리스하기 전에 다음 단계를 완료하세요. 필수 중지가 릴리스 후에 식별된 경우에도 다음 단계는 반드시 완료되어야 합니다:

  1. 업그레이드 경로를 업데이트하여 새로운 필수 중지를 포함합니다.
  2. 변경 내용을 고객 지원 및 릴리스 관리 팀과 공유합니다.
  3. 데이터베이스 그룹에 이슈를 등록하여 다음 릴리스에서 그 버전까지의 마이그레이션을 압축하도록 요청합니다. 다음 템플릿을 사용하세요:

    제목: `Squash migrations to <필수 중지 버전>`
    <필수 중지 버전>에 대한 필수 중지 추가로 인해 해당 버전까지의 마이그레이션을 압축하고, 최소 스키마 버전을 업데이트해야 합니다.
       
    납품물:
    - [ ] <필수 중지 버전>까지 마이그레이션이 압축됨
    - [ ] `Gitlab::Database::MIN_SCHEMA_VERSION`이 init_schema 버전과 일치함
       
    /label ~"group::database" ~"section::enablement" ~"devops::data_stores" ~"Category:Database" ~"type::maintenance"
    /cc @gitlab-org/database-team/triage
    

필수 중지 다음 릴리스에서

  1. lib/gitlab/database.rb에서 Gitlab::Database::MIN_SCHEMA_GITLAB_VERSION을 새로운 필수 중지 버전으로 업데이트하세요. Gitlab::Database::MIN_SCHEMA_VERSION을 변경하지 마세요.
  2. charts 프로젝트에서 업그레이드 체크 후크를 필수 중지 버전으로 업데이트하세요.
  3. omnibus-gitlab 프로젝트에서 설치 전 버전 확인을 필수 중지 버전으로 업데이트하세요.