Improve indexes and refs in pipeline stages migrations

This commit is contained in:
Grzegorz Bizon 2017-06-06 14:10:50 +02:00
parent cc1e2a2bef
commit 8e071f2809
5 changed files with 31 additions and 43 deletions

View File

@ -3,12 +3,23 @@ class CreatePipelineStages < ActiveRecord::Migration
DOWNTIME = false
def change
disable_ddl_transaction!
def up
create_table :ci_stages do |t|
t.integer :project_id
t.integer :pipeline_id
t.timestamps null: true
t.string :name
end
add_concurrent_foreign_key :ci_stages, :projects, column: :project_id, on_delete: :cascade
add_concurrent_foreign_key :ci_stages, :ci_pipelines, column: :pipeline_id, on_delete: :cascade
add_concurrent_index :ci_stages, :project_id
add_concurrent_index :ci_stages, :pipeline_id
end
def down
drop_table :ci_stages
end
end

View File

@ -3,7 +3,19 @@ class AddStageIdToCiBuilds < ActiveRecord::Migration
DOWNTIME = false
def change
disable_ddl_transaction!
def up
add_column :ci_builds, :stage_id, :integer
add_concurrent_foreign_key :ci_builds, :ci_stages, column: :stage_id, on_delete: :cascade
add_concurrent_index :ci_builds, :stage_id
end
def down
remove_concurrent_index :ci_builds, :stage_id
remove_foreign_key :ci_builds, column: :stage_id
remove_column :ci_builds, :stage_id, :integer
end
end

View File

@ -16,8 +16,4 @@ class MigratePipelineStages < ActiveRecord::Migration
ORDER BY MAX(stage_idx)
SQL
end
def down
execute('TRUNCATE TABLE ci_stages')
end
end

View File

@ -1,35 +0,0 @@
class CreateForeignKeysForPipelineStages < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
def up
disable_statement_timeout
execute <<~SQL
DELETE FROM ci_stages
WHERE NOT EXISTS (
SELECT true FROM projects
WHERE projects.id = ci_stages.project_id
)
SQL
execute <<~SQL
DELETE FROM ci_builds
WHERE NOT EXISTS (
SELECT true FROM ci_stages
WHERE ci_stages.id = ci_builds.stage_id
)
SQL
add_concurrent_foreign_key :ci_stages, :projects, column: :project_id, on_delete: :cascade
add_concurrent_foreign_key :ci_builds, :ci_stages, column: :stage_id, on_delete: :cascade
end
def down
remove_foreign_key :ci_stages, column: :project_id
remove_foreign_key :ci_builds, column: :stage_id
end
end

View File

@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170526190708) do
ActiveRecord::Schema.define(version: 20170526185921) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -243,6 +243,7 @@ ActiveRecord::Schema.define(version: 20170526190708) do
add_index "ci_builds", ["commit_id", "type", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_ref", using: :btree
add_index "ci_builds", ["project_id"], name: "index_ci_builds_on_project_id", using: :btree
add_index "ci_builds", ["runner_id"], name: "index_ci_builds_on_runner_id", using: :btree
add_index "ci_builds", ["stage_id"], name: "index_ci_builds_on_stage_id", using: :btree
add_index "ci_builds", ["status", "type", "runner_id"], name: "index_ci_builds_on_status_and_type_and_runner_id", using: :btree
add_index "ci_builds", ["status"], name: "index_ci_builds_on_status", using: :btree
add_index "ci_builds", ["token"], name: "index_ci_builds_on_token", unique: true, using: :btree
@ -330,12 +331,14 @@ ActiveRecord::Schema.define(version: 20170526190708) do
create_table "ci_stages", force: :cascade do |t|
t.integer "project_id"
t.integer "pipeline_id"
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.string "name"
end
add_index "ci_stages", ["pipeline_id", "name"], name: "index_ci_stages_on_pipeline_id_and_name", using: :btree
add_index "ci_stages", ["pipeline_id"], name: "index_ci_stages_on_pipeline_id", using: :btree
add_index "ci_stages", ["project_id"], name: "index_ci_stages_on_project_id", using: :btree
create_table "ci_trigger_requests", force: :cascade do |t|
t.integer "trigger_id", null: false
@ -1497,6 +1500,7 @@ ActiveRecord::Schema.define(version: 20170526190708) do
add_foreign_key "ci_pipeline_schedules", "users", column: "owner_id", name: "fk_9ea99f58d2", on_delete: :nullify
add_foreign_key "ci_pipelines", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_3d34ab2e06", on_delete: :nullify
add_foreign_key "ci_pipelines", "ci_pipelines", column: "auto_canceled_by_id", name: "fk_262d4c2d19", on_delete: :nullify
add_foreign_key "ci_stages", "ci_pipelines", column: "pipeline_id", name: "fk_fb57e6cc56", on_delete: :cascade
add_foreign_key "ci_stages", "projects", name: "fk_2360681d1d", on_delete: :cascade
add_foreign_key "ci_trigger_requests", "ci_triggers", column: "trigger_id", name: "fk_b8ec8b7245", on_delete: :cascade
add_foreign_key "ci_triggers", "users", column: "owner_id", name: "fk_e8e10d1964", on_delete: :cascade