diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2018-03-08 13:00:37 +0000 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2018-03-08 13:00:37 +0000 |
commit | f9dfe343927381cffc882cf25cbc6f42708834ee (patch) | |
tree | 9f0a1595283d68d996d4f795ade015b4f4ba053a /db | |
parent | d1a968d4b338d2d321f88336a3bc1e76a9a5da1f (diff) | |
parent | 3d4cfad43793d7055acdceec95477879b64e666b (diff) | |
download | gitlab-ce-f9dfe343927381cffc882cf25cbc6f42708834ee.tar.gz |
Merge branch '43802-ensure-foreign-keys-on-clusters-applications' into 'master'
Resolve "Add missing foreign key constraint in clusters_applications_ingress"
Closes #43802
See merge request gitlab-org/gitlab-ce!17488
Diffstat (limited to 'db')
-rw-r--r-- | db/migrate/20180302152117_ensure_foreign_keys_on_clusters_applications.rb | 50 | ||||
-rw-r--r-- | db/schema.rb | 2 |
2 files changed, 52 insertions, 0 deletions
diff --git a/db/migrate/20180302152117_ensure_foreign_keys_on_clusters_applications.rb b/db/migrate/20180302152117_ensure_foreign_keys_on_clusters_applications.rb new file mode 100644 index 00000000000..8298979e96a --- /dev/null +++ b/db/migrate/20180302152117_ensure_foreign_keys_on_clusters_applications.rb @@ -0,0 +1,50 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class EnsureForeignKeysOnClustersApplications < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + existing = Clusters::Cluster + .joins(:application_ingress) + .where('clusters.id = clusters_applications_ingress.cluster_id') + + Clusters::Applications::Ingress.where('NOT EXISTS (?)', existing).in_batches do |batch| + batch.delete_all + end + + unless foreign_keys_for(:clusters_applications_ingress, :cluster_id).any? + add_concurrent_foreign_key :clusters_applications_ingress, :clusters, + column: :cluster_id, + on_delete: :cascade + end + + existing = Clusters::Cluster + .joins(:application_prometheus) + .where('clusters.id = clusters_applications_prometheus.cluster_id') + + Clusters::Applications::Ingress.where('NOT EXISTS (?)', existing).in_batches do |batch| + batch.delete_all + end + + unless foreign_keys_for(:clusters_applications_prometheus, :cluster_id).any? + add_concurrent_foreign_key :clusters_applications_prometheus, :clusters, + column: :cluster_id, + on_delete: :cascade + end + end + + def down + if foreign_keys_for(:clusters_applications_ingress, :cluster_id).any? + remove_foreign_key :clusters_applications_ingress, column: :cluster_id + end + + if foreign_keys_for(:clusters_applications_prometheus, :cluster_id).any? + remove_foreign_key :clusters_applications_prometheus, column: :cluster_id + end + end +end diff --git a/db/schema.rb b/db/schema.rb index bfd4d2ef38f..75a094bbbb6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -2032,6 +2032,8 @@ ActiveRecord::Schema.define(version: 20180308052825) do add_foreign_key "cluster_providers_gcp", "clusters", on_delete: :cascade add_foreign_key "clusters", "users", on_delete: :nullify add_foreign_key "clusters_applications_helm", "clusters", on_delete: :cascade + add_foreign_key "clusters_applications_ingress", "clusters", name: "fk_753a7b41c1", on_delete: :cascade + add_foreign_key "clusters_applications_prometheus", "clusters", name: "fk_557e773639", on_delete: :cascade add_foreign_key "clusters_applications_runners", "ci_runners", column: "runner_id", name: "fk_02de2ded36", on_delete: :nullify add_foreign_key "clusters_applications_runners", "clusters", on_delete: :cascade add_foreign_key "container_repositories", "projects" |