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>
97 lines
3.7 KiB
Bash
Executable File
97 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# For linux host namespace, in both single and multi ASIC platform use the loopback interface
|
|
# For other namespaces, use eth0 interface which is connected to the docker0 bridge in the host.
|
|
if [[ $NAMESPACE_ID == "" ]]
|
|
then
|
|
INTFC=lo
|
|
else
|
|
INTFC=eth0
|
|
fi
|
|
|
|
# Get the ip address of the interface
|
|
# if the ip address was not retrieved correctly, put localhost(127.0.0.1) as the default.
|
|
host_ip=$(ip -4 -o addr show $INTFC | awk '{print $4}' | cut -d'/' -f1 | head -1)
|
|
if [[ $host_ip == "" ]]
|
|
then
|
|
host_ip=127.0.0.1
|
|
fi
|
|
|
|
REDIS_DIR=/var/run/redis$NAMESPACE_ID
|
|
mkdir -p $REDIS_DIR/sonic-db
|
|
mkdir -p /etc/supervisor/conf.d/
|
|
|
|
if [ -f /etc/sonic/database_config$NAMESPACE_ID.json ]; then
|
|
cp /etc/sonic/database_config$NAMESPACE_ID.json $REDIS_DIR/sonic-db/database_config.json
|
|
else
|
|
HOST_IP=$host_ip j2 /usr/share/sonic/templates/database_config.json.j2 > $REDIS_DIR/sonic-db/database_config.json
|
|
fi
|
|
|
|
# on VoQ system, we only publish redis_chassis instance and CHASSIS_APP_DB when
|
|
# either chassisdb.conf indicates starts chassis_db or connect to chassis_db,
|
|
# and redis_chassis instance is started in different container.
|
|
# in order to do that, first we save original database config file, then
|
|
# call update_chasissdb_config to remove chassis_db config from
|
|
# the original database config file and use the modified config file to generate
|
|
# supervisord config, so that we won't start redis_chassis service.
|
|
# then we will decide to publish modified or original database config file based
|
|
# on the setting in chassisdb.conf
|
|
start_chassis_db=0
|
|
chassis_db_address=""
|
|
chassis_db_port=""
|
|
chassisdb_config="/usr/share/sonic/platform/chassisdb.conf"
|
|
[ -f $chassisdb_config ] && source $chassisdb_config
|
|
|
|
db_cfg_file="/var/run/redis/sonic-db/database_config.json"
|
|
db_cfg_file_tmp="/var/run/redis/sonic-db/database_config.json.tmp"
|
|
cp $db_cfg_file $db_cfg_file_tmp
|
|
|
|
if [[ $DATABASE_TYPE == "chassisdb" ]]; then
|
|
# Docker init for database-chassis
|
|
echo "Init docker-database-chassis..."
|
|
update_chassisdb_config -j $db_cfg_file_tmp -k -p $chassis_db_port
|
|
# generate all redis server supervisord configuration file
|
|
sonic-cfggen -j $db_cfg_file_tmp -t /usr/share/sonic/templates/supervisord.conf.j2 > /etc/supervisor/conf.d/supervisord.conf
|
|
rm $db_cfg_file_tmp
|
|
exec /usr/local/bin/supervisord
|
|
exit 0
|
|
fi
|
|
|
|
# copy/generate the database_global.json file if this is global database service in multi asic platform.
|
|
if [[ $NAMESPACE_ID == "" ]] && [[ $NAMESPACE_COUNT -gt 1 ]]
|
|
then
|
|
if [ -f /etc/sonic/database_global.json ]; then
|
|
cp /etc/sonic/database_global.json $REDIS_DIR/sonic-db/database_global.json
|
|
else
|
|
j2 /usr/share/sonic/templates/database_global.json.j2 > $REDIS_DIR/sonic-db/database_global.json
|
|
fi
|
|
fi
|
|
# delete chassisdb config to generate supervisord config
|
|
update_chassisdb_config -j $db_cfg_file_tmp -d
|
|
sonic-cfggen -j $db_cfg_file_tmp -t /usr/share/sonic/templates/supervisord.conf.j2 > /etc/supervisor/conf.d/supervisord.conf
|
|
|
|
if [[ "$start_chassis_db" != "1" ]] && [[ -z "$chassis_db_address" ]]; then
|
|
cp $db_cfg_file_tmp $db_cfg_file
|
|
else
|
|
update_chassisdb_config -j $db_cfg_file -p $chassis_db_port
|
|
fi
|
|
rm $db_cfg_file_tmp
|
|
|
|
# copy dump.rdb file to each instance for restoration
|
|
DUMPFILE=/var/lib/redis/dump.rdb
|
|
redis_inst_list=`/usr/bin/python3 -c "from swsscommon import swsscommon; print(' '.join(swsscommon.SonicDBConfig.getInstanceList().keys()))"`
|
|
for inst in $redis_inst_list
|
|
do
|
|
mkdir -p /var/lib/$inst
|
|
if [[ -f $DUMPFILE ]]; then
|
|
# copy warmboot rdb file into each new instance location
|
|
if [[ "$DUMPFILE" != "/var/lib/$inst/dump.rdb" ]]; then
|
|
cp $DUMPFILE /var/lib/$inst/dump.rdb
|
|
fi
|
|
else
|
|
echo -n > /var/lib/$inst/dump.rdb
|
|
fi
|
|
done
|
|
|
|
exec /usr/local/bin/supervisord
|