Skip to content

Commit 04817bf

Browse files
JunhongMaomssonicbld
authored andcommitted
[VOQ][saidump] Install rdbtools into the docker base related containers. (sonic-net#16466)
Fix sonic-net#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. Related PRs: sonic-net/sonic-utilities#2972 sonic-net/sonic-sairedis#1288 sonic-net/sonic-sairedis#1298 How did I do it? 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 dockers/docker-base-bullseye/Dockerfile.j2, install Python library rdbtools into the all the docker-base-bullseye containers. 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. To add a new script file: syncd/scripts/saidump.sh into the sairedis repo. This shell script does the following steps: For each ASIC, such as ASIC0, 3.1. Config Redis consistency directory. redis-cli -h $hostname -p $port CONFIG SET dir $redis_dir > /dev/null 3.2. Save the Redis data. redis-cli -h $hostname -p $port SAVE > /dev/null 3.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 3.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 3.5. Clear the temporary files. rm -f $redis_dir/dump.rdb rm -f $redis_dir/dump.json 4. Update sonic-buildimage/src/sonic-utilities/scripts/generate_dump. To check the asic db size and if it is larger than ROUTE_TAB_LIMIT_DIRECT_ITERATION (with default value 24000) entries, then do with REDIS SAVE, otherwise, to do with old method: looping through each entry of Redis DB. How to verify it On T2 setup with more than 96K routes, execute CLI command -- generate_dump No error should be shown Download the generate_dump result and verify the saidump file after unpacking it.
1 parent 894046e commit 04817bf

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

dockers/docker-base-bullseye/Dockerfile.j2

+15
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,21 @@ RUN pip3 install supervisord-dependent-startup==1.4.0
7878

7979
RUN mkdir -p /etc/supervisor /var/log/supervisor
8080

81+
# Install gcc, libc6-dev and python3-dev for compiling python-lzf
82+
RUN apt-get -y install build-essential libc6-dev python3-dev
83+
84+
# Install python-lzf
85+
RUN pip3 install 'python-lzf==0.2.4'
86+
87+
# Install rdbtools
88+
RUN pip3 install 'rdbtools==0.1.15'
89+
90+
# Uninstall gcc, libc6-dev and python3-dev for compiling python-lzf
91+
RUN apt-get -y purge build-essential libc6-dev python3-dev
92+
93+
# Uninstall unused dependencies
94+
RUN apt autoremove -y --purge
95+
8196
RUN apt-get -y purge \
8297
exim4 \
8398
exim4-base \

0 commit comments

Comments
 (0)