From 3bdba8bc449ee8eb93ac399bee6914529504dd13 Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Wed, 23 Mar 2022 15:29:45 +0000 Subject: [PATCH] [FIX] server.py: cron trigger in recovery When setting up the PG replication, the slave is considered in recovery mode. However, `LISTEN / NOTIFY` is not supported in this mode, leading to an endless loop of crashes. In recovery mode, we simply deactivate the feature. closes odoo/odoo#87619 X-original-commit: 6389a64953081130d62f2a1703a27ddfa751098b Signed-off-by: Nicolas Martinelli (nim) --- odoo/service/server.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/odoo/service/server.py b/odoo/service/server.py index f94e29d310f..5f6e1616246 100644 --- a/odoo/service/server.py +++ b/odoo/service/server.py @@ -430,7 +430,13 @@ class ThreadedServer(CommonServer): conn = odoo.sql_db.db_connect('postgres') with conn.cursor() as cr: pg_conn = cr._cnx - cr.execute("LISTEN cron_trigger") + # LISTEN / NOTIFY doesn't work in recovery mode + cr.execute("SELECT pg_is_in_recovery()") + in_recovery = cr.fetchone()[0] + if not in_recovery: + cr.execute("LISTEN cron_trigger") + else: + _logger.warning("PG cluster in recovery mode, cron trigger not activated") cr.commit() while True: @@ -1162,7 +1168,13 @@ class WorkerCron(Worker): dbconn = odoo.sql_db.db_connect('postgres') self.dbcursor = dbconn.cursor() - self.dbcursor.execute("LISTEN cron_trigger") + # LISTEN / NOTIFY doesn't work in recovery mode + self.dbcursor.execute("SELECT pg_is_in_recovery()") + in_recovery = self.dbcursor.fetchone()[0] + if not in_recovery: + self.dbcursor.execute("LISTEN cron_trigger") + else: + _logger.warning("PG cluster in recovery mode, cron trigger not activated") self.dbcursor.commit() def stop(self):