Skip to content

Commit 4d6bb79

Browse files
authored
Non-block reading counters to tolerate corrupted/delayed counters in COUNTERS_DB (sonic-net#229)
**- What I did** Interface counters in COUNTERS_DB may be corrupted or delayed. We could not assume they are always available. **- How to verify it** Unit test and smoke test on DUT
1 parent 21d7d97 commit 4d6bb79

File tree

5 files changed

+20
-113
lines changed

5 files changed

+20
-113
lines changed

src/sonic_ax_impl/mibs/ietf/rfc1213.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,9 @@ def update_if_counters(self):
262262
namespace, sai_id = mibs.split_sai_id_key(sai_id_key)
263263
if_idx = mibs.get_index_from_str(self.if_id_map[sai_id_key])
264264
counters_db_data = self.namespace_db_map[namespace].get_all(mibs.COUNTERS_DB,
265-
mibs.counter_table(sai_id),
266-
blocking=True)
265+
mibs.counter_table(sai_id))
266+
if counters_db_data is None:
267+
counters_db_data = {}
267268
self.if_counters[if_idx] = {
268269
counter: int(value) for counter, value in counters_db_data.items()
269270
}
@@ -272,8 +273,9 @@ def update_rif_counters(self):
272273
rif_sai_ids = list(self.rif_port_map) + list(self.vlan_name_map)
273274
for sai_id in rif_sai_ids:
274275
counters_db_data = Namespace.dbs_get_all(self.db_conn, mibs.COUNTERS_DB,
275-
mibs.counter_table(mibs.split_sai_id_key(sai_id)[1]),
276-
blocking=False)
276+
mibs.counter_table(mibs.split_sai_id_key(sai_id)[1]))
277+
if counters_db_data is None:
278+
counters_db_data = {}
277279
self.rif_counters[sai_id] = {
278280
counter: int(value) for counter, value in counters_db_data.items()
279281
}
@@ -358,8 +360,8 @@ def aggregate_counters(self):
358360
port_idx = mibs.get_index_from_str(self.if_id_map[port_sai_id])
359361
for port_counter_name, rif_counter_name in mibs.RIF_DROPS_AGGR_MAP.items():
360362
self.if_counters[port_idx][port_counter_name] = \
361-
self.if_counters[port_idx][port_counter_name] + \
362-
self.rif_counters[rif_sai_id][rif_counter_name]
363+
self.if_counters[port_idx].get(port_counter_name, 0) + \
364+
self.rif_counters[rif_sai_id].get(rif_counter_name, 0)
363365

364366
for vlan_sai_id, vlan_name in self.vlan_name_map.items():
365367
for port_counter_name, rif_counter_name in mibs.RIF_COUNTERS_AGGR_MAP.items():

src/sonic_ax_impl/mibs/ietf/rfc2863.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,11 @@ def update_data(self):
145145
for sai_id_key in self.if_id_map:
146146
namespace, sai_id = mibs.split_sai_id_key(sai_id_key)
147147
if_idx = mibs.get_index_from_str(self.if_id_map[sai_id_key])
148-
self.if_counters[if_idx] = self.namespace_db_map[namespace].get_all(mibs.COUNTERS_DB, \
149-
mibs.counter_table(sai_id), blocking=True)
148+
counter_table = self.namespace_db_map[namespace].get_all(mibs.COUNTERS_DB, \
149+
mibs.counter_table(sai_id))
150+
if counter_table is None:
151+
counter_table = {}
152+
self.if_counters[if_idx] = counter_table
150153

151154
self.lag_name_if_name_map, \
152155
self.if_name_lag_name_map, \

src/sonic_ax_impl/mibs/vendor/cisco/ciscoPfcExtMIB.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,12 @@ def update_data(self):
4747
for sai_id_key in self.if_id_map:
4848
namespace, sai_id = mibs.split_sai_id_key(sai_id_key)
4949
if_idx = mibs.get_index_from_str(self.if_id_map[sai_id_key])
50-
self.if_counters[if_idx] = self.namespace_db_map[namespace].get_all(mibs.COUNTERS_DB, \
51-
mibs.counter_table(sai_id), blocking=True)
50+
counter_table = self.namespace_db_map[namespace].get_all(mibs.COUNTERS_DB, \
51+
mibs.counter_table(sai_id))
52+
if counter_table is None:
53+
counter_table = {}
54+
self.if_counters[if_idx] = counter_table
55+
5256

5357
self.lag_name_if_name_map, \
5458
self.if_name_lag_name_map, \

tests/mock_tables/counters_db.json

Lines changed: 0 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -203,108 +203,6 @@
203203
"SAI_PORT_STAT_PFC_7_RX_PKTS": "8",
204204
"SAI_PORT_STAT_PFC_7_TX_PKTS": "8"
205205
},
206-
"COUNTERS:oid:0x1000000000020": {
207-
"SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0",
208-
"SAI_PORT_STAT_ETHER_STATS_OVERSIZE_PKTS": "0",
209-
"SAI_PORT_STAT_IF_OUT_ERRORS": "0",
210-
"SAI_PORT_STAT_ETHER_TX_OVERSIZE_PKTS": "0",
211-
"SAI_PORT_STAT_ETHER_STATS_PKTS_1519_TO_2047_OCTETS": "0",
212-
"SAI_PORT_STAT_IP_IN_RECEIVES": "0",
213-
"SAI_PORT_STAT_ETHER_IN_PKTS_64_OCTETS": "0",
214-
"SAI_PORT_STAT_IPV6_OUT_UCAST_PKTS": "0",
215-
"SAI_PORT_STAT_ETHER_OUT_PKTS_4096_TO_9216_OCTETS": "0",
216-
"SAI_PORT_STAT_IF_IN_ERRORS": "0",
217-
"SAI_PORT_STAT_ETHER_STATS_PKTS": "0",
218-
"SAI_PORT_STAT_ETHER_STATS_BROADCAST_PKTS": "0",
219-
"SAI_PORT_STAT_IF_IN_DISCARDS": "0",
220-
"SAI_PORT_STAT_IP_OUT_DISCARDS": "0",
221-
"SAI_PORT_STAT_IF_IN_UNKNOWN_PROTOS": "0",
222-
"SAI_PORT_STAT_IPV6_IN_DISCARDS": "0",
223-
"SAI_PORT_STAT_IPV6_OUT_DISCARDS": "0",
224-
"SAI_PORT_STAT_IPV6_IN_OCTETS": "0",
225-
"SAI_PORT_STAT_ETHER_OUT_PKTS_65_TO_127_OCTETS": "0",
226-
"SAI_PORT_STAT_IF_IN_BROADCAST_PKTS": "0",
227-
"SAI_PORT_STAT_ETHER_IN_PKTS_1519_TO_2047_OCTETS": "0",
228-
"SAI_PORT_STAT_IF_OUT_MULTICAST_PKTS": "0",
229-
"SAI_PORT_STAT_ETHER_OUT_PKTS_512_TO_1023_OCTETS": "0",
230-
"SAI_PORT_STAT_ETHER_STATS_PKTS_256_TO_511_OCTETS": "0",
231-
"SAI_PORT_STAT_ETHER_STATS_PKTS_9217_TO_16383_OCTETS": "0",
232-
"SAI_PORT_STAT_ETHER_IN_PKTS_512_TO_1023_OCTETS": "0",
233-
"SAI_PORT_STAT_IPV6_IN_NON_UCAST_PKTS": "0",
234-
"SAI_PORT_STAT_ETHER_IN_PKTS_4096_TO_9216_OCTETS": "0",
235-
"SAI_PORT_STAT_IF_OUT_BROADCAST_PKTS": "0",
236-
"SAI_PORT_STAT_IPV6_OUT_NON_UCAST_PKTS": "0",
237-
"SAI_PORT_STAT_IF_IN_VLAN_DISCARDS": "0",
238-
"SAI_PORT_STAT_ETHER_IN_PKTS_65_TO_127_OCTETS": "0",
239-
"SAI_PORT_STAT_IP_IN_NON_UCAST_PKTS": "0",
240-
"SAI_PORT_STAT_ETHER_STATS_FRAGMENTS": "0",
241-
"SAI_PORT_STAT_IPV6_IN_UCAST_PKTS": "0",
242-
"SAI_PORT_STAT_IPV6_IN_RECEIVES": "0",
243-
"SAI_PORT_STAT_ETHER_STATS_PKTS_4096_TO_9216_OCTETS": "0",
244-
"SAI_PORT_STAT_IF_OUT_DISCARDS": "0",
245-
"SAI_PORT_STAT_ETHER_STATS_DROP_EVENTS": "0",
246-
"SAI_PORT_STAT_IPV6_OUT_MCAST_PKTS": "0",
247-
"SAI_PORT_STAT_ETHER_RX_OVERSIZE_PKTS": "0",
248-
"SAI_PORT_STAT_IF_OUT_OCTETS": "0",
249-
"SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS": "0",
250-
"SAI_PORT_STAT_ETHER_IN_PKTS_9217_TO_16383_OCTETS": "0",
251-
"SAI_PORT_STAT_ETHER_OUT_PKTS_1024_TO_1518_OCTETS": "0",
252-
"SAI_PORT_STAT_ETHER_STATS_PKTS_2048_TO_4095_OCTETS": "0",
253-
"SAI_PORT_STAT_ETHER_STATS_PKTS_512_TO_1023_OCTETS": "0",
254-
"SAI_PORT_STAT_ETHER_OUT_PKTS_1519_TO_2047_OCTETS": "0",
255-
"SAI_PORT_STAT_ETHER_STATS_RX_NO_ERRORS": "0",
256-
"SAI_PORT_STAT_ETHER_OUT_PKTS_64_OCTETS": "0",
257-
"SAI_PORT_STAT_ETHER_STATS_COLLISIONS": "0",
258-
"SAI_PORT_STAT_ETHER_IN_PKTS_1024_TO_1518_OCTETS": "0",
259-
"SAI_PORT_STAT_ETHER_STATS_PKTS_1024_TO_1518_OCTETS": "0",
260-
"SAI_PORT_STAT_ETHER_IN_PKTS_256_TO_511_OCTETS": "0",
261-
"SAI_PORT_STAT_ETHER_OUT_PKTS_2048_TO_4095_OCTETS": "0",
262-
"SAI_PORT_STAT_ETHER_STATS_OCTETS": "0",
263-
"SAI_PORT_STAT_IF_OUT_UCAST_PKTS": "0",
264-
"SAI_PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS": "0",
265-
"SAI_PORT_STAT_ETHER_OUT_PKTS_128_TO_255_OCTETS": "0",
266-
"SAI_PORT_STAT_ETHER_STATS_PKTS_64_OCTETS": "0",
267-
"SAI_PORT_STAT_IP_OUT_OCTETS": "0",
268-
"SAI_PORT_STAT_IF_IN_UCAST_PKTS": "0",
269-
"SAI_PORT_STAT_ETHER_OUT_PKTS_9217_TO_16383_OCTETS": "0",
270-
"SAI_PORT_STAT_ETHER_IN_PKTS_2048_TO_4095_OCTETS": "0",
271-
"SAI_PORT_STAT_IP_OUT_NON_UCAST_PKTS": "0",
272-
"SAI_PORT_STAT_ETHER_STATS_JABBERS": "0",
273-
"SAI_PORT_STAT_IF_IN_OCTETS": "0",
274-
"SAI_PORT_STAT_IPV6_IN_MCAST_PKTS": "0",
275-
"SAI_PORT_STAT_ETHER_STATS_PKTS_65_TO_127_OCTETS": "0",
276-
"SAI_PORT_STAT_IF_OUT_QLEN": "0",
277-
"SAI_PORT_STAT_ETHER_STATS_PKTS_128_TO_255_OCTETS": "0",
278-
"SAI_PORT_STAT_IP_IN_DISCARDS": "0",
279-
"SAI_PORT_STAT_IPV6_OUT_OCTETS": "0",
280-
"SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS": "0",
281-
"SAI_PORT_STAT_IP_IN_OCTETS": "0",
282-
"SAI_PORT_STAT_ETHER_OUT_PKTS_256_TO_511_OCTETS": "0",
283-
"SAI_PORT_STAT_ETHER_STATS_CRC_ALIGN_ERRORS": "0",
284-
"SAI_PORT_STAT_IP_OUT_UCAST_PKTS": "0",
285-
"SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0",
286-
"SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0",
287-
"SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0",
288-
"SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0",
289-
"SAI_PORT_STAT_PAUSE_RX_PKTS": "0",
290-
"SAI_PORT_STAT_PAUSE_TX_PKTS": "0",
291-
"SAI_PORT_STAT_PFC_0_RX_PKTS": "1",
292-
"SAI_PORT_STAT_PFC_0_TX_PKTS": "1",
293-
"SAI_PORT_STAT_PFC_1_RX_PKTS": "2",
294-
"SAI_PORT_STAT_PFC_1_TX_PKTS": "2",
295-
"SAI_PORT_STAT_PFC_2_RX_PKTS": "3",
296-
"SAI_PORT_STAT_PFC_2_TX_PKTS": "3",
297-
"SAI_PORT_STAT_PFC_3_RX_PKTS": "4",
298-
"SAI_PORT_STAT_PFC_3_TX_PKTS": "4",
299-
"SAI_PORT_STAT_PFC_4_RX_PKTS": "5",
300-
"SAI_PORT_STAT_PFC_4_TX_PKTS": "5",
301-
"SAI_PORT_STAT_PFC_5_RX_PKTS": "6",
302-
"SAI_PORT_STAT_PFC_5_TX_PKTS": "6",
303-
"SAI_PORT_STAT_PFC_6_RX_PKTS": "7",
304-
"SAI_PORT_STAT_PFC_6_TX_PKTS": "7",
305-
"SAI_PORT_STAT_PFC_7_RX_PKTS": "8",
306-
"SAI_PORT_STAT_PFC_7_TX_PKTS": "8"
307-
},
308206
"COUNTERS:oid:0x1000000000021": {
309207
"SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0",
310208
"SAI_PORT_STAT_ETHER_STATS_OVERSIZE_PKTS": "0",

tests/mock_tables/dbconnector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def connect_SonicV2Connector(self, db_name, retry_on=True):
6565
_old_connect_SonicV2Connector(self, db_name, retry_on)
6666

6767

68-
def _subscribe_keyspace_notification(self, db_name, client):
68+
def _subscribe_keyspace_notification(self, db_name):
6969
pass
7070

7171

0 commit comments

Comments
 (0)