sonic-buildimage/dockers
JunhongMao 4da5099919
[VOQ][saidump] Install rdbtools into the docker base related containers. (#16466)
Fix #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.
2023-11-08 11:57:25 -08:00
..
docker-base Improve remote fetch (#12795) 2023-09-23 18:07:04 -07:00
docker-base-bullseye [VOQ][saidump] Install rdbtools into the docker base related containers. (#16466) 2023-11-08 11:57:25 -08:00
docker-base-buster Improve remote fetch (#12795) 2023-09-23 18:07:04 -07:00
docker-base-stretch Improve remote fetch (#12795) 2023-09-23 18:07:04 -07:00
docker-basic_router [supervisord]: use abspath as supervisord entrypoint (#5995) 2020-11-22 21:18:44 -08:00
docker-config-engine Install python-redis package to docker containers (#14632) 2023-04-19 18:14:48 -07:00
docker-config-engine-bullseye Load generic omprog in all dockers for rsyslog plugin support (#16601) 2023-09-20 16:27:42 -07:00
docker-config-engine-buster [Build] Fix the PyYang python package installation issue (#15890) 2023-07-19 06:33:49 +08:00
docker-config-engine-stretch Install python-redis package to docker containers (#14632) 2023-04-19 18:14:48 -07:00
docker-database [database] make Redis process runs as non-root user (#16326) 2023-09-01 23:03:15 -07:00
docker-dhcp-relay [dhcp_server] Add dhcprelayd for dhcp_server feature (#16947) 2023-11-02 08:09:01 -07:00
docker-dhcp-server [dhcp_server] Add dhcprelayd for dhcp_server feature (#16947) 2023-11-02 08:09:01 -07:00
docker-eventd Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
docker-fpm-frr [frr] fix default zebra config not inserted into empty zebra.conf (#16747) 2023-10-19 08:47:24 +08:00
docker-fpm-gobgp Parallel building of sonic dockers using native dockerd(dood). (#10352) 2022-04-28 08:39:37 +08:00
docker-iccpd Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
docker-lldp Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
docker-macsec Update macsec CAK keys in profile for tests to change to type7 encoded format (#16388) 2023-09-06 21:11:02 -07:00
docker-mux Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
docker-nat Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
docker-orchagent Enable ZMQ between GNMI and Orchanget (#16661) 2023-10-09 14:22:50 -07:00
docker-pde [infra] Support syslog rate limit configuration (#12490) 2022-12-20 10:53:58 +02:00
docker-platform-monitor [pmon] update gRPC version to 1.57.0 (#16257) 2023-09-15 16:41:51 -07:00
docker-ptf Upgrade gnxi to support dash (#16498) 2023-09-08 08:56:51 -07:00
docker-ptf-sai [build] Fix build issue in docker-ptf-sai caused by setuptools_scm new release (#16636) 2023-09-21 10:38:08 -07:00
docker-router-advertiser Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
docker-sflow Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
docker-snmp [SNMP][IPv6]: Fix to use link local IPv6 address as snmp agentAddress (#16013) 2023-08-08 14:47:33 -07:00
docker-sonic-gnmi Share image for gnmi and telemetry (#16863) 2023-11-08 08:54:36 +08:00
docker-sonic-mgmt Add new docker-sonic-mgmt makefile flag: LEGACY_SONIC_MGMT_DOCKER (#17070) 2023-11-03 09:04:01 +08:00
docker-sonic-mgmt-framework Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
docker-sonic-p4rt Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
docker-sonic-restapi [infra] Support syslog rate limit configuration (#12490) 2022-12-20 10:53:58 +02:00
docker-sonic-sdk [Bullseye] Upgrade sonic-sdk image to bullseye (#12649) 2022-11-28 18:57:26 +02:00
docker-sonic-sdk-buildenv Parallel building of sonic dockers using native dockerd(dood). (#10352) 2022-04-28 08:39:37 +08:00
docker-sonic-telemetry Share image for gnmi and telemetry (#16863) 2023-11-08 08:54:36 +08:00
docker-swss-layer-bullseye Add ping to swss-layer docker (#11093) 2022-06-10 07:40:37 -07:00
docker-swss-layer-buster Add ping to swss-layer docker (#11093) 2022-06-10 07:40:37 -07:00
docker-teamd Timezone sync issue between the host and containers (#14000) 2023-06-25 16:36:09 -07:00
dockerfile-macros.j2 [sonic-config-engine] Clean up dependencies, pin versions; install Python 3 package in Buster container (#5656) 2020-10-26 13:48:50 -07:00