Commit ca3ce5c2 authored by Stan Hu's avatar Stan Hu

Fix nonatomic database update potentially causing project star counts to go negative

The counter_cache decrement function is called when a project star is deleted,
but there was no guarantee multiple workers would not attempt to delete the
same item simultaneously. Use an atomic update to prevent the count from going negative.

Closes #3067
parent c856a7a5
...@@ -5,6 +5,7 @@ v 8.2.0 (unreleased) ...@@ -5,6 +5,7 @@ v 8.2.0 (unreleased)
- Highlight comment based on anchor in URL - Highlight comment based on anchor in URL
v 8.1.0 (unreleased) v 8.1.0 (unreleased)
- Fix nonatomic database update potentially causing project star counts to go negative (Stan Hu)
- Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu) - Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu)
- Speed up load times of issue detail pages by roughly 1.5x - Speed up load times of issue detail pages by roughly 1.5x
- Add a system note and update relevant merge requests when a branch is deleted or re-added (Stan Hu) - Add a system note and update relevant merge requests when a branch is deleted or re-added (Stan Hu)
......
...@@ -706,14 +706,17 @@ class User < ActiveRecord::Base ...@@ -706,14 +706,17 @@ class User < ActiveRecord::Base
end end
def toggle_star(project) def toggle_star(project)
UsersStarProject.transaction do
user_star_project = users_star_projects. user_star_project = users_star_projects.
where(project: project, user: self).take where(project: project, user: self).lock(true).first
if user_star_project if user_star_project
user_star_project.destroy user_star_project.destroy
else else
UsersStarProject.create!(project: project, user: self) UsersStarProject.create!(project: project, user: self)
end end
end end
end
def manageable_namespaces def manageable_namespaces
@manageable_namespaces ||= [namespace] + owned_groups + masters_groups @manageable_namespaces ||= [namespace] + owned_groups + masters_groups
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment