3
0
Fork 0

[IMP] web_assets_warmup: Add database lock in post_load_hook

With dedicated services for odoo web and odoo cron
we can get a serialize access error on startup
14.0
Michael Tietz 2023-10-04 06:59:40 +02:00 committed by Jacques-Etienne Baudoux
parent 99940c6f90
commit 12ff724473
2 changed files with 33 additions and 14 deletions

View File

@ -1,9 +1,12 @@
# Copyright 2020 Camptocamp SA # Copyright 2020 Camptocamp SA
# Copyright 2023 Michael Tietz (MT Software) <mtietz@mt-software.de>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
import logging import logging
import os import os
import psycopg2
from odoo import fields, registry from odoo import fields, registry
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -32,20 +35,35 @@ def active_cron_assets():
model, res_id = row model, res_id = row
if model != "ir.cron": if model != "ir.cron":
return return
query = """ # if there is already someone doing the same or already being executed
UPDATE ir_cron # we can skip the update of ir_cron
SET active=true, nextcall=%s, priority=%s try:
WHERE id=%s with cr.savepoint():
""" cr.execute(
nextcall = fields.Datetime.to_string(fields.Datetime.now()) "SELECT * FROM ir_cron WHERE id = %s FOR UPDATE NOWAIT;",
args = (nextcall, -99, res_id) (res_id,),
cr.execute(query, args) )
logger.info( query = """
"Cron '%s.%s' planned for execution at %s", UPDATE ir_cron
cron_module, SET active=true, nextcall=%s, priority=%s
cron_ref, WHERE id=%s
nextcall, """
) nextcall = fields.Datetime.to_string(fields.Datetime.now())
args = (nextcall, -99, res_id)
cr.execute(query, args)
logger.info(
"Cron '%s.%s' planned for execution at %s",
cron_module,
cron_ref,
nextcall,
)
except psycopg2.OperationalError as e:
if e.pgcode == "55P03":
logger.info(
"Cron '%s.%s' is currently being executed or updated",
cron_module,
cron_ref,
)
def post_load_hook(): def post_load_hook():

View File

@ -1 +1,2 @@
* Sébastien Alix <sebastien.alix@camptocamp.com> * Sébastien Alix <sebastien.alix@camptocamp.com>
* Michael Tietz (MT Software) <mtietz@mt-software.de>