forked from Techsystech/web
[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 startup14.0
parent
99940c6f90
commit
12ff724473
|
@ -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():
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
* Sébastien Alix <sebastien.alix@camptocamp.com>
|
||||
* Michael Tietz (MT Software) <mtietz@mt-software.de>
|
||||
|
|
Loading…
Reference in New Issue