debian-mirror-gitlab/db/post_migrate/20221215151822_schedule_backfill_releases_author_id.rb
2023-03-17 16:20:25 +05:30

60 lines
1.3 KiB
Ruby

# frozen_string_literal: true
class ScheduleBackfillReleasesAuthorId < Gitlab::Database::Migration[2.1]
MIGRATION = 'BackfillReleasesAuthorId'
JOB_DELAY_INTERVAL = 2.minutes
GHOST_USER_TYPE = 5
restrict_gitlab_migration gitlab_schema: :gitlab_main
class User < MigrationRecord
self.table_name = 'users'
end
class Release < MigrationRecord
self.table_name = 'releases'
end
def up
unless release_with_empty_author_exists?
say "There are no releases with empty author_id, so skipping migration #{self.class.name}"
return
end
create_ghost_user if ghost_user_id.nil?
queue_batched_background_migration(
MIGRATION,
:releases,
:id,
ghost_user_id,
job_interval: JOB_DELAY_INTERVAL
)
end
def down
delete_batched_background_migration(MIGRATION, :releases, :id, [ghost_user_id])
end
private
def ghost_user_id
User.find_by(user_type: GHOST_USER_TYPE)&.id
end
def create_ghost_user
user = User.new
user.name = 'Ghost User'
user.username = 'ghost'
user.email = 'ghost@example.com'
user.user_type = GHOST_USER_TYPE
user.projects_limit = 100000
user.save!
end
def release_with_empty_author_exists?
Release.exists?(author_id: nil)
end
end