[FIX] WorkerCron: give a chance to process_limit() between each database.
bzr revid: vmt@openerp.com-20130328115905-ddib9g4bbu0kx2wn
This commit is contained in:
parent
646eaf3d73
commit
79bd8db0fd
|
@ -356,9 +356,19 @@ class WorkerBaseWSGIServer(werkzeug.serving.BaseWSGIServer):
|
|||
|
||||
class WorkerCron(Worker):
|
||||
""" Cron workers """
|
||||
|
||||
def __init__(self, multi):
|
||||
super(WorkerCron, self).__init__(multi)
|
||||
# process_work() below process a single database per call.
|
||||
# The variable db_index is keeping track of the next database to
|
||||
# process.
|
||||
self.db_index = 0
|
||||
|
||||
def sleep(self):
|
||||
interval = 60 + self.pid % 10 # chorus effect
|
||||
time.sleep(interval)
|
||||
# Really sleep once all the databases have been processed.
|
||||
if self.db_index == 0:
|
||||
interval = 60 + self.pid % 10 # chorus effect
|
||||
time.sleep(interval)
|
||||
|
||||
def process_work(self):
|
||||
rpc_request = logging.getLogger('openerp.netsvc.rpc.request')
|
||||
|
@ -368,7 +378,9 @@ class WorkerCron(Worker):
|
|||
db_names = config['db_name'].split(',')
|
||||
else:
|
||||
db_names = openerp.netsvc.ExportService._services['db'].exp_list(True)
|
||||
for db_name in db_names:
|
||||
if len(db_names):
|
||||
self.db_index = (self.db_index + 1) % len(db_names)
|
||||
db_name = db_names[self.db_index]
|
||||
if rpc_request_flag:
|
||||
start_time = time.time()
|
||||
start_rss, start_vms = psutil.Process(os.getpid()).get_memory_info()
|
||||
|
@ -387,8 +399,14 @@ class WorkerCron(Worker):
|
|||
end_rss, end_vms = psutil.Process(os.getpid()).get_memory_info()
|
||||
logline = '%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % (db_name, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms)/1024)
|
||||
_logger.debug("WorkerCron (%s) %s", self.pid, logline)
|
||||
# TODO Each job should be considered as one request instead of each run
|
||||
self.request_count += 1
|
||||
|
||||
self.request_count += 1
|
||||
if self.request_count >= self.request_max and self.request_max < len(db_names):
|
||||
_logger.error("There are more dabatases to process than allowed "
|
||||
"by the `limit_request` configuration variable: %s more.",
|
||||
len(db_names) - self.request_max)
|
||||
else:
|
||||
self.db_index = 0
|
||||
|
||||
def start(self):
|
||||
Worker.start(self)
|
||||
|
|
Loading…
Reference in New Issue