[IMP] website_forum: delay the set_viewed
Try to make the update the latest possible, to minimize risk of concurrent update. Since it is not critical to loose a view, add the old value in where clause, to try to decrease the risk to alter at the same time a same row.
This commit is contained in:
@@ -235,8 +235,6 @@ class WebsiteForum(WebsiteProfile):
|
||||
if question.state == 'pending' and user.karma < forum.karma_post and question.create_uid != user:
|
||||
raise werkzeug.exceptions.NotFound()
|
||||
|
||||
# increment view counter
|
||||
question.sudo().set_viewed()
|
||||
if question.parent_id:
|
||||
redirect_url = "/forum/%s/question/%s" % (slug(forum), slug(question.parent_id))
|
||||
return werkzeug.utils.redirect(redirect_url, 301)
|
||||
@@ -252,6 +250,10 @@ class WebsiteForum(WebsiteProfile):
|
||||
})
|
||||
if (request.httprequest.referrer or "").startswith(request.httprequest.url_root):
|
||||
values['back_button_url'] = request.httprequest.referrer
|
||||
|
||||
# increment view counter
|
||||
question.sudo().set_viewed()
|
||||
|
||||
return request.render("website_forum.post_description_full", values)
|
||||
|
||||
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/toggle_favourite', type='json', auth="user", methods=['POST'], website=True)
|
||||
|
||||
@@ -838,7 +838,8 @@ class Post(models.Model):
|
||||
return result
|
||||
|
||||
def set_viewed(self):
|
||||
self._cr.execute("""UPDATE forum_post SET views = views+1 WHERE id IN %s""", (self._ids,))
|
||||
self.ensure_one()
|
||||
self._cr.execute("""UPDATE forum_post SET views = views+1 WHERE views = %s and id = %s""", (self.views, self.id,))
|
||||
return True
|
||||
|
||||
def get_access_action(self, access_uid=None):
|
||||
|
||||
Reference in New Issue
Block a user