Skip to content
Snippets Groups Projects
Commit d0db9849 authored by Florent de Labarre's avatar Florent de Labarre
Browse files

[FIX] website : prevent bad query


In database with front end, there are lot of bad query like this:
bad query: UPDATE "website_visitor" SET "timezone"='Europe/Paris',"write_uid"=116,"write_date"=(now() at time zone 'UTC') WHERE id IN (15414)

closes odoo/odoo#70507

Error: Could not serialize access due to concurrent update
Signed-off-by: default avatarThibault Delavallee (tde) <tde@openerp.com>
parent d1e49723
No related branches found
No related tags found
No related merge requests found
......@@ -192,7 +192,7 @@ class WebsiteVisitor(models.Model):
if visitor and not visitor.timezone:
tz = self._get_visitor_timezone()
if tz:
visitor.timezone = tz
visitor._update_visitor_timezone(tz)
if not visitor and force_create:
visitor = self._create_visitor()
......@@ -291,6 +291,17 @@ class WebsiteVisitor(models.Model):
deadline = datetime.now() - timedelta(days=delay_days)
visitors_to_archive = self.env['website.visitor'].sudo().search([('last_connection_datetime', '<', deadline)])
visitors_to_archive.write({'active': False})
def _update_visitor_timezone(self, timezone):
""" We need to do this part here to avoid concurrent updates error. """
try:
with self.env.cr.savepoint():
query_lock = "SELECT * FROM website_visitor where id = %s FOR NO KEY UPDATE NOWAIT"
self.env.cr.execute(query_lock, (self.id,), log_exceptions=False)
query = "UPDATE website_visitor SET timezone = %s WHERE id = %s"
self.env.cr.execute(query, (timezone, self.id), log_exceptions=False)
except Exception:
pass
def _update_visitor_last_visit(self):
""" We need to do this part here to avoid concurrent updates error. """
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment