Skip to content

Commit ce3b856

Browse files
nazariigqiluo-msft
authored andcommitted
[fdbshow]: Handle FDB cleanup gracefully. (#1926)
The race condition is caused by a blocking Redis call which gets the contents of the FDB entry from ASIC DB. Since it has been implemented as a simple loop, there is no guarantee that entry will be present in DB when the contents are being read. - What I did Fixed: [fdb] 'show mac' command failed with t0-56-po2vlan topology #1866 - How I did it Removed blocking calls from fdbshow - How to verify it Run FDB test - Previous command output (if the output of a command-line utility has changed) root@sonic:/home/admin# show mac Key 'ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY:{"bvid":"oid:0x260000000009cc","mac":"02:11:22:33:20:00","switch_id":"oid:0x21000000000000"}' unavailable in database '1' - New command output (if the output of a command-line utility has changed) root@sonic:/home/admin# show mac No. Vlan MacAddress Port Type ----- ------ ------------ ------ ------ Total number of entries 0 Signed-off-by: Nazarii Hnydyn <[email protected]>
1 parent 1437bf2 commit ce3b856

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

scripts/fdbshow

+5-2
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class FdbShow(object):
5757
self.db.connect(self.db.ASIC_DB)
5858
self.bridge_mac_list = []
5959

60-
fdb_str = self.db.keys('ASIC_DB', "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY:*")
60+
fdb_str = self.db.keys(self.db.ASIC_DB, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY:*")
6161
if not fdb_str:
6262
return
6363

@@ -71,7 +71,10 @@ class FdbShow(object):
7171
if not fdb:
7272
continue
7373

74-
ent = self.db.get_all('ASIC_DB', s, blocking=True)
74+
ent = self.db.get_all(self.db.ASIC_DB, s)
75+
if not ent:
76+
continue
77+
7578
br_port_id = ent["SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID"][oid_pfx:]
7679
ent_type = ent["SAI_FDB_ENTRY_ATTR_TYPE"]
7780
fdb_type = ['Dynamic','Static'][ent_type == "SAI_FDB_ENTRY_TYPE_STATIC"]

0 commit comments

Comments
 (0)