문제 해결

Tier: Free, Premium, Ultimate Offering: Self-managed

배치된 백그라운드 마이그레이션이 완료되지 않아 데이터베이스 마이그레이션 실패

GitLab 버전 14.2 이상으로 업데이트할 때, 데이터베이스 마이그레이션이 다음과 같은 메시지와 함께 실패할 수 있습니다:

StandardError: An error has occurred, all later migrations canceled:

Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active':
  {:job_class_name=>"CopyColumnUsingBackgroundMigrationJob",
   :table_name=>"push_event_payloads",
   :column_name=>"event_id",
   :job_arguments=>[["event_id"],
   ["event_id_convert_to_bigint"]]
  }

먼저, 14.2에 대한 버전별 업그레이드 지침을 따랐는지 확인하세요.

따랐다면, 배치된 백그라운드 마이그레이션을 수동으로 완료할 수 있습니다).

따르지 않았다면, 다음 방법 중 하나를 선택하세요:

  1. 롤백 및 업그레이드하여 14.2+로 업데이트하기 전에 필요한 버전 중 하나를 거칩니다.
  2. 롤 포워드하여 현재 버전에서 유지하며 배치 마이그레이션이 성공적으로 완료되도록 수동으로 조치합니다.

롤백 및 필요한 업그레이드 경로 따르기

  1. 이전 설치 버전으로 롤백 및 복원
  2. 14.2+로 업데이트하기 전에 14.0.5 또는 14.1로 업데이트하세요.
  3. 상태 확인 배치된 백그라운드 마이그레이션의 상태를 확인하고 다시 업그레이드를 시도하기 전에 모두 완료로 표시되었는지 확인합니다. 만약 여전히 활성으로 표시된 것이 있다면, 수동으로 완료할 수 있습니다.

롤 포워드 및 업그레이드된 버전에서 마이그레이션 완료

다운타임이 있는 배포의 경우

모든 배치된 백그라운드 마이그레이션을 실행하는 데는 GitLab 설치 크기에 따라 상당한 시간이 걸릴 수 있습니다.

  1. 상태 확인 데이터베이스에서 배치된 백그라운드 마이그레이션의 상태를 확인하고, 적절한 인수로 수동으로 실행하세요 상태 쿼리가 더 이상 행을 반환하지 않을 때까지.
  2. 모든 상태가 완료로 표시되면, 설치를 위해 마이그레이션을 다시 실행하세요.
  3. 데이터베이스 마이그레이션 완료 GitLab 업그레이드에서:

    sudo gitlab-rake db:migrate
    
  4. 재구성 실행:

    sudo gitlab-ctl reconfigure
    
  5. 설치의 업그레이드를 완료하세요.

다운타임 없는 배포의 경우

실패한 마이그레이션은 배포 후 마이그레이션이므로, 업그레이드된 버전의 실행 인스턴스에서 유지하며 배치된 백그라운드 마이그레이션이 완료될 때까지 기다릴 수 있습니다.

  1. 상태 확인 오류 메시지의 배치 백그라운드 마이그레이션의 상태를 확인하고, 완료로 나열되었는지 확인합니다. 여전히 활성 상태라면, 완료될 때까지 기다리거나 수동으로 완료하십시오.
  2. 설치를 위해 마이그레이션을 다시 실행하여 나머지 배포 후 마이그레이션이 완료되도록 합니다.

백그라운드 마이그레이션이 Sidekiq 대기열에 남아 있습니다

경고: 다음 작업은 GitLab 성능에 지장을 줄 수 있습니다. 여러 데이터베이스 또는 파일 업데이트를 수행하는 여러 Sidekiq 작업을 실행합니다.

다음 검사를 실행하세요. 0이 아닌 값을 반환하고 시간이 지나도 개수가 줄어들지 않는 경우 이 섹션의 나머지 단계를 따르십시오.

# Linux 패키지 설치의 경우:
sudo gitlab-rails runner -e production 'puts Gitlab::BackgroundMigration.remaining'

# 자체 컴파일 설치의 경우:
cd /home/git/gitlab
sudo -u git -H bundle exec rails runner -e production 'puts Gitlab::BackgroundMigration.remaining'

1000개 이상의 대기 작업이 있는 경우 런타임 메모리가 넘쳐날 가능성이 높으므로 다음 명령을 다시 실행하는 것이 안전합니다.

Linux 패키지 (Omnibus)
# Rails 콘솔 시작
sudo gitlab-rails c

# Rails 콘솔에서 다음을 실행
scheduled_queue = Sidekiq::ScheduledSet.new
pending_job_classes = scheduled_queue.select { |job| job["class"] == "BackgroundMigrationWorker" }.map { |job| job["args"].first }.uniq
pending_job_classes.each { |job_class| Gitlab::BackgroundMigration.steal(job_class) }
자체 컴파일 (소스)
# Rails 콘솔 시작
sudo -u git -H bundle exec rails RAILS_ENV=production

# Rails 콘솔에서 다음을 실행
scheduled_queue = Sidekiq::ScheduledSet.new
pending_job_classes = scheduled_queue.select { |job| job["class"] == "BackgroundMigrationWorker" }.map { |job| job["args"].first }.uniq
pending_job_classes.each { |job_class| Gitlab::BackgroundMigration.steal(job_class) }

‘대기’ 상태에서 멈춘 백그라운드 마이그레이션

대기 상태에서 멈춘 백그라운드 마이그레이션의 경우 다음 검사를 실행하세요.

0이 아닌 값을 반환하고 시간이 지나도 개수가 줄어들지 않는 경우 이 섹션의 나머지 단계를 따르십시오.

# Linux 패키지 설치의 경우:
sudo gitlab-rails runner -e production 'puts Gitlab::Database::BackgroundMigrationJob.pending.count'

# 자체 컴파일 설치의 경우:
cd /home/git/gitlab
sudo -u git -H bundle exec rails runner -e production 'puts Gitlab::Database::BackgroundMigrationJob.pending.count'

대기 상태에서 제거하기 위해 이러한 마이그레이션을 다시 시도하는 것은 안전합니다:

Linux 패키지 (Omnibus)
# Rails 콘솔 시작
sudo gitlab-rails c

# Rails 콘솔에서 다음을 실행
Gitlab::Database::BackgroundMigrationJob.pending.find_each do |job|
  puts "대기 작업 '#{job.class_name}'의 인수 #{job.arguments}로 실행 중"
  result = Gitlab::BackgroundMigration.perform(job.class_name, job.arguments)
  puts "결과: #{result}"
end
자체 컴파일 (소스)
# Rails 콘솔 시작
sudo -u git -H bundle exec rails RAILS_ENV=production

# Rails 콘솔에서 다음을 실행
Gitlab::Database::BackgroundMigrationJob.pending.find_each do |job|
  puts "대기 작업 '#{job.class_name}'의 인수 #{job.arguments}로 실행 중"
  result = Gitlab::BackgroundMigration.perform(job.class_name, job.arguments)
  puts "결과: #{result}"
end

고급 검색 마이그레이션이 중단된 경우 어떻게 해야 하나요?

GitLab 15.0에서는 DeleteOrphanedCommit라는 고급 검색 마이그레이션이 업그레이드 중에 대기 상태에서 영구적으로 멈춰 있을 수 있습니다. 이 문제는 GitLab 15.1에서 수정되었습니다.

고급 검색을 사용하는 GitLab 15.0의 자체 관리 고객은 성능 저하를 경험하게 됩니다. 마이그레이션을 정리하려면 15.1 이상으로 업그레이드してください.

대기 중인 다른 고급 검색 마이그레이션에 대해서는 중단된 마이그레이션을 재시도하는 방법을 참조하세요.

모든 대기 중인 고급 검색 마이그레이션이 완료되기 전에 GitLab을 업그레이드하면 새로운 버전에서 제거된 대기 중인 마이그레이션은 실행되거나 재시도할 수 없습니다. 이 경우 인덱스를 처음부터 다시 생성해야 합니다.

Elasticsearch version not compatible 오류에 대한 해결 방법

Elasticsearch 또는 OpenSearch의 버전이 귀하의 GitLab 버전과 호환되는지 확인하세요.