From 3604d1809dbe4dce59b8f259f745c1a79ac6397e Mon Sep 17 00:00:00 2001 From: SuvarnaMeenakshi <50386592+SuvarnaMeenakshi@users.noreply.github.com> Date: Thu, 9 Jun 2022 11:17:53 -0700 Subject: [PATCH 1/3] [portconfig]: Remove try exception during config_db initialization. (#10960) Why I did it Provide fix for comment: https://github.com/Azure/sonic-buildimage/pull/10475/files#r847753187; Move laoding database config to application code instead of portconfig as portconfig is used as a library. How I did it Remove try exception handing from portconfig.py during config_db intialization. Move loading of database config to application that uses portconfig.py. How to verify it unit-test passes. Verified that it does not cause issue during boot up of multi-asic VS image. Verified that config_db generation was successful in multi-asic VS. --- src/sonic-config-engine/portconfig.py | 7 +------ src/sonic-config-engine/sonic-cfggen | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/sonic-config-engine/portconfig.py b/src/sonic-config-engine/portconfig.py index 0c056d1cdab7..ea9985a3beb0 100644 --- a/src/sonic-config-engine/portconfig.py +++ b/src/sonic-config-engine/portconfig.py @@ -72,12 +72,7 @@ def db_connect_configdb(namespace=None): """ Connect to configdb """ - try: - if namespace is not None: - swsscommon.SonicDBConfig.load_sonic_global_db_config(namespace=namespace) - config_db = swsscommon.ConfigDBConnector(use_unix_socket_path=True, namespace=namespace) - except Exception as e: - return None + config_db = swsscommon.ConfigDBConnector(use_unix_socket_path=True, namespace=namespace) if config_db is None: return None try: diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index 0e53e6309325..6044ea32787f 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -31,7 +31,7 @@ from config_samples import generate_sample_config, get_available_config from functools import partial from minigraph import minigraph_encoder, parse_xml, parse_device_desc_xml, parse_asic_sub_role, parse_asic_switch_type from portconfig import get_port_config, get_breakout_mode -from sonic_py_common.multi_asic import get_asic_id_from_name, get_asic_device_id +from sonic_py_common.multi_asic import get_asic_id_from_name, get_asic_device_id, is_multi_asic from sonic_py_common import device_info from swsscommon.swsscommon import ConfigDBConnector, SonicDBConfig, ConfigDBPipeConnector @@ -137,6 +137,13 @@ def ip_network(value): return "Invalid ip address %s" % value return r_v.network +def load_namespace_config(asic_name): + if not SonicDBConfig.isInit(): + if is_multi_asic(): + SonicDBConfig.load_sonic_global_db_config(namespace=asic_name) + else: + SonicDBConfig.load_sonic_db_config() + class FormatConverter: """Convert config DB based schema to legacy minigraph based schema for backward capability. We will move to DB schema and remove this class when the config templates are modified. @@ -301,6 +308,7 @@ def main(): deep_update(data, hardware_data) if args.port_config is None: args.port_config = device_info.get_path_to_port_config_file(hwsku) + load_namespace_config(asic_name) (ports, _, _) = get_port_config(hwsku, platform, args.port_config, asic_id) if ports is None: print('Failed to get port config', file=sys.stderr) @@ -326,6 +334,7 @@ def main(): if args.minigraph is not None: minigraph = args.minigraph + load_namespace_config(asic_name) if platform: if args.port_config is not None: deep_update(data, parse_xml(minigraph, platform, args.port_config, asic_name=asic_name, hwsku_config_file=args.hwsku_config)) @@ -353,7 +362,7 @@ def main(): if args.namespace is None: configdb = ConfigDBPipeConnector(use_unix_socket_path=use_unix_sock, **db_kwargs) else: - SonicDBConfig.load_sonic_global_db_config(namespace=args.namespace) + load_namespace_config(args.namespace) configdb = ConfigDBPipeConnector(use_unix_socket_path=use_unix_sock, namespace=args.namespace, **db_kwargs) configdb.connect() @@ -425,7 +434,7 @@ def main(): if args.namespace is None: configdb = ConfigDBPipeConnector(use_unix_socket_path=True, **db_kwargs) else: - SonicDBConfig.load_sonic_global_db_config(namespace=args.namespace) + load_namespace_config(args.namespace) configdb = ConfigDBPipeConnector(use_unix_socket_path=True, namespace=args.namespace, **db_kwargs) configdb.connect(False) From 7e682de49195cc360c956a34380792584bb7916c Mon Sep 17 00:00:00 2001 From: wumiao_nokia Date: Thu, 11 Apr 2024 09:37:19 -0400 Subject: [PATCH 2/3] Fix code base on the review --- src/sonic-config-engine/sonic-cfggen | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index 6044ea32787f..6fd7657f45ea 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -138,11 +138,12 @@ def ip_network(value): return r_v.network def load_namespace_config(asic_name): - if not SonicDBConfig.isInit(): - if is_multi_asic(): - SonicDBConfig.load_sonic_global_db_config(namespace=asic_name) - else: - SonicDBConfig.load_sonic_db_config() + if is_multi_asic(): + if not SonicDBConfig.isGlobalInit(): + SonicDBConfig.initializeGlobalConfig() + else: + if not SonicDBConfig.isInit(): + SonicDBConfig.initialize() class FormatConverter: """Convert config DB based schema to legacy minigraph based schema for backward capability. From be5c1343ad17f638981df927f0c5b00d61cb112f Mon Sep 17 00:00:00 2001 From: wumiao_nokia Date: Thu, 11 Apr 2024 09:52:02 -0400 Subject: [PATCH 3/3] Fix code based on review --- src/sonic-config-engine/sonic-cfggen | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index 6fd7657f45ea..4fd5bc2763db 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -137,7 +137,7 @@ def ip_network(value): return "Invalid ip address %s" % value return r_v.network -def load_namespace_config(asic_name): +def load_namespace_config(): if is_multi_asic(): if not SonicDBConfig.isGlobalInit(): SonicDBConfig.initializeGlobalConfig() @@ -309,7 +309,7 @@ def main(): deep_update(data, hardware_data) if args.port_config is None: args.port_config = device_info.get_path_to_port_config_file(hwsku) - load_namespace_config(asic_name) + load_namespace_config() (ports, _, _) = get_port_config(hwsku, platform, args.port_config, asic_id) if ports is None: print('Failed to get port config', file=sys.stderr) @@ -335,7 +335,7 @@ def main(): if args.minigraph is not None: minigraph = args.minigraph - load_namespace_config(asic_name) + load_namespace_config() if platform: if args.port_config is not None: deep_update(data, parse_xml(minigraph, platform, args.port_config, asic_name=asic_name, hwsku_config_file=args.hwsku_config)) @@ -363,7 +363,7 @@ def main(): if args.namespace is None: configdb = ConfigDBPipeConnector(use_unix_socket_path=use_unix_sock, **db_kwargs) else: - load_namespace_config(args.namespace) + load_namespace_config() configdb = ConfigDBPipeConnector(use_unix_socket_path=use_unix_sock, namespace=args.namespace, **db_kwargs) configdb.connect() @@ -435,7 +435,7 @@ def main(): if args.namespace is None: configdb = ConfigDBPipeConnector(use_unix_socket_path=True, **db_kwargs) else: - load_namespace_config(args.namespace) + load_namespace_config() configdb = ConfigDBPipeConnector(use_unix_socket_path=True, namespace=args.namespace, **db_kwargs) configdb.connect(False)