Add background migration to fill file stores
This commit is contained in:
parent
014f5f6a69
commit
76f0d7fe6e
6 changed files with 198 additions and 0 deletions
95
db/post_migrate/20180424151928_fill_file_store.rb.rb
Normal file
95
db/post_migrate/20180424151928_fill_file_store.rb.rb
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
class FillFileStore < ActiveRecord::Migration
|
||||||
|
include Gitlab::Database::MigrationHelpers
|
||||||
|
|
||||||
|
DOWNTIME = false
|
||||||
|
|
||||||
|
disable_ddl_transaction!
|
||||||
|
|
||||||
|
class Build < ActiveRecord::Base
|
||||||
|
include EachBatch
|
||||||
|
self.table_name = 'ci_builds'
|
||||||
|
BATCH_SIZE = 10_000
|
||||||
|
|
||||||
|
def self.queue_background_migration
|
||||||
|
self.class.where(artifacts_file_store: nil).tap do |relation|
|
||||||
|
queue_background_migration_jobs_by_range_at_intervals(relation,
|
||||||
|
'FillFileStoreBuildArchive',
|
||||||
|
5.minutes,
|
||||||
|
batch_size: BATCH_SIZE)
|
||||||
|
end
|
||||||
|
|
||||||
|
self.class.where(artifacts_metadata_store: nil).tap do |relation|
|
||||||
|
queue_background_migration_jobs_by_range_at_intervals(relation,
|
||||||
|
'FillFileStoreBuildMetadata',
|
||||||
|
5.minutes,
|
||||||
|
batch_size: BATCH_SIZE)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class JobArtifact < ActiveRecord::Base
|
||||||
|
include EachBatch
|
||||||
|
self.table_name = 'ci_job_artifacts'
|
||||||
|
BATCH_SIZE = 10_000
|
||||||
|
|
||||||
|
def self.queue_background_migration
|
||||||
|
self.class.where(file_store: nil).tap do |relation|
|
||||||
|
queue_background_migration_jobs_by_range_at_intervals(relation,
|
||||||
|
'FillFileStoreJobArtifact',
|
||||||
|
5.minutes,
|
||||||
|
batch_size: BATCH_SIZE)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class LfsObject < ActiveRecord::Base
|
||||||
|
include EachBatch
|
||||||
|
self.table_name = 'lfs_objects'
|
||||||
|
BATCH_SIZE = 10_000
|
||||||
|
|
||||||
|
def self.queue_background_migration
|
||||||
|
self.class.where(file_store: nil).tap do |relation|
|
||||||
|
queue_background_migration_jobs_by_range_at_intervals(relation,
|
||||||
|
'FillFileStoreLfsObject',
|
||||||
|
5.minutes,
|
||||||
|
batch_size: BATCH_SIZE)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Upload < ActiveRecord::Base
|
||||||
|
include EachBatch
|
||||||
|
self.table_name = 'uploads'
|
||||||
|
BATCH_SIZE = 10_000
|
||||||
|
|
||||||
|
def self.queue_background_migration
|
||||||
|
self.class.where(store: nil).tap do |relation|
|
||||||
|
queue_background_migration_jobs_by_range_at_intervals(relation,
|
||||||
|
'FillFileStoreUpload',
|
||||||
|
5.minutes,
|
||||||
|
batch_size: BATCH_SIZE)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def up
|
||||||
|
disable_statement_timeout
|
||||||
|
|
||||||
|
# Schedule background migrations that fill 'NULL' value by '1' on `file_store`, `store`, `artifacts_file_store` columns
|
||||||
|
# '1' represents ObjectStorage::Store::LOCAL
|
||||||
|
# ci_builds.artifacts_file_store
|
||||||
|
# ci_builds.artifacts_metadata_store
|
||||||
|
# ci_job_artifacts.file_store
|
||||||
|
# lfs_objects.file_store
|
||||||
|
# uploads.store
|
||||||
|
|
||||||
|
FillFileStore::Build.queue_background_migration
|
||||||
|
FillFileStore::JobArtifact.queue_background_migration
|
||||||
|
FillFileStore::LfsObject.queue_background_migration
|
||||||
|
FillFileStore::Upload.queue_background_migration
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
# noop
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,21 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
# rubocop:disable Metrics/AbcSize
|
||||||
|
# rubocop:disable Style/Documentation
|
||||||
|
|
||||||
|
module Gitlab
|
||||||
|
module BackgroundMigration
|
||||||
|
class FillFileStoreBuildArchive
|
||||||
|
class Build < ActiveRecord::Base
|
||||||
|
self.table_name = 'ci_builds'
|
||||||
|
self.inheritance_column = :_type_disabled
|
||||||
|
end
|
||||||
|
|
||||||
|
def perform(start_id, stop_id)
|
||||||
|
FillFileStoreBuildArchive::Build
|
||||||
|
.where('artifacts_file_store = NULL')
|
||||||
|
.where(id: (start_id..stop_id))
|
||||||
|
.update_all(artifacts_file_store: 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,21 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
# rubocop:disable Metrics/AbcSize
|
||||||
|
# rubocop:disable Style/Documentation
|
||||||
|
|
||||||
|
module Gitlab
|
||||||
|
module BackgroundMigration
|
||||||
|
class FillFileStoreBuildMetadata
|
||||||
|
class Build < ActiveRecord::Base
|
||||||
|
self.table_name = 'ci_builds'
|
||||||
|
self.inheritance_column = :_type_disabled
|
||||||
|
end
|
||||||
|
|
||||||
|
def perform(start_id, stop_id)
|
||||||
|
FillFileStoreBuildMetadata::Build
|
||||||
|
.where('artifacts_metadata_store = NULL')
|
||||||
|
.where(id: (start_id..stop_id))
|
||||||
|
.update_all(artifacts_metadata_store: 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,20 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
# rubocop:disable Metrics/AbcSize
|
||||||
|
# rubocop:disable Style/Documentation
|
||||||
|
|
||||||
|
module Gitlab
|
||||||
|
module BackgroundMigration
|
||||||
|
class FillFileStoreJobArtifact
|
||||||
|
class JobArtifact < ActiveRecord::Base
|
||||||
|
self.table_name = 'ci_job_artifacts'
|
||||||
|
end
|
||||||
|
|
||||||
|
def perform(start_id, stop_id)
|
||||||
|
FillFileStoreJobArtifact::JobArtifact
|
||||||
|
.where('file_store = NULL')
|
||||||
|
.where(id: (start_id..stop_id))
|
||||||
|
.update_all(file_store: 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,20 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
# rubocop:disable Metrics/AbcSize
|
||||||
|
# rubocop:disable Style/Documentation
|
||||||
|
|
||||||
|
module Gitlab
|
||||||
|
module BackgroundMigration
|
||||||
|
class FillFileStoreLfsObject
|
||||||
|
class LfsObject < ActiveRecord::Base
|
||||||
|
self.table_name = 'lfs_objects'
|
||||||
|
end
|
||||||
|
|
||||||
|
def perform(start_id, stop_id)
|
||||||
|
FillFileStoreLfsObject::LfsObject
|
||||||
|
.where('file_store = NULL')
|
||||||
|
.where(id: (start_id..stop_id))
|
||||||
|
.update_all(file_store: 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
21
lib/gitlab/background_migration/fill_file_store_upload.rb
Normal file
21
lib/gitlab/background_migration/fill_file_store_upload.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
# rubocop:disable Metrics/AbcSize
|
||||||
|
# rubocop:disable Style/Documentation
|
||||||
|
|
||||||
|
module Gitlab
|
||||||
|
module BackgroundMigration
|
||||||
|
class FillFileStoreUpload
|
||||||
|
class Upload < ActiveRecord::Base
|
||||||
|
self.table_name = 'uploads'
|
||||||
|
self.inheritance_column = :_type_disabled
|
||||||
|
end
|
||||||
|
|
||||||
|
def perform(start_id, stop_id)
|
||||||
|
FillFileStoreUpload::Upload
|
||||||
|
.where('store = NULL')
|
||||||
|
.where(id: (start_id..stop_id))
|
||||||
|
.update_all(store: 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue