From 79e900d73d93ed89b9a843ab7b9384a18ee2bbee Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Fri, 14 Dec 2018 16:42:25 +0100 Subject: [PATCH 1/2] [10.0][IMP] queue_job: Don't prefetch fields to vacuum --- queue_job/models/queue_job.py | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/queue_job/models/queue_job.py b/queue_job/models/queue_job.py index 01613b8e7c..7332c7d3b3 100644 --- a/queue_job/models/queue_job.py +++ b/queue_job/models/queue_job.py @@ -5,7 +5,8 @@ import logging from datetime import datetime, timedelta -from odoo import models, fields, api, exceptions, _ +from odoo import models, fields, api, exceptions, registry, _ +from psycopg2 import OperationalError from ..job import STATES, DONE, PENDING, Job from ..fields import JobSerialized @@ -220,16 +221,34 @@ def _needaction_domain_get(self): return [('state', '=', 'failed')] @api.model - def autovacuum(self): + def autovacuum(self, jobs_set=1000, use_new_cursor=False): """ Delete all jobs done since more than ``_removal_interval`` days. - + Uses sets of jobs to ensure that no timeout occurs Called from a cron. """ + job_obj = self.env['queue.job'] deadline = datetime.now() - timedelta(days=self._removal_interval) - jobs = self.search( + jobs_ids = self.search( [('date_done', '<=', fields.Datetime.to_string(deadline))], - ) - jobs.unlink() + ).ids + + while jobs_ids: + if use_new_cursor: + cr = registry(self._cr.dbname).cursor() + self = self.with_env(self.env(cr=cr)) + try: + jobs = job_obj.browse(jobs_ids[:jobs_set]) + jobs_ids = jobs_ids[jobs_set:] + jobs.unlink() + if use_new_cursor: + cr.commit() + except OperationalError: + if use_new_cursor: + cr.rollback() + raise + finally: + if use_new_cursor: + cr.close() return True @api.multi From c4e8caf1653c35262e3bdf94d40f74ee380496f7 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Fri, 14 Dec 2018 16:44:06 +0100 Subject: [PATCH 2/2] [10.0][VER] queue_job: 10.0.2.0.0 --- queue_job/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/queue_job/__manifest__.py b/queue_job/__manifest__.py index 8324a73aa9..daabd183fd 100644 --- a/queue_job/__manifest__.py +++ b/queue_job/__manifest__.py @@ -3,7 +3,7 @@ {'name': 'Job Queue', - 'version': '10.0.1.0.0', + 'version': '10.0.2.0.0', 'author': 'Camptocamp,ACSONE SA/NV,Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/queue', 'license': 'AGPL-3',