From b277be5bda07a1dbe00d80e4206f048f782050f5 Mon Sep 17 00:00:00 2001 From: Vaibhav Hemant Dixit Date: Thu, 6 Jul 2023 17:34:35 -0700 Subject: [PATCH] Revert "Revert "Fix for fast/cold-boot: call db_migrator only after old config is loaded (#14933)" (#15464)" (#15684) This reverts commit 9649a44470151f62cae4ce79eff68a5782fa27ea. --- files/build_templates/docker_image_ctl.j2 | 16 ++++++++++++---- files/image_config/config-setup/config-setup | 13 +++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index 6879aeb703f7..ab13a03ca35a 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -246,10 +246,18 @@ function postStartAction() $SONIC_DB_CLI CONFIG_DB SET "CONFIG_DB_INITIALIZED" "1" fi - if [[ -x /usr/local/bin/db_migrator.py ]]; then - # Migrate the DB to the latest schema version if needed - if [ -z "$DEV" ]; then - /usr/local/bin/db_migrator.py -o migrate + if [ -e /tmp/pending_config_migration ]; then + # this is first boot to a new image, config-setup execution is pending. + # For fast/cold reboot case, DB contains nothing at this point + # Call db_migrator after config-setup loads the config (from old config or minigraph) + echo "Delaying db_migrator until config migration is over" + else + # this is not a first time boot to a new image. Datbase container starts w/ old pre-existing config + if [[ -x /usr/local/bin/db_migrator.py ]]; then + # Migrate the DB to the latest schema version if needed + if [ -z "$DEV" ]; then + /usr/local/bin/db_migrator.py -o migrate + fi fi fi # Add redis UDS to the redis group and give read/write access to the group diff --git a/files/image_config/config-setup/config-setup b/files/image_config/config-setup/config-setup index 0f5a248b05f8..28a3a4373a42 100755 --- a/files/image_config/config-setup/config-setup +++ b/files/image_config/config-setup/config-setup @@ -304,6 +304,16 @@ check_all_config_db_present() return 0 } +# DB schema is subject to change between two images +# Perform DB schema migration after loading backup config from previous image +do_db_migration() +{ + if [[ -x /usr/local/bin/db_migrator.py ]]; then + # Migrate the DB to the latest schema version if needed + /usr/local/bin/db_migrator.py -o migrate + fi +} + # Perform configuration migration from backup copy. # - This step is performed when a new image is installed and SONiC switch boots into it do_config_migration() @@ -326,16 +336,19 @@ do_config_migration() if [ x"${WARM_BOOT}" == x"true" ]; then echo "Warm reboot detected..." disable_updategraph + do_db_migration rm -f /tmp/pending_config_migration exit 0 elif check_all_config_db_present; then echo "Use config_db.json from old system..." reload_configdb + do_db_migration # Disable updategraph disable_updategraph elif [ -r ${MINGRAPH_FILE} ]; then echo "Use minigraph.xml from old system..." reload_minigraph + do_db_migration # Disable updategraph disable_updategraph else