summaryrefslogtreecommitdiff
path: root/db/post_migrate/20170106172224_remove_project_authorizations_id_column.rb
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-01-06 18:26:06 +0100
committerYorick Peterse <yorickpeterse@gmail.com>2017-01-08 13:56:50 +0100
commitde321fbbb55dab5bee8dc344d458230b74570d5d (patch)
treebf3d477a0c19e16f0b0c44a109308827e2ff69ad /db/post_migrate/20170106172224_remove_project_authorizations_id_column.rb
parent2dec1772f537ab607ff167cfb43b5ed5c99d5522 (diff)
downloadgitlab-ce-de321fbbb55dab5bee8dc344d458230b74570d5d.tar.gz
Remove the project_authorizations.id columnremove-project-authorizations-id-column
This column used to be a 32 bits integer, allowing for only a maximum of 2 147 483 647 rows. Given enough users one can hit this limit pretty quickly, as was the case for GitLab.com. Changing this type to bigint (= 64 bits) would give us more space, but we'd eventually hit the same limit given enough users and projects. A much more sustainable solution is to simply drop the "id" column. There were only 2 lines of code depending on this column being present, and neither truly required it to be present. Instead the code now uses the "project_id" column combined with the "user_id" column. This means that instead of something like this: DELETE FROM project_authorizations WHERE user_id = X AND id = Y; We now run the following when removing rows: DELETE FROM project_authorizations WHERE user_id = X AND project_id = Y; Since both user_id and project_id are indexed this should not slow down the DELETE query. This commit also removes the "dependent: destroy" clause from the "project_authorizations" relation in the User and Project models. Keeping this prevents Rails from being able to remove data as it relies on an "id" column being present. Since the "project_authorizations" table has proper foreign keys set up (with cascading removals) we don't need to depend on any Rails logic.
Diffstat (limited to 'db/post_migrate/20170106172224_remove_project_authorizations_id_column.rb')
-rw-r--r--db/post_migrate/20170106172224_remove_project_authorizations_id_column.rb12
1 files changed, 12 insertions, 0 deletions
diff --git a/db/post_migrate/20170106172224_remove_project_authorizations_id_column.rb b/db/post_migrate/20170106172224_remove_project_authorizations_id_column.rb
new file mode 100644
index 00000000000..7c788160022
--- /dev/null
+++ b/db/post_migrate/20170106172224_remove_project_authorizations_id_column.rb
@@ -0,0 +1,12 @@
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class RemoveProjectAuthorizationsIdColumn < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def change
+ remove_column :project_authorizations, :id, :primary_key
+ end
+end