Cache connection handles to prevent duplicate (#9636)
On a multi-asic Supervisor card, running commands like 'show interface counter' opens a confid_db connection per namespace per interface which results in many duplicate connections exceeding the allowed open file handles. This causes the command to fail. Caching the connections to prevent duplicate handles.
This commit is contained in:
parent
5026e22333
commit
7c3dcfe0a7
@ -27,6 +27,10 @@ DEFAULT_NAMESPACE = ''
|
|||||||
PORT_ROLE = 'role'
|
PORT_ROLE = 'role'
|
||||||
|
|
||||||
|
|
||||||
|
# Dictionary to cache config_db connection handle per namespace
|
||||||
|
# to prevent duplicate connections from being opened
|
||||||
|
config_db_handle = {}
|
||||||
|
|
||||||
def connect_config_db_for_ns(namespace=DEFAULT_NAMESPACE):
|
def connect_config_db_for_ns(namespace=DEFAULT_NAMESPACE):
|
||||||
"""
|
"""
|
||||||
The function connects to the config DB for a given namespace and
|
The function connects to the config DB for a given namespace and
|
||||||
@ -237,7 +241,9 @@ def get_all_namespaces():
|
|||||||
if is_multi_asic():
|
if is_multi_asic():
|
||||||
for asic in range(num_asics):
|
for asic in range(num_asics):
|
||||||
namespace = "{}{}".format(ASIC_NAME_PREFIX, asic)
|
namespace = "{}{}".format(ASIC_NAME_PREFIX, asic)
|
||||||
config_db = connect_config_db_for_ns(namespace)
|
if namespace not in config_db_handle:
|
||||||
|
config_db_handle[namespace] = connect_config_db_for_ns(namespace)
|
||||||
|
config_db = config_db_handle[namespace]
|
||||||
|
|
||||||
metadata = config_db.get_table('DEVICE_METADATA')
|
metadata = config_db.get_table('DEVICE_METADATA')
|
||||||
if metadata['localhost']['sub_role'] == FRONTEND_ASIC_SUB_ROLE:
|
if metadata['localhost']['sub_role'] == FRONTEND_ASIC_SUB_ROLE:
|
||||||
|
Loading…
Reference in New Issue
Block a user