about summary refs log tree commit diff
path: root/app/models/poll_vote.rb
diff options
context:
space:
mode:
authorThibG <thib@sitedethib.com>2019-03-06 19:53:57 +0100
committerEugen Rochko <eugen@zeonfederated.com>2019-03-06 19:53:57 +0100
commit96f905f40913b915496039d188297a7949b1a6db (patch)
tree54111b6c1ee941cd261cf01c630711787b25c1d3 /app/models/poll_vote.rb
parentb3668a79eca2d185ea57a9ffc2fa012db52e49f0 (diff)
Add optimistic lock to avoid race conditions when handling votes (#10196)
* Add optimistic lock to avoid race conditions when handling votes

* Force-reload polls when getting `ActiveRecord::StaleObjectError`
Diffstat (limited to 'app/models/poll_vote.rb')
-rw-r--r--app/models/poll_vote.rb3
1 files changed, 3 insertions, 0 deletions
diff --git a/app/models/poll_vote.rb b/app/models/poll_vote.rb
index 9ad66bbf8..ad24eb691 100644
--- a/app/models/poll_vote.rb
+++ b/app/models/poll_vote.rb
@@ -32,5 +32,8 @@ class PollVote < ApplicationRecord
   def increment_counter_cache
     poll.cached_tallies[choice] = (poll.cached_tallies[choice] || 0) + 1
     poll.save
+  rescue ActiveRecord::StaleObjectError
+    poll.reload
+    retry
   end
 end