Skip to content

Validate config_db.json in reload path.#4521

Open
dypet wants to merge 2 commits into
sonic-net:masterfrom
dypet:config_reload_validate
Open

Validate config_db.json in reload path.#4521
dypet wants to merge 2 commits into
sonic-net:masterfrom
dypet:config_reload_validate

Conversation

@dypet
Copy link
Copy Markdown

@dypet dypet commented May 6, 2026

What I did

Fix for sonic-net/sonic-buildimage#27178 . /etc/sonic/config_db.json was not validated in the config reload path before loading. If a config that did not conform to schema was partially loaded, the system could end up in a bad unrecoverable state.

How I did it

added a config_file_yang_validation check to config_db.json in config reload path.

How to verify it

'config reload -y' after copying an invalid config to /etc/sonic/config_db.json.

Previous command output

:~$ sudo config reload -y
Acquired lock on /etc/sonic/reload.lock
Disabling container and routeCheck monitoring ...
Stopping SONiC target ...
Running command: /usr/local/bin/sonic-cfggen -j /etc/sonic/init_cfg.json -j /etc/sonic/config_db.json --write-to-db
Traceback (most recent call last):
  File "/usr/local/bin/sonic-cfggen", line 542, in <module>
    main()
    ~~~~^^
  File "/usr/local/bin/sonic-cfggen", line 531, in main
    configdb.mod_config(FormatConverter.output_to_db(data))
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/swsscommon/swsscommon.py", line 2862, in mod_config
    raw_data = self.typed_to_raw(data)
  File "/usr/lib/python3/dist-packages/swsscommon/swsscommon.py", line 2797, in typed_to_raw
    elif len(typed_data) == 0:
         ~~~^^^^^^^^^^^^
TypeError: object of type 'int' has no len()
Released lock on /etc/sonic/reload.lock

Config is partially loaded in this case, leaving system in state that needs to be recovered with

sudo cp config_db.json_working /etc/sonic/config_db.json
sudo sonic-db-cli CONFIG_DB SET CONFIG_DB_INITIALIZED 1
sudo config reload -y -f

New command output

:~$ sudo config reload -y
Acquired lock on /etc/sonic/reload.lock
sonic_yang(3):All Keys are not parsed in DASH_HA_GLOBAL_CONFIG
dict_keys(['cp_data_channel_port', 'dp_channel_dst_port', 'dp_channel_src_port_min', 'dp_channel_src_port_max', 'dp_channel_probe_interval_ms', 'dp_channel_probe_fail_threshold', 'dpu_bfd_probe_interval_in_ms', 'dpu_bfd_probe_multiplier', 'dpu_vnet', 'dpu_vlan'])
sonic_yang(3):exceptionList:[]
sonic_yang(3):Data Loading Failed:All Keys are not parsed in DASH_HA_GLOBAL_CONFIG
dict_keys(['cp_data_channel_port', 'dp_channel_dst_port', 'dp_channel_src_port_min', 'dp_channel_src_port_max', 'dp_channel_probe_interval_ms', 'dp_channel_probe_fail_threshold', 'dpu_bfd_probe_interval_in_ms', 'dpu_bfd_probe_multiplier', 'dpu_vnet', 'dpu_vlan'])
exceptionList:[]
/etc/sonic/config_db.json fails YANG validation! Error: Data Loading Failed
All Keys are not parsed in DASH_HA_GLOBAL_CONFIG
dict_keys(['cp_data_channel_port', 'dp_channel_dst_port', 'dp_channel_src_port_min', 'dp_channel_src_port_max', 'dp_channel_probe_interval_ms', 'dp_channel_probe_fail_threshold', 'dpu_bfd_probe_interval_in_ms', 'dpu_bfd_probe_multiplier', 'dpu_vnet', 'dpu_vlan'])
exceptionList:[]
Released lock on /etc/sonic/reload.lock
Aborted!

The incorrect config is not loaded in this case and system stays up.

Signed-off-by: dypet <dypeters@cisco.com>
@dypet dypet requested a review from zjswhhh May 6, 2026 15:14
@mssonicbld
Copy link
Copy Markdown
Collaborator

/azp run

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

Signed-off-by: dypet <dypeters@cisco.com>
@mssonicbld
Copy link
Copy Markdown
Collaborator

/azp run

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

@zjswhhh
Copy link
Copy Markdown
Contributor

zjswhhh commented May 8, 2026

Hi @qiluo-msft - please help review and merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants