提交 764977a1 编写于 作者: S Shinya Maeda

Remove AddIndexToCiBuildsArtifactsFile. Add temporary index in background migration class.

上级 7728ab3f
class AddIndexToCiBuildsArtifactsFile < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
def up
# We add an temporary index to `ci_builds.artifacts_file` column to avoid statements timeout in legacy artifacts migrations
# This index is to be removed after we have cleaned up background migrations
# https://gitlab.com/gitlab-org/gitlab-ce/issues/46866
if Gitlab::Database.postgresql?
add_concurrent_index :ci_builds, :artifacts_file, where: "artifacts_file <> ''"
elsif Gitlab::Database.mysql?
add_concurrent_index :ci_builds, :artifacts_file, where: "artifacts_file <> ''", length: 20
end
end
def down
if Gitlab::Database.postgresql?
remove_concurrent_index :ci_builds, :artifacts_file, where: "artifacts_file <> ''"
elsif Gitlab::Database.mysql?
remove_concurrent_index :ci_builds, :artifacts_file, where: "artifacts_file <> ''", length: 20
end
end
end
......@@ -4,10 +4,28 @@ class MigrateLegacyArtifactsToJobArtifacts < ActiveRecord::Migration
DOWNTIME = false
MIGRATION = 'MigrateLegacyArtifacts'.freeze
BATCH_SIZE = 2000
TMP_INDEX = 'tmp_index_ci_builds_on_present_artifacts_file'.freeze
disable_ddl_transaction!
def up
##
# We add a temporary index to `artifacts_file`. Without having this,
# queries generated by `each_batch` by statement timeout.
#
# This is only neccessary when we collect target rows, because in backgroun migrartions
# it's filitered by `BETWEEN` clause (e.g. 'id BETWEEN 0 AND 2000'), so it's fast enough without this temporary index.
#
# Mysql doesn't support partial indexies. Also, it requires the index to specify `length` only if the type is `TEXT`, `VARCHAR`, etc.
# Therefore we need to treat this id generation differently by database type.
unless index_exists_by_name?(:ci_builds, TMP_INDEX)
if Gitlab::Database.postgresql?
add_concurrent_index :ci_builds, :artifacts_file, where: "artifacts_file <> ''", name: TMP_INDEX
elsif Gitlab::Database.mysql?
add_concurrent_index :ci_builds, :artifacts_file, length: 20, name: TMP_INDEX
end
end
::Gitlab::BackgroundMigration::MigrateLegacyArtifacts::Build
.with_legacy_artifacts.without_new_artifacts.tap do |relation|
queue_background_migration_jobs_by_range_at_intervals(relation,
......@@ -15,9 +33,13 @@ class MigrateLegacyArtifactsToJobArtifacts < ActiveRecord::Migration
5.minutes,
batch_size: BATCH_SIZE)
end
remove_concurrent_index_by_name(:ci_builds, TMP_INDEX)
end
def down
# no-op
if index_exists_by_name?(:ci_builds, TMP_INDEX)
remove_concurrent_index_by_name(:ci_builds, TMP_INDEX)
end
end
end
......@@ -331,7 +331,6 @@ ActiveRecord::Schema.define(version: 20180603190921) do
end
add_index "ci_builds", ["artifacts_expire_at"], name: "index_ci_builds_on_artifacts_expire_at", where: "(artifacts_file <> ''::text)", using: :btree
add_index "ci_builds", ["artifacts_file"], name: "index_ci_builds_on_artifacts_file", where: "(artifacts_file <> ''::text)", length: 20, using: :btree
add_index "ci_builds", ["auto_canceled_by_id"], name: "index_ci_builds_on_auto_canceled_by_id", using: :btree
add_index "ci_builds", ["commit_id", "stage_idx", "created_at"], name: "index_ci_builds_on_commit_id_and_stage_idx_and_created_at", using: :btree
add_index "ci_builds", ["commit_id", "status", "type"], name: "index_ci_builds_on_commit_id_and_status_and_type", using: :btree
......@@ -1233,7 +1232,6 @@ ActiveRecord::Schema.define(version: 20180603190921) do
t.integer "latest_merge_request_diff_id"
t.string "rebase_commit_sha"
t.boolean "allow_collaboration"
t.boolean "squash", default: false, null: false
end
add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册