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
This commit is contained in:
parent
c856a7a593
commit
ca3ce5c26c
|
@ -5,6 +5,7 @@ v 8.2.0 (unreleased)
|
|||
- Highlight comment based on anchor in URL
|
||||
|
||||
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)
|
||||
- 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)
|
||||
|
|
|
@ -706,12 +706,15 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def toggle_star(project)
|
||||
user_star_project = users_star_projects.
|
||||
where(project: project, user: self).take
|
||||
if user_star_project
|
||||
user_star_project.destroy
|
||||
else
|
||||
UsersStarProject.create!(project: project, user: self)
|
||||
UsersStarProject.transaction do
|
||||
user_star_project = users_star_projects.
|
||||
where(project: project, user: self).lock(true).first
|
||||
|
||||
if user_star_project
|
||||
user_star_project.destroy
|
||||
else
|
||||
UsersStarProject.create!(project: project, user: self)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue