From 2b438523e08aabcb87b5b6269b8b3377851c6c0a Mon Sep 17 00:00:00 2001 From: jumao Date: Fri, 1 Sep 2023 17:27:06 -0400 Subject: [PATCH] =?UTF-8?q?*=20[saidump]=20=E2=80=A2=09Saidump=20for=20DNX?= =?UTF-8?q?-SAI=20https://github.com/sonic-net/sonic-buildimage/issues/135?= =?UTF-8?q?61?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Solution and modification: To use the redis-db SAVE option to save the snapshot of DB each time and recover later, instead of looping through each entry in the table and saving it. (1) Updated sonic-buildimage/build_debian.sh, to install Python library rdbtools into the host. (2) Updated sonic-buildimage/src/sonic-sairedis/saidump/saidump.cpp, add a new option -r, which updates the rdbtools's output-JSON files' format. (3) Add a new script file: files/scripts/saidump.sh, to do the below steps For each ASIC0, such as ASIC0, #1. Save the Redis data. sudo sonic-db-cli -n asic$1 SAVE > /dev/null #2. Move dump files to /var/run/redisX/ docker exec database$1 sh -c "mv /var/lib/redis/dump.rdb /var/run/redis$1/" #3. Run rdb command to convert the dump files into JSON files sudo python /usr/local/bin/rdb --command json /var/run/redis$1/dump.rdb | sudo tee /var/run/redis$1/dump.json > /dev/null #4. Run saidump -r to update the JSON files' format as same as the saidump before. Then we can get the saidump result in standard output. docker exec syncd$1 sh -c "saidump -r /var/run/redis$1/dump.json" #5. clear sudo rm -f /var/run/redis$1/dump.rdb sudo rm -f /var/run/redis$1/dump.json (4) Update sonic-buildimage/src/sonic-utilities/scripts/generate_dump, replace saidump with saidump.sh --- scripts/generate_dump | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/generate_dump b/scripts/generate_dump index dd98302a27..1e4c6a0dd4 100755 --- a/scripts/generate_dump +++ b/scripts/generate_dump @@ -874,11 +874,11 @@ save_redis() { save_saidump() { trap 'handle_error $? $LINENO' ERR if [[ ( "$NUM_ASICS" == 1 ) ]] ; then - save_cmd "docker exec syncd saidump" "saidump" + save_cmd "saidump.sh" "saidump" else for (( i=0; i<$NUM_ASICS; i++ )) do - save_cmd "docker exec syncd$i saidump" "saidump$i" + save_cmd "saidump.sh $i" "saidump$i" done fi }