Skip to content

Commit 1d210d9

Browse files
[Namespace]: Fix SNMP AgentX socket connection timeout when using Namespace.get_all() (#140)
* [Namespace]: Remove key exists check in dbs_get_all to reduce time taken. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com> * Fix as per review comment. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com> * Minor fix. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com> * Connect to all required namespace dbs during init and periodic sync_d functions to reduce time taken in dbs_get_all. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com> * Change test_mibs to use generic wrapper function added. The Namespace functions will be used for both single and multi-asic platforms. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com> * Fix review comment. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com> * Fix as per review comment. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com> * Remove whitespace. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com> * Fix review comment. Avoid modifying mutable object kwargs, do a shallow copy instead. Signed-off-by: SuvarnaMeenakshi <sumeenak@microsoft.com>
1 parent 253f58e commit 1d210d9

File tree

2 files changed

+26
-18
lines changed

2 files changed

+26
-18
lines changed

src/sonic_ax_impl/mibs/__init__.py

+23-15
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,6 @@ def init_sync_d_interface_tables(db_conn):
212212
:return: tuple(if_name_map, if_id_map, oid_map, if_alias_map)
213213
"""
214214

215-
# Make sure we're connected to COUNTERS_DB
216-
db_conn.connect(COUNTERS_DB)
217-
218215
# { if_name (SONiC) -> sai_id }
219216
# ex: { "Ethernet76" : "1000000000023" }
220217
if_name_map, if_id_map = port_util.get_interface_oid_map(db_conn)
@@ -254,7 +251,6 @@ def init_sync_d_interface_tables(db_conn):
254251
.format(port_util.SONIC_ETHERNET_RE_PATTERN))
255252
logger.warning("Port name map:\n" + pprint.pformat(if_name_map, indent=2))
256253

257-
db_conn.connect(APPL_DB)
258254

259255
if_alias_map = dict()
260256

@@ -325,13 +321,11 @@ def init_sync_d_lag_tables(db_conn):
325321
# { lag_name (SONiC) -> lag_oid (SAI) }
326322
lag_sai_map = {}
327323

328-
db_conn.connect(APPL_DB)
329324
lag_entries = db_conn.keys(APPL_DB, b"LAG_TABLE:*")
330325

331326
if not lag_entries:
332327
return lag_name_if_name_map, if_name_lag_name_map, oid_lag_name_map, lag_sai_map
333328

334-
db_conn.connect(COUNTERS_DB)
335329
lag_sai_map = db_conn.get_all(COUNTERS_DB, b"COUNTERS_LAG_NAME_MAP")
336330
lag_sai_map = {name: sai_id.lstrip(b"oid:0x") for name, sai_id in lag_sai_map.items()}
337331

@@ -363,9 +357,6 @@ def init_sync_d_queue_tables(db_conn):
363357
:return: tuple(port_queues_map, queue_stat_map)
364358
"""
365359

366-
# Make sure we're connected to COUNTERS_DB
367-
db_conn.connect(COUNTERS_DB)
368-
369360
# { Port index : Queue index (SONiC) -> sai_id }
370361
# ex: { "1:2" : "1000000000023" }
371362
queue_name_map = db_conn.get_all(COUNTERS_DB, COUNTERS_QUEUE_NAME_MAP, blocking=True)
@@ -526,8 +517,15 @@ def init_namespace_dbs():
526517
db = SonicV2Connector(use_unix_socket_path=True, namespace=namespace)
527518
db_conn.append(db)
528519

520+
Namespace.connect_namespace_dbs(db_conn)
529521
return db_conn
530522

523+
@staticmethod
524+
def connect_namespace_dbs(dbs):
525+
list_of_dbs = [APPL_DB, COUNTERS_DB, CONFIG_DB, STATE_DB, ASIC_DB, SNMP_OVERLAY_DB]
526+
for db_name in list_of_dbs:
527+
Namespace.connect_all_dbs(dbs, db_name)
528+
531529
@staticmethod
532530
def connect_all_dbs(dbs, db_name):
533531
for db_conn in dbs:
@@ -540,7 +538,6 @@ def dbs_keys(dbs, db_name, pattern='*'):
540538
"""
541539
result_keys=[]
542540
for db_conn in dbs:
543-
db_conn.connect(db_name)
544541
keys = db_conn.keys(db_name, pattern)
545542
if keys is not None:
546543
result_keys.extend(keys)
@@ -552,12 +549,18 @@ def dbs_get_all(dbs, db_name, _hash, *args, **kwargs):
552549
db get_all function executed on global and all namespace DBs.
553550
"""
554551
result = {}
552+
# If there are multiple namespaces, _hash might not be
553+
# present in all namespace, ignore if not present in a
554+
# specfic namespace.
555+
if len(dbs) > 1:
556+
tmp_kwargs = kwargs.copy()
557+
tmp_kwargs['blocking'] = False
558+
else:
559+
tmp_kwargs = kwargs
555560
for db_conn in dbs:
556-
db_conn.connect(db_name)
557-
if(db_conn.exists(db_name, _hash)):
558-
ns_result = db_conn.get_all(db_name, _hash, *args, **kwargs)
559-
if ns_result is not None:
560-
result.update(ns_result)
561+
ns_result = db_conn.get_all(db_name, _hash, *args, **tmp_kwargs)
562+
if ns_result is not None:
563+
result.update(ns_result)
561564
return result
562565

563566
@staticmethod
@@ -589,6 +592,7 @@ def init_namespace_sync_d_interface_tables(dbs):
589592
Ignore first global db to get interface tables if there
590593
are multiple namespaces.
591594
"""
595+
Namespace.connect_namespace_dbs(dbs)
592596
for db_conn in Namespace.get_non_host_dbs(dbs):
593597
if_name_map_ns, \
594598
if_alias_map_ns, \
@@ -617,6 +621,7 @@ def init_namespace_sync_d_lag_tables(dbs):
617621
Ignore first global db to get lag tables if
618622
there are multiple namespaces.
619623
"""
624+
Namespace.connect_namespace_dbs(dbs)
620625
for db_conn in Namespace.get_non_host_dbs(dbs):
621626
lag_name_if_name_map_ns, \
622627
if_name_lag_name_map_ns, \
@@ -634,6 +639,7 @@ def init_namespace_sync_d_rif_tables(dbs):
634639
rif_port_map = {}
635640
port_rif_map = {}
636641

642+
Namespace.connect_namespace_dbs(dbs)
637643
for db_conn in Namespace.get_non_host_dbs(dbs):
638644
rif_port_map_ns, \
639645
port_rif_map_ns = init_sync_d_rif_tables(db_conn)
@@ -648,6 +654,7 @@ def init_namespace_sync_d_vlan_tables(dbs):
648654
oid_sai_map = {}
649655
oid_name_map = {}
650656

657+
Namespace.connect_namespace_dbs(dbs)
651658
for db_conn in Namespace.get_non_host_dbs(dbs):
652659
vlan_name_map_ns, \
653660
oid_sai_map_ns, \
@@ -670,6 +677,7 @@ def init_namespace_sync_d_queue_tables(dbs):
670677
Ignore first global db to get queue tables if there
671678
are multiple namespaces.
672679
"""
680+
Namespace.connect_namespace_dbs(dbs)
673681
for db_conn in Namespace.get_non_host_dbs(dbs):
674682
port_queues_map_ns, \
675683
queue_stat_map_ns, \

tests/test_mibs.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
modules_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
88
sys.path.insert(0, os.path.join(modules_path, 'src'))
99

10-
from sonic_ax_impl import mibs
10+
from sonic_ax_impl.mibs import Namespace
1111

1212
class TestGetNextPDU(TestCase):
1313
@classmethod
@@ -16,12 +16,12 @@ def setUpClass(cls):
1616
tests.mock_tables.dbconnector.load_database_config()
1717

1818
def test_init_sync_d_lag_tables(self):
19-
db_conn = mibs.init_db()
19+
db_conn = Namespace.init_namespace_dbs()
2020

2121
lag_name_if_name_map, \
2222
if_name_lag_name_map, \
2323
oid_lag_name_map, \
24-
lag_sai_map = mibs.init_sync_d_lag_tables(db_conn)
24+
lag_sai_map = Namespace.init_namespace_sync_d_lag_tables(db_conn)
2525

2626
self.assertTrue(b"PortChannel04" in lag_name_if_name_map)
2727
self.assertTrue(lag_name_if_name_map[b"PortChannel04"] == [b"Ethernet124"])

0 commit comments

Comments
 (0)