From d8ce75466e4a6728cccfc7696a65a399e9cf23f1 Mon Sep 17 00:00:00 2001 From: Xavier-Do Date: Mon, 16 Sep 2019 09:41:10 +0000 Subject: [PATCH] [FIX] base: fix rte translator timeout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In some cases, after installing a new language in rte_translator tour, some query using ir_translation table will become very slow. Identified query: SELECT res_groups_users_rel.uid, res_groups_users_rel.gid FROM res_groups_users_rel, "res_groups" LEFT JOIN "ir_translation" as "res_groups__name" ON ("res_groups"."id" = "res_groups__name"."res_id" AND "res_groups__name"."type" = 'model' AND "res_groups__name"."name" = 'res.groups,name' AND "res_groups__name"."lang" = 'en_US' AND "res_groups__name"."value" ! '') WHERE 1=1 AND res_groups_users_rel.uid IN (2) AND res_groups_users_rel.gid = res_groups.id ORDER BY COALESE("res_groups__name"."value", "res_groups"."name") OFFSET 0´ During post_install this query will become slower (between 0.7 and 2 seconds) ~50% of the time, when this usually take less than 0.1 second. For some tour step, this query is executed several times, making a simple /web loading going from less than one second to more than 10 second, breaking the tour. The main intuition behind that would be that the query plan completely fails, mainly because postgress is to busy and doesn't have time to launch an analyse when runbot load is high. This commit proposes to execute a manual ANALYZE on ir_translation table after a new language is installed. Tested with 40 builds, rte_translator never failed with this fix. cherry-pick of fc5934dc4541aeff4e819a9b3404a3cbb793453f closes odoo/odoo#37013 X-original-commit: 57f91453cb567d8a7a29137b321a630fe0dbb9a6 Signed-off-by: Xavier Dollé (xdo) --- odoo/addons/base/wizard/base_language_install.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/odoo/addons/base/wizard/base_language_install.py b/odoo/addons/base/wizard/base_language_install.py index 438803ee388..376d1fd5751 100644 --- a/odoo/addons/base/wizard/base_language_install.py +++ b/odoo/addons/base/wizard/base_language_install.py @@ -35,6 +35,8 @@ class BaseLanguageInstall(models.TransientModel): mods = self.env['ir.module.module'].search([('state', '=', 'installed')]) mods.with_context(overwrite=self.overwrite)._update_translations(self.lang) self.state = 'done' + self.env.cr.execute('ANALYZE ir_translation') + return { 'name': _('Language Pack'), 'view_type': 'form',