From 2e564ddfc7ac500b72051d56b9a6b37979296c0e Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Fri, 22 Sep 2017 22:26:48 -0400 Subject: [PATCH] Fix duplicate key errors in PostDeployMigrateUserExternalMailData migration `email_provider` by default is NULL, and if a user had not logged the value would remain NULL. Upgrading to GitLab 10.0 would lead to a PG::UniqueViolation because the post-deploy migration would attempt to reinsert the entry because the NULL comparison between `users.email_provider` and `user_synced_attributes_metadata.email_provider` would never match. Closes #38246 --- changelogs/unreleased/sh-fix-issue-38246.yml | 5 +++++ db/migrate/20170828135939_migrate_user_external_mail_data.rb | 2 +- ...0828170502_post_deploy_migrate_user_external_mail_data.rb | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/sh-fix-issue-38246.yml diff --git a/changelogs/unreleased/sh-fix-issue-38246.yml b/changelogs/unreleased/sh-fix-issue-38246.yml new file mode 100644 index 00000000000..8a127559fbb --- /dev/null +++ b/changelogs/unreleased/sh-fix-issue-38246.yml @@ -0,0 +1,5 @@ +--- +title: Fix duplicate key errors in PostDeployMigrateUserExternalMailData migration +merge_request: +author: +type: fixed diff --git a/db/migrate/20170828135939_migrate_user_external_mail_data.rb b/db/migrate/20170828135939_migrate_user_external_mail_data.rb index 592e141b7e6..395181a3b22 100644 --- a/db/migrate/20170828135939_migrate_user_external_mail_data.rb +++ b/db/migrate/20170828135939_migrate_user_external_mail_data.rb @@ -33,7 +33,7 @@ class MigrateUserExternalMailData < ActiveRecord::Migration SELECT true FROM user_synced_attributes_metadata WHERE user_id = users.id - AND provider = users.email_provider + AND provider = users.email_provider OR (provider IS NULL AND users.email_provider IS NULL) ) AND id BETWEEN #{start_id} AND #{end_id} EOF diff --git a/db/post_migrate/20170828170502_post_deploy_migrate_user_external_mail_data.rb b/db/post_migrate/20170828170502_post_deploy_migrate_user_external_mail_data.rb index fefd931e5d2..a475b242921 100644 --- a/db/post_migrate/20170828170502_post_deploy_migrate_user_external_mail_data.rb +++ b/db/post_migrate/20170828170502_post_deploy_migrate_user_external_mail_data.rb @@ -33,7 +33,7 @@ class PostDeployMigrateUserExternalMailData < ActiveRecord::Migration SELECT true FROM user_synced_attributes_metadata WHERE user_id = users.id - AND provider = users.email_provider + AND provider = users.email_provider OR (provider IS NULL AND users.email_provider IS NULL) ) AND id BETWEEN #{start_id} AND #{end_id} EOF