From 83559bbf458cbef1e4a52dc3bd0702cd7f0d311b Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Mon, 1 Jun 2015 11:55:07 +1000 Subject: [PATCH] posts read may enter concurrently, retry --- app/models/user.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 8500f4973f1..0b528cbefeb 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -373,13 +373,21 @@ class User < ActiveRecord::Base create_visit_record!(date) unless visit_record_for(date) end - def update_posts_read!(num_posts, now=Time.zone.now) + def update_posts_read!(num_posts, now=Time.zone.now, _retry=false) if user_visit = visit_record_for(now.to_date) user_visit.posts_read += num_posts user_visit.save user_visit else - create_visit_record!(now.to_date, num_posts) + begin + create_visit_record!(now.to_date, num_posts) + rescue ActiveRecord::RecordNotUnique + if !_retry + update_posts_read!(num_posts, now, _retry=true) + else + raise + end + end end end