Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-01-18 22:00:14 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-01-18 22:00:14 +0300
commit05f0ebba3a2c8ddf39e436f412dc2ab5bf1353b2 (patch)
tree11d0f2a6ec31c7793c184106cedc2ded3d9a2cc5 /db/post_migrate/20221215151822_schedule_backfill_releases_author_id.rb
parentec73467c23693d0db63a797d10194da9e72a74af (diff)
Add latest changes from gitlab-org/gitlab@15-8-stable-eev15.8.0-rc42
Diffstat (limited to 'db/post_migrate/20221215151822_schedule_backfill_releases_author_id.rb')
-rw-r--r--db/post_migrate/20221215151822_schedule_backfill_releases_author_id.rb59
1 files changed, 59 insertions, 0 deletions
diff --git a/db/post_migrate/20221215151822_schedule_backfill_releases_author_id.rb b/db/post_migrate/20221215151822_schedule_backfill_releases_author_id.rb
new file mode 100644
index 00000000000..4d8343ca2dd
--- /dev/null
+++ b/db/post_migrate/20221215151822_schedule_backfill_releases_author_id.rb
@@ -0,0 +1,59 @@
+# 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