Ravi Gohil (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-server/6.0-opw-578313-rgo into 
lp:openobject-server/6.0.

Requested reviews:
  Naresh(OpenERP) (nch-openerp)
Related bugs:
  Bug #1039600 in OpenERP Server: "ir.cron performances: check "doall" 
parameter earlier"
  https://bugs.launchpad.net/openobject-server/+bug/1039600

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-opw-578313-rgo/+merge/121544

Hello,

This MP omits unnecessary looping for schedules when we don't want to execute 
missed occurance when server restarted(when 'Repeat Missed' is set to False), 
hence, improve performance.

Currently, in code execution, while loop advances from datetime set in `Next 
Execution Date`(from when server restarted) to current time by the interval 
values set. But what system should do is, if `Repeat Missed` is not marked, 
while loop should not be executed and `Next Execution Date` should be 
calculated by adding interval values to current datetime.

I have fixed this issue, kindly review the fix.

Thanks.

-- 
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-opw-578313-rgo/+merge/121544
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-server/6.0-opw-578313-rgo.
=== modified file 'bin/addons/base/ir/ir_cron.py'
--- bin/addons/base/ir/ir_cron.py	2011-02-16 14:22:42 +0000
+++ bin/addons/base/ir/ir_cron.py	2012-08-28 07:13:19 +0000
@@ -111,15 +111,17 @@
                     nextcall = datetime.strptime(job['nextcall'], '%Y-%m-%d %H:%M:%S')
                     numbercall = job['numbercall']
 
-                    ok = False
-                    while nextcall < now and numbercall:
-                        if numbercall > 0:
-                            numbercall -= 1
-                        if not ok or job['doall']:
+                    if job['doall']:
+                        while nextcall < now and numbercall:
+                            if numbercall > 0:
+                                numbercall -= 1
                             self._callback(cr, job['user_id'], job['model'], job['function'], job['args'])
-                        if numbercall:
-                            nextcall += _intervalTypes[job['interval_type']](job['interval_number'])
-                        ok = True
+                            if numbercall:
+                                nextcall += _intervalTypes[job['interval_type']](job['interval_number'])
+                    else:
+                        self._callback(cr, job['user_id'], job['model'], job['function'], job['args'])
+                        current_time = now.strftime('%Y-%m-%d %H:%M:%S')
+                        nextcall = datetime.strptime(current_time, '%Y-%m-%d %H:%M:%S') + _intervalTypes[job['interval_type']](job['interval_number'])
                     addsql = ''
                     if not numbercall:
                         addsql = ', active=False'

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to