Skip to content

Commit 57e54d9

Browse files
authored
Interact with Redis by str instead of bytes, migrate to SonicV2Connector with decode_responses=True (#171)
* Interact with Redis by str instead of bytes * Implement mockredis decode_responses option
1 parent 4ab6e41 commit 57e54d9

17 files changed

Lines changed: 182 additions & 164 deletions

src/sonic_ax_impl/mibs/__init__.py

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
from swsssdk import SonicV2Connector
66
from swsssdk import SonicDBConfig
77
from swsssdk import port_util
8-
from swsssdk.port_util import get_index, get_index_from_str
8+
from swsssdk.port_util import get_index_from_str
99
from ax_interface.mib import MIBUpdater
1010
from ax_interface.util import oid2tuple
1111
from sonic_ax_impl import logger
1212

13-
COUNTERS_PORT_NAME_MAP = b'COUNTERS_PORT_NAME_MAP'
14-
COUNTERS_QUEUE_NAME_MAP = b'COUNTERS_QUEUE_NAME_MAP'
15-
LAG_TABLE = b'LAG_TABLE'
16-
LAG_MEMBER_TABLE = b'LAG_MEMBER_TABLE'
17-
LOC_CHASSIS_TABLE = b'LLDP_LOC_CHASSIS'
13+
COUNTERS_PORT_NAME_MAP = 'COUNTERS_PORT_NAME_MAP'
14+
COUNTERS_QUEUE_NAME_MAP = 'COUNTERS_QUEUE_NAME_MAP'
15+
LAG_TABLE = 'LAG_TABLE'
16+
LAG_MEMBER_TABLE = 'LAG_MEMBER_TABLE'
17+
LOC_CHASSIS_TABLE = 'LLDP_LOC_CHASSIS'
1818
APPL_DB = 'APPL_DB'
1919
ASIC_DB = 'ASIC_DB'
2020
COUNTERS_DB = 'COUNTERS_DB'
@@ -78,14 +78,14 @@ def counter_table(sai_id):
7878
:param if_name: given sai_id to cast.
7979
:return: COUNTERS table key.
8080
"""
81-
return b'COUNTERS:oid:0x' + sai_id
81+
return 'COUNTERS:oid:0x' + sai_id
8282

8383
def queue_table(sai_id):
8484
"""
8585
:param sai_id: given sai_id to cast.
8686
:return: COUNTERS table key.
8787
"""
88-
return b'COUNTERS:' + sai_id
88+
return 'COUNTERS:' + sai_id
8989

9090
def queue_key(port_index, queue_index):
9191
return str(port_index) + ':' + str(queue_index)
@@ -111,23 +111,23 @@ def lldp_entry_table(if_name):
111111
:param if_name: given interface to cast.
112112
:return: LLDP_ENTRY_TABLE key.
113113
"""
114-
return b'LLDP_ENTRY_TABLE:' + if_name
114+
return 'LLDP_ENTRY_TABLE:' + if_name
115115

116116

117117
def if_entry_table(if_name):
118118
"""
119119
:param if_name: given interface to cast.
120120
:return: PORT_TABLE key.
121121
"""
122-
return b'PORT_TABLE:' + if_name
122+
return 'PORT_TABLE:' + if_name
123123

124124

125125
def lag_entry_table(lag_name):
126126
"""
127127
:param lag_name: given lag to cast.
128128
:return: LAG_TABLE key.
129129
"""
130-
return b'LAG_TABLE:' + lag_name
130+
return 'LAG_TABLE:' + lag_name
131131

132132

133133
def mgmt_if_entry_table(if_name):
@@ -136,7 +136,7 @@ def mgmt_if_entry_table(if_name):
136136
:return: MGMT_PORT_TABLE key
137137
"""
138138

139-
return b'MGMT_PORT|' + if_name
139+
return 'MGMT_PORT|' + if_name
140140

141141

142142
def mgmt_if_entry_table_state_db(if_name):
@@ -145,7 +145,7 @@ def mgmt_if_entry_table_state_db(if_name):
145145
:return: MGMT_PORT_TABLE key
146146
"""
147147

148-
return b'MGMT_PORT_TABLE|' + if_name
148+
return 'MGMT_PORT_TABLE|' + if_name
149149

150150
def get_sai_id_key(namespace, sai_id):
151151
"""
@@ -157,7 +157,7 @@ def get_sai_id_key(namespace, sai_id):
157157
Return value: namespace:sai id or sai id
158158
"""
159159
if namespace != '':
160-
return namespace.encode() + b':' + sai_id
160+
return namespace + ':' + sai_id
161161
else:
162162
return sai_id
163163

@@ -166,15 +166,16 @@ def split_sai_id_key(sai_id_key):
166166
Input - bytes
167167
Return namespace string and sai id in byte string.
168168
"""
169-
result = sai_id_key.split(b':')
169+
result = sai_id_key.split(':')
170170
if len(result) == 1:
171171
return '', sai_id_key
172172
else:
173-
return result[0].decode(), result[1]
173+
return result[0], result[1]
174174

175175
def config(**kwargs):
176176
global redis_kwargs
177177
redis_kwargs = {k:v for (k,v) in kwargs.items() if k in ['unix_socket_path', 'host', 'port']}
178+
redis_kwargs['decode_responses'] = True
178179

179180
def init_db():
180181
"""
@@ -198,21 +199,21 @@ def init_mgmt_interface_tables(db_conn):
198199
db_conn.connect(CONFIG_DB)
199200
db_conn.connect(STATE_DB)
200201

201-
mgmt_ports_keys = db_conn.keys(CONFIG_DB, mgmt_if_entry_table(b'*'))
202+
mgmt_ports_keys = db_conn.keys(CONFIG_DB, mgmt_if_entry_table('*'))
202203

203204
if not mgmt_ports_keys:
204-
logger.debug('No managment ports found in {}'.format(mgmt_if_entry_table(b'')))
205+
logger.debug('No managment ports found in {}'.format(mgmt_if_entry_table('')))
205206
return {}, {}
206207

207-
mgmt_ports = [key.split(mgmt_if_entry_table(b''))[-1] for key in mgmt_ports_keys]
208-
oid_name_map = {get_index(mgmt_name): mgmt_name for mgmt_name in mgmt_ports}
208+
mgmt_ports = [key.split(mgmt_if_entry_table(''))[-1] for key in mgmt_ports_keys]
209+
oid_name_map = {get_index_from_str(mgmt_name): mgmt_name for mgmt_name in mgmt_ports}
209210
logger.debug('Managment port map:\n' + pprint.pformat(oid_name_map, indent=2))
210211

211212
if_alias_map = dict()
212213

213214
for if_name in oid_name_map.values():
214215
if_entry = db_conn.get_all(CONFIG_DB, mgmt_if_entry_table(if_name), blocking=True)
215-
if_alias_map[if_name] = if_entry.get(b'alias', if_name)
216+
if_alias_map[if_name] = if_entry.get('alias', if_name)
216217

217218
logger.debug("Management alias map:\n" + pprint.pformat(if_alias_map, indent=2))
218219

@@ -230,7 +231,7 @@ def init_sync_d_interface_tables(db_conn):
230231
# ex: { "Ethernet76" : "1000000000023" }
231232
if_name_map_util, if_id_map_util = port_util.get_interface_oid_map(db_conn)
232233
for if_name, sai_id in if_name_map_util.items():
233-
if_name_str = if_name.decode()
234+
if_name_str = if_name
234235
if (re.match(port_util.SONIC_ETHERNET_RE_PATTERN, if_name_str) or \
235236
re.match(port_util.SONIC_ETHERNET_BP_RE_PATTERN, if_name_str)):
236237
if_name_map[if_name] = sai_id
@@ -239,17 +240,16 @@ def init_sync_d_interface_tables(db_conn):
239240
# string or in sai id.
240241
# sai_id_key = namespace : sai_id
241242
for sai_id, if_name in if_id_map_util.items():
242-
if_name = if_name.decode()
243243
if (re.match(port_util.SONIC_ETHERNET_RE_PATTERN, if_name) or \
244244
re.match(port_util.SONIC_ETHERNET_BP_RE_PATTERN, if_name)):
245245
if_id_map[get_sai_id_key(db_conn.namespace, sai_id)] = if_name
246246
logger.debug("Port name map:\n" + pprint.pformat(if_name_map, indent=2))
247247
logger.debug("Interface name map:\n" + pprint.pformat(if_id_map, indent=2))
248248

249249
# { OID -> if_name (SONiC) }
250-
oid_name_map = {get_index(if_name): if_name for if_name in if_name_map
250+
oid_name_map = {get_index_from_str(if_name): if_name for if_name in if_name_map
251251
# only map the interface if it's a style understood to be a SONiC interface.
252-
if get_index(if_name) is not None}
252+
if get_index_from_str(if_name) is not None}
253253

254254
logger.debug("OID name map:\n" + pprint.pformat(oid_name_map, indent=2))
255255

@@ -272,7 +272,7 @@ def init_sync_d_interface_tables(db_conn):
272272

273273
for if_name in if_name_map:
274274
if_entry = db_conn.get_all(APPL_DB, if_entry_table(if_name), blocking=True)
275-
if_alias_map[if_name] = if_entry.get(b'alias', if_name)
275+
if_alias_map[if_name] = if_entry.get('alias', if_name)
276276

277277
logger.debug("Chassis name map:\n" + pprint.pformat(if_alias_map, indent=2))
278278

@@ -295,28 +295,28 @@ def init_sync_d_lag_tables(db_conn):
295295

296296
db_conn.connect(APPL_DB)
297297

298-
lag_entries = db_conn.keys(APPL_DB, b"LAG_TABLE:*")
298+
lag_entries = db_conn.keys(APPL_DB, "LAG_TABLE:*")
299299

300300
if not lag_entries:
301301
return lag_name_if_name_map, if_name_lag_name_map, oid_lag_name_map
302302

303303
for lag_entry in lag_entries:
304-
lag_name = lag_entry[len(b"LAG_TABLE:"):]
305-
lag_members = db_conn.keys(APPL_DB, b"LAG_MEMBER_TABLE:%s:*" % lag_name)
304+
lag_name = lag_entry[len("LAG_TABLE:"):]
305+
lag_members = db_conn.keys(APPL_DB, "LAG_MEMBER_TABLE:%s:*" % lag_name)
306306
# TODO: db_conn.keys() should really return [] instead of None
307307
if lag_members is None:
308308
lag_members = []
309309

310310
def member_name_str(val, lag_name):
311-
return val[len(b"LAG_MEMBER_TABLE:%s:" % lag_name):]
311+
return val[len("LAG_MEMBER_TABLE:%s:" % lag_name):]
312312

313313
lag_member_names = [member_name_str(m, lag_name) for m in lag_members]
314314
lag_name_if_name_map[lag_name] = lag_member_names
315315
for lag_member_name in lag_member_names:
316316
if_name_lag_name_map[lag_member_name] = lag_name
317317

318318
for if_name in lag_name_if_name_map.keys():
319-
idx = get_index(if_name)
319+
idx = get_index_from_str(if_name)
320320
if idx:
321321
oid_lag_name_map[idx] = if_name
322322

@@ -342,7 +342,7 @@ def init_sync_d_queue_tables(db_conn):
342342
port_queue_list_map = {}
343343

344344
for queue_name, sai_id in queue_name_map.items():
345-
port_name, queue_index = queue_name.decode().split(':')
345+
port_name, queue_index = queue_name.split(':')
346346
queue_index = ''.join(i for i in queue_index if i.isdigit())
347347
port_index = get_index_from_str(port_name)
348348
key = queue_key(port_index, queue_index)
@@ -464,12 +464,11 @@ def update_data(self):
464464
keys = []
465465

466466
for key in keys:
467-
key = key.decode()
468467
oid = oid2tuple(key, dot_prefix=False)
469468
self.oid_list.append(oid)
470469
value = Namespace.dbs_get_all(self.db_conn, SNMP_OVERLAY_DB, key)
471-
if value[b'type'] in [b'COUNTER_32', b'COUNTER_64']:
472-
self.oid_map[oid] = int(value[b'data'])
470+
if value['type'] in ['COUNTER_32', 'COUNTER_64']:
471+
self.oid_map[oid] = int(value['data'])
473472
else:
474473
raise ValueError("Invalid value type")
475474

@@ -486,7 +485,7 @@ def init_namespace_dbs():
486485
db_conn = []
487486
SonicDBConfig.load_sonic_global_db_config()
488487
for namespace in SonicDBConfig.get_ns_list():
489-
db = SonicV2Connector(use_unix_socket_path=True, namespace=namespace)
488+
db = SonicV2Connector(use_unix_socket_path=True, namespace=namespace, decode_responses=True)
490489
db_conn.append(db)
491490

492491
Namespace.connect_namespace_dbs(db_conn)

src/sonic_ax_impl/mibs/ieee802_1ab.py

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def poll_lldp_entry_updates(pubsub):
7878
return ret
7979

8080
try:
81-
interface = msg["channel"].split(b":")[-1].decode()
81+
interface = msg["channel"].split(":")[-1]
8282
data = msg['data']
8383
except (KeyError, AttributeError) as e:
8484
logger.error("Invalid msg when polling for lldp updates: {}\n"
@@ -112,8 +112,8 @@ def reinit_data(self):
112112
# establish connection to application database.
113113
Namespace.connect_all_dbs(self.db_conn, mibs.APPL_DB)
114114
self.loc_chassis_data = Namespace.dbs_get_all(self.db_conn, mibs.APPL_DB, mibs.LOC_CHASSIS_TABLE)
115-
self.loc_chassis_data[b'lldp_loc_sys_cap_supported'] = parse_sys_capability(self.loc_chassis_data[b'lldp_loc_sys_cap_supported'])
116-
self.loc_chassis_data[b'lldp_loc_sys_cap_enabled'] = parse_sys_capability(self.loc_chassis_data[b'lldp_loc_sys_cap_enabled'])
115+
self.loc_chassis_data['lldp_loc_sys_cap_supported'] = parse_sys_capability(self.loc_chassis_data['lldp_loc_sys_cap_supported'])
116+
self.loc_chassis_data['lldp_loc_sys_cap_enabled'] = parse_sys_capability(self.loc_chassis_data['lldp_loc_sys_cap_enabled'])
117117
def update_data(self):
118118
"""
119119
Avoid NotImplementedError
@@ -123,7 +123,7 @@ def update_data(self):
123123

124124
def table_lookup(self, table_name):
125125
try:
126-
_table_name = bytes(getattr(table_name, 'name', table_name), 'utf-8')
126+
_table_name = getattr(table_name, 'name', table_name)
127127
return self.loc_chassis_data[_table_name]
128128
except KeyError as e:
129129
logger.warning(" 0 - b'LOC_CHASSIS' missing attribute '{}'.".format(e))
@@ -229,13 +229,13 @@ def _update_per_namespace_data(self, pubsub):
229229
if not data:
230230
break
231231

232-
if b"set" in data:
233-
self.update_interface_data(interface.encode())
232+
if "set" in data:
233+
self.update_interface_data(interface)
234234

235235
def update_data(self):
236236
for i in range(len(self.db_conn)):
237237
if not self.pubsub[i]:
238-
pattern = mibs.lldp_entry_table(b'*')
238+
pattern = mibs.lldp_entry_table('*')
239239
self.pubsub[i] = mibs.get_redis_pubsub(self.db_conn[i], self.db_conn[i].APPL_DB, pattern)
240240
self._update_per_namespace_data(self.pubsub[i])
241241

@@ -270,7 +270,7 @@ def port_table_lookup(self, sub_id, table_name):
270270
# no data for this interface
271271
return None
272272
counters = self.loc_port_data[if_name]
273-
_table_name = bytes(getattr(table_name, 'name', table_name), 'utf-8')
273+
_table_name = getattr(table_name, 'name', table_name)
274274

275275
return counters.get(_table_name, '')
276276

@@ -302,13 +302,13 @@ def reinit_data(self):
302302

303303
# establish connection to application database.
304304
self.db_conn.connect(mibs.APPL_DB)
305-
mgmt_ip_bytes = self.db_conn.get(mibs.APPL_DB, mibs.LOC_CHASSIS_TABLE, b'lldp_loc_man_addr')
305+
mgmt_ip_bytes = self.db_conn.get(mibs.APPL_DB, mibs.LOC_CHASSIS_TABLE, 'lldp_loc_man_addr')
306306

307307
if not mgmt_ip_bytes:
308308
logger.warning("Missing lldp_loc_man_addr from APPL DB")
309309
return
310310

311-
self.mgmt_ip_str = mgmt_ip_bytes.decode()
311+
self.mgmt_ip_str = mgmt_ip_bytes
312312
logger.debug("Got mgmt ip from db : {}".format(self.mgmt_ip_str))
313313
try:
314314
addr_subtype_sub_oid = 4
@@ -435,12 +435,12 @@ def update_data(self):
435435
# To avoid repeating the data of same interface index with different remote
436436
# time mark, remote time mark is made as 0 in the OID indexing.
437437
time_mark = 0
438-
remote_index = int(lldp_kvs[b'lldp_rem_index'])
438+
remote_index = int(lldp_kvs['lldp_rem_index'])
439439
self.if_range.append((time_mark,
440440
if_oid,
441441
remote_index))
442-
lldp_kvs[b'lldp_rem_sys_cap_supported'] = parse_sys_capability(lldp_kvs[b'lldp_rem_sys_cap_supported'])
443-
lldp_kvs[b'lldp_rem_sys_cap_enabled'] = parse_sys_capability(lldp_kvs[b'lldp_rem_sys_cap_enabled'])
442+
lldp_kvs['lldp_rem_sys_cap_supported'] = parse_sys_capability(lldp_kvs['lldp_rem_sys_cap_supported'])
443+
lldp_kvs['lldp_rem_sys_cap_enabled'] = parse_sys_capability(lldp_kvs['lldp_rem_sys_cap_enabled'])
444444
self.lldp_counters.update({if_name: lldp_kvs})
445445
except (KeyError, AttributeError) as e:
446446
logger.warning("Exception when updating lldpRemTable: {}".format(e))
@@ -467,7 +467,7 @@ def lldp_table_lookup(self, sub_id, table_name):
467467
# no LLDP data for this interface
468468
return None
469469
counters = self.lldp_counters[if_name]
470-
_table_name = bytes(getattr(table_name, 'name', table_name), 'utf-8')
470+
_table_name = getattr(table_name, 'name', table_name)
471471
try:
472472
return counters[_table_name]
473473
except KeyError as e:
@@ -500,17 +500,17 @@ def __init__(self):
500500

501501
def update_rem_if_mgmt(self, if_oid, if_name):
502502
lldp_kvs = Namespace.dbs_get_all(self.db_conn, mibs.APPL_DB, mibs.lldp_entry_table(if_name))
503-
if not lldp_kvs or b'lldp_rem_man_addr' not in lldp_kvs:
503+
if not lldp_kvs or 'lldp_rem_man_addr' not in lldp_kvs:
504504
# this interfaces doesn't have remote lldp data, or the peer doesn't advertise his mgmt address
505505
return
506506
try:
507-
mgmt_ip_str = lldp_kvs[b'lldp_rem_man_addr'].decode()
507+
mgmt_ip_str = lldp_kvs['lldp_rem_man_addr']
508508
mgmt_ip_str = mgmt_ip_str.strip()
509509
if len(mgmt_ip_str) == 0:
510510
# the peer advertise an emtpy mgmt address
511511
return
512-
time_mark = int(lldp_kvs[b'lldp_rem_time_mark'])
513-
remote_index = int(lldp_kvs[b'lldp_rem_index'])
512+
time_mark = int(lldp_kvs['lldp_rem_time_mark'])
513+
remote_index = int(lldp_kvs['lldp_rem_index'])
514514
subtype = self.get_subtype(mgmt_ip_str)
515515
ip_hex = self.get_ip_hex(mgmt_ip_str, subtype)
516516
if subtype == ManAddrConst.man_addr_subtype_ipv4:
@@ -546,17 +546,17 @@ def _update_per_namespace_data(self, pubsub):
546546
if not data:
547547
break
548548

549-
if b"set" in data:
550-
self.update_rem_if_mgmt(if_index, interface.encode())
551-
elif b"del" in data:
549+
if "set" in data:
550+
self.update_rem_if_mgmt(if_index, interface)
551+
elif "del" in data:
552552
# some remote data about that neighbor is gone, del it and try to query again
553553
self.if_range = [sub_oid for sub_oid in self.if_range if sub_oid[0] != if_index]
554-
self.update_rem_if_mgmt(if_index, interface.encode())
554+
self.update_rem_if_mgmt(if_index, interface)
555555

556556
def update_data(self):
557557
for i in range(len(self.db_conn)):
558558
if not self.pubsub[i]:
559-
pattern = mibs.lldp_entry_table(b'*')
559+
pattern = mibs.lldp_entry_table('*')
560560
self.pubsub[i] = mibs.get_redis_pubsub(self.db_conn[i], self.db_conn[i].APPL_DB, pattern)
561561
self._update_per_namespace_data(self.pubsub[i])
562562

0 commit comments

Comments
 (0)