Welcome to mirror list, hosted at ThFree Co, Russian Federation.

20230615144627_remove_temporary_container_repository_indexes.rb « post_migrate « db - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c4d01f35607cc17085dcef37d3bd7458f7b23821 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# frozen_string_literal: true

class RemoveTemporaryContainerRepositoryIndexes < Gitlab::Database::Migration[2.1]
  INDEX_CONTAINER_REPOS_ON_NON_MIGRATED = 'tmp_index_container_repos_on_non_migrated'
  INDEX_CONTAINER_REPOSITORIES_ON_ID_MIGRATION_STATE = 'tmp_index_container_repositories_on_id_migration_state'
  INDEX_MIGRATED_CONTAINER_REGISTRIES = 'tmp_index_migrated_container_registries'
  INDEX_CONTAINER_REPOS_ON_IMPORT_STARTED_AT_WHEN_IMPORTING = 'idx_container_repos_on_import_started_at_when_importing'
  INDEX_CONTAINER_REPOS_ON_MIGRATION_STATE_MIGRATION_PLAN_CREATED =
    'idx_container_repos_on_migration_state_migration_plan_created'
  INDEX_CONTAINER_REPOS_ON_PRE_IMPORT_DONE_AT_WHEN_PRE_IMPORT_DONE =
    'idx_container_repos_on_pre_import_done_at_when_pre_import_done'
  INDEX_CONTAINER_REPOS_ON_PRE_IMPORT_STARTED_AT_WHEN_PRE_IMPORTING =
    'idx_container_repos_on_pre_import_started_at_when_pre_importing'
  INDEX_CONTAINER_REPOSITORIES_ON_GREATEST_COMPLETED_AT = 'index_container_repositories_on_greatest_completed_at'
  INDEX_CONTAINER_REPOSITORIES_ON_MIGRATION_STATE_IMPORT_DONE_AT =
    'index_container_repositories_on_migration_state_import_done_at'

  disable_ddl_transaction!

  def up
    remove_concurrent_index_by_name :container_repositories, INDEX_CONTAINER_REPOS_ON_NON_MIGRATED
    remove_concurrent_index_by_name :container_repositories, INDEX_CONTAINER_REPOSITORIES_ON_ID_MIGRATION_STATE
    remove_concurrent_index_by_name :container_repositories, INDEX_MIGRATED_CONTAINER_REGISTRIES
    remove_concurrent_index_by_name :container_repositories, INDEX_CONTAINER_REPOS_ON_IMPORT_STARTED_AT_WHEN_IMPORTING
    remove_concurrent_index_by_name :container_repositories,
      INDEX_CONTAINER_REPOS_ON_MIGRATION_STATE_MIGRATION_PLAN_CREATED
    remove_concurrent_index_by_name :container_repositories,
      INDEX_CONTAINER_REPOS_ON_PRE_IMPORT_DONE_AT_WHEN_PRE_IMPORT_DONE
    remove_concurrent_index_by_name :container_repositories,
      INDEX_CONTAINER_REPOS_ON_PRE_IMPORT_STARTED_AT_WHEN_PRE_IMPORTING
    remove_concurrent_index_by_name :container_repositories, INDEX_CONTAINER_REPOSITORIES_ON_GREATEST_COMPLETED_AT
    remove_concurrent_index_by_name :container_repositories,
      INDEX_CONTAINER_REPOSITORIES_ON_MIGRATION_STATE_IMPORT_DONE_AT
  end

  def down
    add_concurrent_index :container_repositories,
      [:project_id, :id],
      name: INDEX_CONTAINER_REPOS_ON_NON_MIGRATED,
      where: "migration_state != 'import_done'"

    add_concurrent_index :container_repositories,
      [:id, :migration_state],
      name: INDEX_CONTAINER_REPOSITORIES_ON_ID_MIGRATION_STATE

    add_concurrent_index :container_repositories,
      [:project_id],
      name: INDEX_MIGRATED_CONTAINER_REGISTRIES,
      where: "migration_state = 'import_done' OR created_at >= '2022-01-23'"

    add_concurrent_index :container_repositories,
      [:migration_import_started_at],
      name: INDEX_CONTAINER_REPOS_ON_IMPORT_STARTED_AT_WHEN_IMPORTING,
      where: "migration_state = 'importing'::text"

    add_concurrent_index :container_repositories,
      [:migration_state, :migration_plan, :created_at],
      name: INDEX_CONTAINER_REPOS_ON_MIGRATION_STATE_MIGRATION_PLAN_CREATED

    add_concurrent_index :container_repositories,
      [:migration_pre_import_done_at],
      name: INDEX_CONTAINER_REPOS_ON_PRE_IMPORT_DONE_AT_WHEN_PRE_IMPORT_DONE,
      where: "migration_state = 'pre_import_done'::text"

    add_concurrent_index :container_repositories,
      [:migration_pre_import_started_at],
      name: INDEX_CONTAINER_REPOS_ON_PRE_IMPORT_STARTED_AT_WHEN_PRE_IMPORTING,
      where: "migration_state = 'pre_importing'::text"

    execute(
      <<-SQL
        CREATE INDEX CONCURRENTLY #{INDEX_CONTAINER_REPOSITORIES_ON_GREATEST_COMPLETED_AT} ON container_repositories
        USING btree (GREATEST(migration_pre_import_done_at, migration_import_done_at, migration_aborted_at, migration_skipped_at))
        WHERE (migration_state = ANY (ARRAY['import_done'::text, 'pre_import_done'::text, 'import_aborted'::text, 'import_skipped'::text]));
      SQL
    )

    add_concurrent_index :container_repositories,
      [:migration_state, :migration_import_done_at],
      name: INDEX_CONTAINER_REPOSITORIES_ON_MIGRATION_STATE_IMPORT_DONE_AT
  end
end