From f866b93f96613138612db23e7439d6c6a3857209 Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 27 Aug 2024 11:32:38 +0800 Subject: [PATCH] perf: refresh oracle ports if need --- apps/terminal/utils/db_port_mapper.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/terminal/utils/db_port_mapper.py b/apps/terminal/utils/db_port_mapper.py index 9878fa9ef..796632a65 100644 --- a/apps/terminal/utils/db_port_mapper.py +++ b/apps/terminal/utils/db_port_mapper.py @@ -13,7 +13,7 @@ logger = get_logger(__file__) @Singleton -class DBPortManager(object): +class DBPortManager: """ 管理端口-数据库ID的映射, Magnus 要使用 """ CACHE_KEY = 'PORT_DB_MAPPER' @@ -52,7 +52,9 @@ class DBPortManager(object): db_ids_to_pop = set(mapper.values()) - set(db_ids) mapper = self.bulk_pop(db_ids_to_pop, mapper) - self.set_mapper(mapper) + + if db_ids_to_add or db_ids_to_pop: + self.set_mapper(mapper) if settings.DEBUG: logger.debug("Oracle listen ports: {}".format(len(mapper.keys()))) @@ -63,6 +65,7 @@ class DBPortManager(object): db_ids = [str(i) for i in db_ids] mapper = dict(zip(self.all_avail_ports, list(db_ids))) self.set_mapper(mapper) + return mapper def bulk_add(self, db_ids, mapper): for db_id in db_ids: @@ -125,12 +128,20 @@ class DBPortManager(object): mapper = self.get_mapper() return sorted([int(i) for i in mapper.keys()]) + @staticmethod + def oracle_ports_setting_changed(): + oracle_ports_cache = cache.get('MAGNUS_ORACLE_PORTS') or '' + if settings.MAGNUS_ORACLE_PORTS.split('-')[0] != oracle_ports_cache.split('-')[0]: + logger.info('Oracle ports setting changed') + return True + return False + def get_mapper(self): mapper = cache.get(self.CACHE_KEY, {}) - if not mapper: + if not mapper or self.oracle_ports_setting_changed(): # redis 可能被清空,重新初始化一下 - self.init() - return cache.get(self.CACHE_KEY, {}) + mapper = self.init() + return mapper def set_mapper(self, value): """ @@ -139,6 +150,7 @@ class DBPortManager(object): } """ cache.set(self.CACHE_KEY, value, timeout=None) + cache.set('MAGNUS_ORACLE_PORTS', settings.MAGNUS_ORACLE_PORTS) db_port_manager = DBPortManager()