Skip to content

Commit fdedcbf

Browse files
authored
[fdbshow]: Handle FDB cleanup gracefully. (sonic-net#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 sonic-net#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 e7535ae commit fdedcbf

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
@@ -83,7 +83,7 @@ class FdbShow(object):
8383
if not self.if_br_oid_map:
8484
return
8585

86-
fdb_str = self.db.keys('ASIC_DB', "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY:*")
86+
fdb_str = self.db.keys(self.db.ASIC_DB, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY:*")
8787
if not fdb_str:
8888
return
8989

@@ -95,7 +95,10 @@ class FdbShow(object):
9595
if not fdb:
9696
continue
9797

98-
ent = self.db.get_all('ASIC_DB', s, blocking=True)
98+
ent = self.db.get_all(self.db.ASIC_DB, s)
99+
if not ent:
100+
continue
101+
99102
br_port_id = ent["SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID"][oid_pfx:]
100103
ent_type = ent["SAI_FDB_ENTRY_ATTR_TYPE"]
101104
fdb_type = ['Dynamic','Static'][ent_type == "SAI_FDB_ENTRY_TYPE_STATIC"]

0 commit comments

Comments
 (0)