문제 해결

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)
# 레일즈 콘솔을 시작합니다
sudo gitlab-rails c

# 레일즈 콘솔에서 다음을 실행합니다
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) }
소스로 컴파일 (source)
# 레일즈 콘솔을 시작합니다
sudo -u git -H bundle exec rails RAILS_ENV=production

# 레일즈 콘솔에서 다음을 실행합니다
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)
# 레일즈 콘솔을 시작합니다
sudo gitlab-rails c

# 레일즈 콘솔에서 다음을 실행합니다
Gitlab::Database::BackgroundMigrationJob.pending.find_each do |job|
  puts "Running pending job '#{job.class_name}' with arguments #{job.arguments}"
  result = Gitlab::BackgroundMigration.perform(job.class_name, job.arguments)
  puts "Result: #{result}"
end
소스로 컴파일 (source)
# 레일즈 콘솔을 시작합니다
sudo -u git -H bundle exec rails RAILS_ENV=production

# 레일즈 콘솔에서 다음을 실행합니다
Gitlab::Database::BackgroundMigrationJob.pending.find_each do |job|
  puts "Running pending job '#{job.class_name}' with arguments #{job.arguments}"
  result = Gitlab::BackgroundMigration.perform(job.class_name, job.arguments)
  puts "Result: #{result}"
end

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

GitLab 15.0에서 DeleteOrphanedCommit이라는 고급 검색 마이그레이션이 업그레이드 간에 계속해서 pending 상태로 남을 수 있습니다. 이 문제는 GitLab 15.1에서 수정되었습니다.

GitLab 15.0을 사용하는 Self-Managed 고객이고 고급 검색을 사용하는 경우, 성능 저하가 발생합니다. 마이그레이션을 정리하려면 15.1 이상으로 업그레이드하세요.

다른 pending 중인 고급 검색 마이그레이션이 멈춘 경우 중단된 마이그레이션을 다시 시도하는 방법을 참조하세요.

모든 pending 중인 고급 검색 마이그레이션이 완료되기 전에 GitLab을 업그레이드하는 경우, 새 버전에서 제거된 pending 마이그레이션은 실행되거나 재시도할 수 없습니다. 이 경우, 처음부터 색인을 다시 만들어야 합니다.

‘Elasticsearch version not compatible’ 오류에 대한 처리 방법은 무엇인가요?

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