[IMP] http: rollback from checked_call only if necessary
The rollback clears the cache, which lose all data that have been fetched before arriving in the route method. This lost cache includes some website data that was used during the dispatch and that will be used again in the route. By keeping it we reduce the number of queries on every request by at least 2. Part of task-2061122 closes odoo/odoo#36245 Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
This commit is contained in:
+5
-1
@@ -331,14 +331,18 @@ class WebRequest(object):
|
||||
if self.endpoint.first_arg_is_req:
|
||||
args = (request,) + args
|
||||
|
||||
first_time = True
|
||||
|
||||
# Correct exception handling and concurency retry
|
||||
@service_model.check
|
||||
def checked_call(___dbname, *a, **kw):
|
||||
nonlocal first_time
|
||||
# The decorator can call us more than once if there is an database error. In this
|
||||
# case, the request cursor is unusable. Rollback transaction to create a new one.
|
||||
if self._cr:
|
||||
if self._cr and not first_time:
|
||||
self._cr.rollback()
|
||||
self.env.clear()
|
||||
first_time = False
|
||||
result = self.endpoint(*a, **kw)
|
||||
if isinstance(result, Response) and result.is_qweb:
|
||||
# Early rendering of lazy responses to benefit from @service_model.check protection
|
||||
|
||||
Reference in New Issue
Block a user