Skip to content

Commit

Permalink
[VOQ][saidump] To move saidump.sh from the sonic-buildimage repo to t…
Browse files Browse the repository at this point in the history
…he sairedis repo (#1298)

To fix the issue: sonic-net/sonic-buildimage#13561
The existing saidump use https://github.com/sonic-net/sonic-swss-common/blob/master/common/table_dump.lua script which loops the ASIC_DB more than 5 seconds and blocks other processes access.

This solution uses the Redis SAVE command to save the snapshot of DB each time and recover later, instead of looping through each entry in the table.
  • Loading branch information
JunhongMao authored and StormLiangMS committed Nov 19, 2023
1 parent 01f17ba commit 19ba994
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions syncd/scripts/saidump.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/bash
set -e

save_saidump_by_rdb()
{
local filepath="/var/run/redis/sonic-db/database_config.json"

# Get hostname, port, redis directory
local redis_config=$(python3 -c "
import json
with open('$filepath') as json_file:
data = json.load(json_file)
print(data['INSTANCES']['redis']['hostname'], data['INSTANCES']['redis']['port'], data['INSTANCES']['redis']['unix_socket_path'])")

# split
redis_config=(${redis_config// / })
local hostname=${redis_config[0]}
local port=${redis_config[1]}
local redis_dir=`dirname ${redis_config[2]}`
logger "saidump.sh: hostname:$hostname, port:$port, redis_dir:$redis_dir"

logger "saidump.sh: [1] Config Redis consistency directory."
redis-cli -h $hostname -p $port CONFIG SET dir $redis_dir > /dev/null

logger "saidump.sh: [2] SAVE."
redis-cli -h $hostname -p $port SAVE > /dev/null

logger "saidump.sh: [3] Run rdb command to convert the dump files into JSON files."
rdb --command json $redis_dir/dump.rdb | tee $redis_dir/dump.json > /dev/null

logger "saidump.sh: [4] Run saidump -r to update the JSON files' format as same as the saidump before. Then we can get the saidump's result in standard output."
saidump -r $redis_dir/dump.json -m 100

logger "saidump.sh: [5] Clear the temporary files."
rm -f $redis_dir/dump.rdb
rm -f $redis_dir/dump.json
}

save_saidump_by_rdb

0 comments on commit 19ba994

Please sign in to comment.