Skip to content

Commit fe5dffe

Browse files
committed
Merge remote-tracking branch 'msft_github/master'
* msft_github/master: Add delete() and delete_all_by_pattern() methods to DBInterface class (sonic-net#32) Add support for deleting table (sonic-net#31) Get Vlan Id from BVID object (sonic-net#30) add publish interface for DBInterface (sonic-net#29)
2 parents 103b7ef + ca540c9 commit fe5dffe

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

src/swsssdk/configdb.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,18 @@ def get_table(self, table):
238238
pass #Ignore non table-formated redis entries
239239
return data
240240

241+
def delete_table(self, table):
242+
"""Delete an entire table from config db.
243+
Args:
244+
table: Table name.
245+
"""
246+
client = self.redis_clients[self.CONFIG_DB]
247+
pattern = '{}{}*'.format(table.upper(), self.TABLE_NAME_SEPARATOR)
248+
keys = client.keys(pattern)
249+
data = {}
250+
for key in keys:
251+
client.delete(key)
252+
241253
def mod_config(self, data):
242254
"""Write multiple tables into config db.
243255
Extra entries/fields in the db which are not in the data are kept.

src/swsssdk/interface.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,13 @@ def get_redis_client(self, db_name):
254254
"""
255255
return self.redis_clients[db_name]
256256

257+
def publish(self, db_name, channel, message):
258+
"""
259+
Publish message via the channel
260+
"""
261+
client = self.redis_clients[db_name]
262+
return client.publish(channel, message)
263+
257264
@blockable
258265
def keys(self, db_name, pattern='*'):
259266
"""
@@ -314,6 +321,26 @@ def set(self, db_name, _hash, key, val):
314321
client = self.redis_clients[db_name]
315322
return client.hset(_hash, key, val)
316323

324+
@blockable
325+
def delete(self, db_name, key):
326+
"""
327+
Delete %key from DB %db_name
328+
Parameter %blocking indicates whether to retry in case of failure
329+
"""
330+
client = self.redis_clients[db_name]
331+
return client.delete(key)
332+
333+
@blockable
334+
def delete_all_by_pattern(self, db_name, pattern):
335+
"""
336+
Delete all keys which match %pattern from DB %db_name
337+
Parameter %blocking indicates whether to retry in case of failure
338+
"""
339+
client = self.redis_clients[db_name]
340+
keys = client.keys(pattern)
341+
for key in keys:
342+
client.delete(key)
343+
317344
def _unavailable_data_handler(self, db_name, data):
318345
"""
319346
When the queried config is not available in Redis--wait until it is available.

src/swsssdk/port_util.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,14 @@ def get_bridge_port_map(db):
6969

7070
return if_br_oid_map
7171

72+
def get_vlan_id_from_bvid(db, bvid):
73+
"""
74+
Get the Vlan Id from Bridge Vlan Object
75+
"""
76+
db.connect('ASIC_DB')
77+
vlan_obj = db.keys('ASIC_DB', "ASIC_STATE:SAI_OBJECT_TYPE_VLAN:" + bvid)
78+
vlan_entry = db.get_all('ASIC_DB', vlan_obj[0], blocking=True)
79+
vlan_id = vlan_entry[b"SAI_VLAN_ATTR_VLAN_ID"]
80+
81+
return vlan_id
82+

0 commit comments

Comments
 (0)