[MultiDB] use sonic-db-cli PING and fix wrong multiDB API in NAT (#4541)
This commit is contained in:
parent
2db87669c2
commit
340cf826a6
@ -34,7 +34,6 @@ RUN apt-get clean -y && \
|
|||||||
|
|
||||||
COPY ["supervisord.conf.j2", "/usr/share/sonic/templates/"]
|
COPY ["supervisord.conf.j2", "/usr/share/sonic/templates/"]
|
||||||
COPY ["docker-database-init.sh", "/usr/local/bin/"]
|
COPY ["docker-database-init.sh", "/usr/local/bin/"]
|
||||||
COPY ["ping_pong_db_insts", "/usr/local/bin/"]
|
|
||||||
COPY ["database_config.json", "/etc/default/sonic-db/"]
|
COPY ["database_config.json", "/etc/default/sonic-db/"]
|
||||||
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
|
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
|
||||||
COPY ["critical_processes", "/etc/supervisor"]
|
COPY ["critical_processes", "/etc/supervisor"]
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
import syslog
|
|
||||||
|
|
||||||
def ping_redis(cmd):
|
|
||||||
output = ''
|
|
||||||
while True:
|
|
||||||
try:
|
|
||||||
output = subprocess.check_output(cmd, shell=True)
|
|
||||||
except subprocess.CalledProcessError as e:
|
|
||||||
syslog.syslog(syslog.LOG_ERR, 'ping redis failed, cmd : {}'.format(cmd))
|
|
||||||
|
|
||||||
if 'PONG' in output:
|
|
||||||
break
|
|
||||||
syslog.syslog(syslog.LOG_ERR, 'ping response : {}'.format(output))
|
|
||||||
time.sleep(1)
|
|
||||||
|
|
||||||
database_config_file = "/var/run/redis/sonic-db/database_config.json"
|
|
||||||
|
|
||||||
data = {}
|
|
||||||
while True:
|
|
||||||
if os.path.isfile(database_config_file):
|
|
||||||
with open(database_config_file, "r") as read_file:
|
|
||||||
data = json.load(read_file)
|
|
||||||
break
|
|
||||||
time.sleep(1)
|
|
||||||
syslog.syslog(syslog.LOG_ERR, 'config file {} does not exist right now'.format(database_config_file))
|
|
||||||
|
|
||||||
while True:
|
|
||||||
if 'INSTANCES' in data:
|
|
||||||
for inst in data["INSTANCES"]:
|
|
||||||
port = data["INSTANCES"][inst]["port"]
|
|
||||||
cmd = "redis-cli -p " + str(port) + " ping"
|
|
||||||
ping_redis(cmd)
|
|
||||||
break
|
|
||||||
time.sleep(1)
|
|
||||||
syslog.syslog(syslog.LOG_ERR, 'config file {} does not have INSTANCES'.format(database_config_file))
|
|
@ -24,7 +24,6 @@ NAT_WARM_BOOT_FILE = 'nat_entries.dump'
|
|||||||
IP_PROTO_TCP = '6'
|
IP_PROTO_TCP = '6'
|
||||||
|
|
||||||
MATCH_CONNTRACK_ENTRY = '^(\w+)\s+(\d+).*src=([\d.]+)\s+dst=([\d.]+)\s+sport=(\d+)\s+dport=(\d+).*src=([\d.]+)\s+dst=([\d.]+)\s+sport=(\d+)\s+dport=(\d+)'
|
MATCH_CONNTRACK_ENTRY = '^(\w+)\s+(\d+).*src=([\d.]+)\s+dst=([\d.]+)\s+sport=(\d+)\s+dport=(\d+).*src=([\d.]+)\s+dst=([\d.]+)\s+sport=(\d+)\s+dport=(\d+)'
|
||||||
REDIS_SOCK = "/var/run/redis/redis.sock"
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
logger.setLevel(logging.INFO)
|
logger.setLevel(logging.INFO)
|
||||||
@ -44,7 +43,7 @@ def add_nat_conntrack_entry_in_kernel(ipproto, srcip, dstip, srcport, dstport, n
|
|||||||
|
|
||||||
# Set the statedb "NAT_RESTORE_TABLE|Flags", so natsyncd can start reconciliation
|
# Set the statedb "NAT_RESTORE_TABLE|Flags", so natsyncd can start reconciliation
|
||||||
def set_statedb_nat_restore_done():
|
def set_statedb_nat_restore_done():
|
||||||
statedb = swsscommon.DBConnector(swsscommon.STATE_DB, REDIS_SOCK, 0)
|
statedb = swsscommon.DBConnector("STATE_DB", 0)
|
||||||
tbl = swsscommon.Table(statedb, "NAT_RESTORE_TABLE")
|
tbl = swsscommon.Table(statedb, "NAT_RESTORE_TABLE")
|
||||||
fvs = swsscommon.FieldValuePairs([("restored", "true")])
|
fvs = swsscommon.FieldValuePairs([("restored", "true")])
|
||||||
tbl.set("Flags", fvs)
|
tbl.set("Flags", fvs)
|
||||||
|
@ -78,7 +78,11 @@ function postStartAction()
|
|||||||
link_namespace $DEV
|
link_namespace $DEV
|
||||||
fi
|
fi
|
||||||
# Wait until redis starts
|
# Wait until redis starts
|
||||||
/usr/bin/docker exec database$DEV ping_pong_db_insts
|
# TODO: should use $SONIC_DB_CLI if Judy's PR 4477 is in first, otherwise PR 4477 should change this part
|
||||||
|
until [[ $(/usr/bin/sonic-netns-exec "$NET_NS" sonic-db-cli PING | grep -c PONG) -gt 0 ]]; do
|
||||||
|
sleep 1;
|
||||||
|
done
|
||||||
|
|
||||||
if [[ ("$BOOT_TYPE" == "warm" || "$BOOT_TYPE" == "fastfast") && -f $WARM_DIR/dump.rdb ]]; then
|
if [[ ("$BOOT_TYPE" == "warm" || "$BOOT_TYPE" == "fastfast") && -f $WARM_DIR/dump.rdb ]]; then
|
||||||
rm -f $WARM_DIR/dump.rdb
|
rm -f $WARM_DIR/dump.rdb
|
||||||
else
|
else
|
||||||
|
@ -29,7 +29,9 @@ function wait_for_database_service()
|
|||||||
debug "Wait for database to become ready..."
|
debug "Wait for database to become ready..."
|
||||||
|
|
||||||
# Wait for redis server start before database clean
|
# Wait for redis server start before database clean
|
||||||
/usr/bin/docker exec database ping_pong_db_insts
|
until [[ $(sonic-db-cli PING | grep -c PONG) -gt 0 ]]; do
|
||||||
|
sleep 1;
|
||||||
|
done
|
||||||
|
|
||||||
# Wait for configDB initialization
|
# Wait for configDB initialization
|
||||||
until [[ $(sonic-db-cli CONFIG_DB GET "CONFIG_DB_INITIALIZED") ]];
|
until [[ $(sonic-db-cli CONFIG_DB GET "CONFIG_DB_INITIALIZED") ]];
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Wait until redis starts
|
# Wait until redis starts
|
||||||
until [[ $(redis-cli ping | grep -c PONG) -gt 0 ]]; do
|
until [[ $(sonic-db-cli PING | grep -c PONG) -gt 0 ]]; do
|
||||||
sleep 1;
|
sleep 1;
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -51,7 +51,10 @@ function validate_restore_count()
|
|||||||
function wait_for_database_service()
|
function wait_for_database_service()
|
||||||
{
|
{
|
||||||
# Wait for redis server start before database clean
|
# Wait for redis server start before database clean
|
||||||
/usr/bin/docker exec database$DEV ping_pong_db_insts
|
# TODO: should use $SONIC_DB_CLI if Judy's PR 4477 is in first, otherwise PR 4477 should change this part
|
||||||
|
until [[ $(/usr/bin/sonic-netns-exec "$NET_NS" sonic-db-cli PING | grep -c PONG) -gt 0 ]]; do
|
||||||
|
sleep 1;
|
||||||
|
done
|
||||||
|
|
||||||
# Wait for configDB initialization
|
# Wait for configDB initialization
|
||||||
until [[ $(sonic-netns-exec "$NET_NS" sonic-db-cli CONFIG_DB GET "CONFIG_DB_INITIALIZED") ]];
|
until [[ $(sonic-netns-exec "$NET_NS" sonic-db-cli CONFIG_DB GET "CONFIG_DB_INITIALIZED") ]];
|
||||||
|
@ -39,7 +39,10 @@ function check_warm_boot()
|
|||||||
function wait_for_database_service()
|
function wait_for_database_service()
|
||||||
{
|
{
|
||||||
# Wait for redis server start before database clean
|
# Wait for redis server start before database clean
|
||||||
/usr/bin/docker exec database$DEV ping_pong_db_insts
|
# TODO: should use $SONIC_DB_CLI if Judy's PR 4477 is in first, otherwise PR 4477 should change this part
|
||||||
|
until [[ $(/usr/bin/sonic-netns-exec "$NET_NS" sonic-db-cli PING | grep -c PONG) -gt 0 ]]; do
|
||||||
|
sleep 1;
|
||||||
|
done
|
||||||
|
|
||||||
# Wait for configDB initialization
|
# Wait for configDB initialization
|
||||||
until [[ $(sonic-netns-exec "$NET_NS" sonic-db-cli CONFIG_DB GET "CONFIG_DB_INITIALIZED") ]];
|
until [[ $(sonic-netns-exec "$NET_NS" sonic-db-cli CONFIG_DB GET "CONFIG_DB_INITIALIZED") ]];
|
||||||
|
Reference in New Issue
Block a user