diff options
| author | Christophe Simonis <chs@odoo.com> | 2017-12-06 12:02:58 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2017-12-06 12:02:58 +0100 |
| commit | 8ef7af6afe54fbd59051bbbce76daadd6fdb0e86 (patch) | |
| tree | b21971e972eacc87e198fbc38b48ac9b70d168fc /odoo/addons/base/models | |
| parent | 010add290342ae1e2887450a381e0d1f0acd34e5 (diff) | |
| parent | f96a797fe6238306ec70d3db013b8a4d348ef181 (diff) | |
[MERGE] forward port branch 11.0 up to f96a797fe62
Diffstat (limited to 'odoo/addons/base/models')
| -rw-r--r-- | odoo/addons/base/models/ir_cron.py | 18 | ||||
| -rw-r--r-- | odoo/addons/base/models/ir_mail_server.py | 2 |
2 files changed, 17 insertions, 3 deletions
diff --git a/odoo/addons/base/models/ir_cron.py b/odoo/addons/base/models/ir_cron.py index 2aa7a1e2773..375d9a966da 100644 --- a/odoo/addons/base/models/ir_cron.py +++ b/odoo/addons/base/models/ir_cron.py @@ -5,7 +5,7 @@ import threading import time import psycopg2 import pytz -from datetime import datetime +from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta import odoo @@ -15,6 +15,7 @@ from odoo.exceptions import UserError _logger = logging.getLogger(__name__) BASE_VERSION = odoo.modules.load_information_from_description_file('base')['version'] +MAX_FAIL_TIME = timedelta(hours=5) # chosen with a fair roll of the dice class BadVersion(Exception): @@ -170,7 +171,7 @@ class ir_cron(models.Model): (version,) = cr.fetchone() cr.execute("SELECT COUNT(*) FROM ir_module_module WHERE state LIKE %s", ['to %']) (changes,) = cr.fetchone() - if not version or changes: + if version is None: raise BadModuleState() elif version != BASE_VERSION: raise BadVersion() @@ -181,6 +182,19 @@ class ir_cron(models.Model): ORDER BY priority""") jobs = cr.dictfetchall() + if changes: + if not jobs: + raise BadModuleState() + # nextcall is never updated if the cron is not executed, + # it is used as a sentinel value to check whether cron jobs + # have been locked for a long time (stuck) + parse = fields.Datetime.from_string + oldest = min([parse(job['nextcall']) for job in jobs]) + if datetime.now() - oldest > MAX_FAIL_TIME: + odoo.modules.reset_modules_state(db_name) + else: + raise BadModuleState() + for job in jobs: lock_cr = db.cursor() try: diff --git a/odoo/addons/base/models/ir_mail_server.py b/odoo/addons/base/models/ir_mail_server.py index 639d411045b..0a08993d639 100644 --- a/odoo/addons/base/models/ir_mail_server.py +++ b/odoo/addons/base/models/ir_mail_server.py @@ -61,7 +61,7 @@ def encode_header(header_text): header_text = ustr(header_text) # FIXME: require unicode higher up? if is_ascii(header_text): return pycompat.to_native(header_text) - Header(header_text, 'utf-8') + return Header(header_text, 'utf-8') def encode_header_param(param_text): """Returns an appropriate RFC2047 encoded representation of the given |
