Skip to content

Commit 9b7c58b

Browse files
authored
Load the database global_db only once for show cli (mudsut4ke#1712)
Introduce a new function `load_db_config()`. This function will load the global database file or database config file based on the platform.
1 parent 0efd297 commit 9b7c58b

9 files changed

Lines changed: 50 additions & 39 deletions

File tree

acl_loader/main.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
import tabulate
1010
import pyangbind.lib.pybindJSON as pybindJSON
1111
from natsort import natsorted
12-
from sonic_py_common import device_info, multi_asic
13-
from swsscommon.swsscommon import SonicV2Connector, ConfigDBConnector, SonicDBConfig
14-
12+
from sonic_py_common import multi_asic
13+
from swsscommon.swsscommon import SonicV2Connector, ConfigDBConnector
14+
from utilities_common.general import load_db_config
1515

1616
def info(msg):
1717
click.echo(click.style("Info: ", fg='cyan') + click.style(str(msg), fg='green'))
@@ -116,11 +116,8 @@ def __init__(self):
116116
self.rules_db_info = {}
117117
self.rules_info = {}
118118

119-
if multi_asic.is_multi_asic():
120-
# Load global db config
121-
SonicDBConfig.load_sonic_global_db_config()
122-
else:
123-
SonicDBConfig.initialize()
119+
# Load database config files
120+
load_db_config()
124121

125122
self.sessions_db_info = {}
126123
self.configdb = ConfigDBConnector()
@@ -146,7 +143,7 @@ def __init__(self):
146143

147144
# Getting all front asic namespace and correspding config and state DB connector
148145

149-
namespaces = device_info.get_all_namespaces()
146+
namespaces = multi_asic.get_all_namespaces()
150147
for front_asic_namespaces in namespaces['front_ns']:
151148
self.per_npu_configdb[front_asic_namespaces] = ConfigDBConnector(use_unix_socket_path=True, namespace=front_asic_namespaces)
152149
self.per_npu_configdb[front_asic_namespaces].connect()

config/main.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222
from sonic_py_common import device_info, multi_asic
2323
from sonic_py_common.interface import get_interface_table_name, get_port_table_name
2424
from utilities_common import util_base
25-
from swsscommon.swsscommon import SonicV2Connector, ConfigDBConnector, SonicDBConfig
25+
from swsscommon.swsscommon import SonicV2Connector, ConfigDBConnector
2626
from utilities_common.db import Db
2727
from utilities_common.intf_filter import parse_interface_in_filter
2828
from utilities_common import bgp_util
2929
import utilities_common.cli as clicommon
30+
from utilities_common.general import load_db_config
31+
3032
from .utils import log
3133

3234
from . import aaa
@@ -952,12 +954,8 @@ def config(ctx):
952954
except (KeyError, TypeError):
953955
raise click.Abort()
954956

955-
# Load the global config file database_global.json once.
956-
num_asic = multi_asic.get_num_asics()
957-
if num_asic > 1:
958-
SonicDBConfig.load_sonic_global_db_config()
959-
else:
960-
SonicDBConfig.initialize()
957+
# Load database config files
958+
load_db_config()
961959

962960
if os.geteuid() != 0:
963961
exit("Root privileges are required for this operation")

crm/main.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#!/usr/bin/env python3
22

33
import click
4-
from swsscommon.swsscommon import ConfigDBConnector, SonicDBConfig
4+
from swsscommon.swsscommon import ConfigDBConnector
55
from tabulate import tabulate
6-
from utilities_common import multi_asic as multi_asic_util
7-
from sonic_py_common import multi_asic
86

7+
from sonic_py_common import multi_asic
8+
from utilities_common.general import load_db_config
9+
from utilities_common import multi_asic as multi_asic_util
910
class Crm:
1011
def __init__(self, db=None):
1112
self.cli_mode = None
@@ -213,13 +214,8 @@ def cli(ctx):
213214
# Use the db object if given as input.
214215
db = None if ctx.obj is None else ctx.obj.cfgdb
215216

216-
# Note: SonicDBConfig may be already initialized in unit test, then skip
217-
if not SonicDBConfig.isInit():
218-
if multi_asic.is_multi_asic():
219-
# Load the global config file database_global.json once.
220-
SonicDBConfig.load_sonic_global_db_config()
221-
else:
222-
SonicDBConfig.initialize()
217+
# Load database config files
218+
load_db_config()
223219

224220
context = {
225221
"crm": Crm(db)

scripts/ipintutil

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ from tabulate import tabulate
1212
from sonic_py_common import multi_asic
1313
from swsscommon import swsscommon
1414
from utilities_common import constants
15+
from utilities_common.general import load_db_config
1516
from utilities_common import multi_asic as multi_asic_util
1617

1718

@@ -262,7 +263,7 @@ def main():
262263
else:
263264
sys.exit("Invalid argument -a {}".format(args.address_family))
264265

265-
swsscommon.SonicDBConfig.load_sonic_global_db_config()
266+
load_db_config()
266267
ip_intfs = get_ip_intfs(af, namespace, display)
267268
display_ip_intfs(ip_intfs)
268269

scripts/lldpshow

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ import subprocess
2525
import sys
2626
import xml.etree.ElementTree as ET
2727

28-
from sonic_py_common import device_info, multi_asic
29-
from swsscommon.swsscommon import ConfigDBConnector, SonicDBConfig
28+
from sonic_py_common import device_info
29+
from swsscommon.swsscommon import ConfigDBConnector
30+
from utilities_common.general import load_db_config
3031
from tabulate import tabulate
3132

3233
BACKEND_ASIC_INTERFACE_NAME_PREFIX = 'Ethernet-BP'
@@ -48,10 +49,8 @@ class Lldpshow(object):
4849
# if further capability type is supported like WLAN, can just add the tag definition here
4950
self.ctags = {'Router': 'R', 'Bridge': 'B'}
5051

51-
if multi_asic.is_multi_asic():
52-
SonicDBConfig.load_sonic_global_db_config()
53-
else:
54-
SonicDBConfig.initialize()
52+
# Load database config files
53+
load_db_config()
5554

5655
# For multi-asic platforms we will get only front-panel interface to display
5756
namespaces = device_info.get_all_namespaces()

scripts/portconfig

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ try:
3737
except KeyError:
3838
pass
3939

40-
from swsscommon.swsscommon import ConfigDBConnector, SonicDBConfig, SonicV2Connector
40+
from swsscommon.swsscommon import ConfigDBConnector, SonicV2Connector
41+
from utilities_common.general import load_db_config
4142

4243
# APPL_DB constants
4344
PORT_TABLE_NAME = "PORT"
@@ -246,11 +247,8 @@ def main():
246247
help = 'port advertised interface types', default=None)
247248
args = parser.parse_args()
248249

249-
if args.namespace is not None:
250-
SonicDBConfig.load_sonic_global_db_config(namespace=args.namespace)
251-
else:
252-
SonicDBConfig.initialize()
253-
250+
# Load database config files
251+
load_db_config()
254252
try:
255253
port = portconfig(args.verbose, args.port, args.namespace)
256254
if args.list:

show/main.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from utilities_common import util_base
1515
from utilities_common.db import Db
1616
import utilities_common.constants as constants
17+
from utilities_common.general import load_db_config
1718

1819
from . import acl
1920
from . import bgp_common
@@ -149,6 +150,8 @@ def is_gearbox_configured():
149150
def cli(ctx):
150151
"""SONiC command line - 'show' command"""
151152

153+
# Load database config files
154+
load_db_config()
152155
ctx.obj = Db()
153156

154157

utilities_common/cli.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from natsort import natsorted
1212
from sonic_py_common import multi_asic
1313
from utilities_common.db import Db
14+
from utilities_common.general import load_db_config
1415

1516
VLAN_SUB_INTERFACE_SEPARATOR = '.'
1617

@@ -118,6 +119,8 @@ class InterfaceAliasConverter(object):
118119

119120
def __init__(self, db=None):
120121

122+
# Load database config files
123+
load_db_config()
121124
if db is None:
122125
self.port_dict = multi_asic.get_port_table()
123126
else:

utilities_common/general.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
import importlib.util
33
import sys
44

5+
from sonic_py_common.multi_asic import is_multi_asic
6+
from swsscommon import swsscommon
7+
58
def load_module_from_source(module_name, file_path):
69
"""
710
This function will load the Python source file specified by <file_path>
@@ -15,3 +18,16 @@ def load_module_from_source(module_name, file_path):
1518
sys.modules[module_name] = module
1619

1720
return module
21+
22+
def load_db_config():
23+
'''
24+
Load the correct database config file:
25+
- database_global.json for multi asic
26+
- database_config.json for single asic
27+
'''
28+
if is_multi_asic():
29+
if not swsscommon.SonicDBConfig.isGlobalInit():
30+
swsscommon.SonicDBConfig.load_sonic_global_db_config()
31+
else:
32+
if not swsscommon.SonicDBConfig.isInit():
33+
swsscommon.SonicDBConfig.load_sonic_db_config()

0 commit comments

Comments
 (0)