#!/usr/bin/python3 from swsscommon import swsscommon 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: # Migrate code from py-redis to swsscommon, original code: # r = redis.Redis(host=insthost, unix_socket_path=instsocket, db=dbid) # py-redis will use TCP connection when unix_socket_path is None # https://github.com/redis/redis-py/blob/d95d8a24ed2af3eae80b7b0f14cbccc9dbe86e96/redis/client.py#L1006 if instsocket is not None: # connect with Unix socket connector = swsscommon.DBConnector(dbid, instsocket, 0) else: # connect with TCP socket port = swsscommon.SonicDBConfig.getDbPort(dbname); connector = swsscommon.DBConnector(dbid, insthost, port, 0) connector.flushdb() except RuntimeError: syslog.syslog(syslog.LOG_INFO,"flushdb:Redis Unix Socket connection error for path {} and dbaname {}".format(instsocket, dbname))