Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[action] [PR:16466] [VOQ][saidump] Install rdbtools into the docker base related containers. #17245

Merged
merged 1 commit into from
Nov 21, 2023

Commits on Nov 21, 2023

  1. [VOQ][saidump] Install rdbtools into the docker base related containe…

    …rs. (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.
    JunhongMao authored and mssonicbld committed Nov 21, 2023
    Configuration menu
    Copy the full SHA
    04817bf View commit details
    Browse the repository at this point in the history