From aecd91363b0a1186a39d66551df6d1c8b536cd81 Mon Sep 17 00:00:00 2001 From: "Marty Y. Lok" <76118573+mlok-nokia@users.noreply.github.com> Date: Tue, 21 Feb 2023 14:23:22 -0500 Subject: [PATCH] [Chassis][multiasic] Fix the sonic-db-cli core files issue on multiasic platform after the c++ implementation of sonic-db-cli (#13207) Fixe #12047. After the c++ implementation of the sonic-db-cli, sonic-db-cli PING command tries to initialize the global database for all instances database starting. If all instance database-config.json are not ready yet. it will crash and generate core file. PR sonic-net/sonic-swss-common#701 only fix the crash and the process abortion. Signed-off-by: mlok --- files/build_templates/docker_image_ctl.j2 | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index 60f6916d676c..6879aeb703f7 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -144,11 +144,13 @@ function waitForAllInstanceDatabaseConfigJsonFilesReady() fi done done - fi + fi + # Delay a second to allow all instance database_config.json files to be completely generated and fully accessible. + # This delay is needed to make sure that the database_config.json files are correctly rendered from j2 template + # files ( renderning takes some time ) + sleep 1 fi } -# delay a second to allow the file to be fully accessible -sleep 1 {%- endif %} function postStartAction() @@ -214,6 +216,10 @@ function postStartAction() # then we catch python exception of file not valid # that comes to syslog which is unwanted so wait till database # config is ready and then ping + # sonic-db-cli try to initialize the global database. If in multiasic platform, inital global + # database will try to access to all other instance database-config.json. If other instance + # database-config.json files are not ready yet, it will generate the sonic-db-cli core files. + waitForAllInstanceDatabaseConfigJsonFilesReady until [[ ($(docker exec -i database$DEV pgrep -x -c supervisord) -gt 0) && ($($SONIC_DB_CLI PING | grep -c PONG) -gt 0) && ($(docker exec -i database$DEV sonic-db-cli PING | grep -c PONG) -gt 0) ]]; do sleep 1; @@ -223,11 +229,7 @@ function postStartAction() mv $WARM_DIR/dump.rdb $WARM_DIR/dump.rdb.old else # If there is a config_db.json dump file, load it. - if [ -r /etc/sonic/config_db$DEV.json ]; then - - # For multi-asic, all /var/run/redis$DEV/sonic-db/database_config.json need to ready - # for loading config with --write-to-db - waitForAllInstanceDatabaseConfigJsonFilesReady + if [ -r /etc/sonic/config_db$DEV.json ]; then if [ -r /etc/sonic/init_cfg.json ]; then $SONIC_CFGGEN -j /etc/sonic/init_cfg.json -j /etc/sonic/config_db$DEV.json --write-to-db