45ded68d8d
#### Why I did it Fix docker-database flush_unused_database failed issue: https://github.com/Azure/sonic-buildimage/issues/11597 When change flush_unused_database from use swsssdk to use swsscommon, get_instancelist() and get_dblist() name changed but not update. #### How I did it Change flush_unused_database code to use swsscommon API: Change get_instancelist to getInstanceList. Change get_dblist to getDbList. #### How to verify it Pass all E2E test. Manually check syslog make sure error log not exist and swss, syncd, bgp service started. Search code in Azure make sure there all similer case are fixed in this PR. #### Which release branch to backport (provide reason below if selected) <!-- - Note we only backport fixes to a release branch, *not* features! - Please also provide a reason for the backporting below. - e.g. - [x] 202006 --> - [ ] 201811 - [ ] 201911 - [ ] 202006 - [ ] 202012 - [ ] 202106 - [ ] 202111 - [ ] 202205 #### Description for the changelog Fix docker-database flush_unused_database failed issue: https://github.com/Azure/sonic-buildimage/issues/11597 When change flush_unused_database from use swsssdk to use swsscommon, get_instancelist() and get_dblist() name changed but not update. #### Link to config_db schema for YANG module changes <!-- Provide a link to config_db schema for the table for which YANG model is defined Link should point to correct section on https://github.com/Azure/sonic-buildimage/blob/master/src/sonic-yang-models/doc/Configuration.md --> #### A picture of a cute animal (not mandatory but encouraged) Co-authored-by: liuh-80 <azureuser@liuh-dev-vm-02.5fg3zjdzj2xezlx1yazx5oxkzd.hx.internal.cloudapp.net>
33 lines
1.0 KiB
Python
Executable File
33 lines
1.0 KiB
Python
Executable File
#!/usr/bin/python3
|
|
from swsscommon import swsscommon
|
|
import redis
|
|
import subprocess
|
|
import time
|
|
import syslog
|
|
|
|
while(True):
|
|
output = subprocess.Popen(['sonic-db-cli', 'PING'], stdout=subprocess.PIPE, text=True).communicate()[0]
|
|
if 'PONG' in output:
|
|
break
|
|
time.sleep(1)
|
|
|
|
instlists = swsscommon.SonicDBConfig.getInstanceList()
|
|
for instname, v in instlists.items():
|
|
insthost = v.hostname
|
|
instsocket = v.unixSocketPath
|
|
|
|
dblists = swsscommon.SonicDBConfig.getDbList()
|
|
for dbname in dblists:
|
|
dbid = swsscommon.SonicDBConfig.getDbId(dbname)
|
|
dbinst = swsscommon.SonicDBConfig.getDbInst(dbname)
|
|
|
|
# this DB is on current instance, skip flush
|
|
if dbinst == instname:
|
|
continue
|
|
|
|
try:
|
|
r = redis.Redis(host=insthost, unix_socket_path=instsocket, db=dbid)
|
|
r.flushdb()
|
|
except (redis.exceptions.ConnectionError):
|
|
syslog.syslog(syslog.LOG_INFO,"flushdb:Redis Unix Socket connection error for path {} and dbaname {}".format(instsocket, dbname))
|