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