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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-01-06 20:26:06 +0300
committerYorick Peterse <yorickpeterse@gmail.com>2017-01-08 15:56:50 +0300
commitde321fbbb55dab5bee8dc344d458230b74570d5d (patch)
treebf3d477a0c19e16f0b0c44a109308827e2ff69ad /spec/services/users/refresh_authorized_projects_service_spec.rb
parent2dec1772f537ab607ff167cfb43b5ed5c99d5522 (diff)
Remove the 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 'spec/services/users/refresh_authorized_projects_service_spec.rb')
-rw-r--r--spec/services/users/refresh_authorized_projects_service_spec.rb17
1 files changed, 9 insertions, 8 deletions
diff --git a/spec/services/users/refresh_authorized_projects_service_spec.rb b/spec/services/users/refresh_authorized_projects_service_spec.rb
index 1f6919151de..9fbb61565e3 100644
--- a/spec/services/users/refresh_authorized_projects_service_spec.rb
+++ b/spec/services/users/refresh_authorized_projects_service_spec.rb
@@ -20,7 +20,7 @@ describe Users::RefreshAuthorizedProjectsService do
to_remove = create_authorization(project2, user)
expect(service).to receive(:update_with_lease).
- with([to_remove.id], [[user.id, project.id, Gitlab::Access::MASTER]])
+ with([to_remove.project_id], [[user.id, project.id, Gitlab::Access::MASTER]])
service.execute
end
@@ -29,7 +29,7 @@ describe Users::RefreshAuthorizedProjectsService do
to_remove = create_authorization(project, user, Gitlab::Access::DEVELOPER)
expect(service).to receive(:update_with_lease).
- with([to_remove.id], [[user.id, project.id, Gitlab::Access::MASTER]])
+ with([to_remove.project_id], [[user.id, project.id, Gitlab::Access::MASTER]])
service.execute
end
@@ -90,7 +90,7 @@ describe Users::RefreshAuthorizedProjectsService do
it 'removes authorizations that should be removed' do
authorization = create_authorization(project, user)
- service.update_authorizations([authorization.id])
+ service.update_authorizations([authorization.project_id])
expect(user.project_authorizations).to be_empty
end
@@ -147,7 +147,12 @@ describe Users::RefreshAuthorizedProjectsService do
end
it 'sets the values to the project authorization rows' do
- expect(hash.values).to eq([ProjectAuthorization.first])
+ expect(hash.values.length).to eq(1)
+
+ value = hash.values[0]
+
+ expect(value.project_id).to eq(project.id)
+ expect(value.access_level).to eq(Gitlab::Access::MASTER)
end
end
@@ -167,10 +172,6 @@ describe Users::RefreshAuthorizedProjectsService do
expect(service.current_authorizations.length).to eq(1)
end
- it 'includes the row ID for every row' do
- expect(row.id).to be_a_kind_of(Numeric)
- end
-
it 'includes the project ID for every row' do
expect(row.project_id).to eq(project.id)
end