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 2023 Michael Tietz (MT Software) <mtietz@mt-software.de>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
import logging
import os
import psycopg2
from odoo import fields, registry
logger = logging.getLogger(__name__)
@ -32,20 +35,35 @@ def active_cron_assets():
model, res_id = row
if model != "ir.cron":
return
query = """
UPDATE ir_cron
SET active=true, nextcall=%s, priority=%s
WHERE id=%s
"""
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,
)
# if there is already someone doing the same or already being executed
# we can skip the update of ir_cron
try:
with cr.savepoint():
cr.execute(
"SELECT * FROM ir_cron WHERE id = %s FOR UPDATE NOWAIT;",
(res_id,),
)
query = """
UPDATE ir_cron
SET active=true, nextcall=%s, priority=%s
WHERE id=%s
"""
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():

View File

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