Skip to content
Snippets Groups Projects
Commit 764977a1 authored by Shinya Maeda's avatar Shinya Maeda
Browse files

Remove AddIndexToCiBuildsArtifactsFile. Add temporary index in background migration class.

parent 7728ab3f
No related branches found
No related tags found
No related merge requests found
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
Loading
Loading
@@ -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,
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment