From cb4370967fd3ffe9cf8eba833022814a01646e12 Mon Sep 17 00:00:00 2001 From: afeigin Date: Mon, 6 Mar 2023 16:13:53 +0000 Subject: [PATCH 1/4] Finalize fast-reboot in warmboot finalizer --- files/build_templates/docker_image_ctl.j2 | 3 +-- files/image_config/ntp/ntp-config.sh | 4 ++-- .../warmboot-finalizer/finalize-warmboot.sh | 21 ++++++++++++++++++ files/scripts/bgp.sh | 3 ++- files/scripts/service_mgmt.sh | 3 ++- files/scripts/swss.sh | 7 +++--- files/scripts/syncd_common.sh | 6 +++-- files/scripts/teamd.sh | 3 ++- .../sonic_py_common/device_info.py | 22 ++++++++++--------- 9 files changed, 50 insertions(+), 22 deletions(-) diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index 6879aeb703f..d2f22ec89c3 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -239,8 +239,7 @@ function postStartAction() fi if [[ "$BOOT_TYPE" == "fast" ]]; then - # set the key to expire in 3 minutes - $SONIC_DB_CLI STATE_DB SET "FAST_REBOOT|system" "1" "EX" "180" + $SONIC_DB_CLI STATE_DB HSET "FAST_RESTART_ENABLE_TABLE|system" "enable" "true" fi $SONIC_DB_CLI CONFIG_DB SET "CONFIG_DB_INITIALIZED" "1" diff --git a/files/image_config/ntp/ntp-config.sh b/files/image_config/ntp/ntp-config.sh index 9b982d8707b..ace9ad1c8a4 100755 --- a/files/image_config/ntp/ntp-config.sh +++ b/files/image_config/ntp/ntp-config.sh @@ -8,11 +8,11 @@ reboot_type='cold' function get_database_reboot_type() { SYSTEM_WARM_START=`sonic-db-cli STATE_DB hget "WARM_RESTART_ENABLE_TABLE|system" enable` - SYSTEM_FAST_START=`sonic-db-cli STATE_DB get "FAST_REBOOT|system"` + SYSTEM_FAST_START=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` if [[ x"${SYSTEM_WARM_START}" == x"true" ]]; then reboot_type='warm' - elif [[ x"${SYSTEM_FAST_START}" == x"1" ]]; then + elif [[ x"${SYSTEM_FAST_START}" == x"true" ]]; then reboot_type='fast' fi } diff --git a/files/image_config/warmboot-finalizer/finalize-warmboot.sh b/files/image_config/warmboot-finalizer/finalize-warmboot.sh index 41255928902..7994539b0a8 100755 --- a/files/image_config/warmboot-finalizer/finalize-warmboot.sh +++ b/files/image_config/warmboot-finalizer/finalize-warmboot.sh @@ -52,6 +52,17 @@ function check_warm_boot() WARM_BOOT=`sonic-db-cli STATE_DB hget "WARM_RESTART_ENABLE_TABLE|system" enable` } +function check_fast_reboot() +{ + debug "Checking if fast-reboot is enabled..." + FAST_REBOOT=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` + if [[ x"${FAST_REBOOT}" == x"true" ]]; then + debug "Fast-reboot is enabled..." + else + debug "Fast-reboot is disabled..." + fi +} + function wait_for_database_service() { @@ -97,6 +108,12 @@ function finalize_warm_boot() sudo config warm_restart disable } +function finalize_fast_reboot() +{ + debug "Finalizing fast-reboot..." + sonic-db-cli STATE_DB hset "FAST_RESTART_ENABLE_TABLE|system" "enable" "false" &>/dev/null +} + function stop_control_plane_assistant() { if [[ -x ${ASSISTANT_SCRIPT} ]]; then @@ -118,6 +135,7 @@ function restore_counters_folder() wait_for_database_service +check_fast_reboot check_warm_boot if [[ x"${WARM_BOOT}" != x"true" ]]; then @@ -152,4 +170,7 @@ if [[ -n "${list}" ]]; then debug "Some components didn't finish reconcile: ${list} ..." fi +if [ x"${FAST_REBOOT}" == x"true" ]; then + finalize_fast_reboot +fi finalize_warm_boot diff --git a/files/scripts/bgp.sh b/files/scripts/bgp.sh index b7a383ebbdd..328f8ab01ec 100755 --- a/files/scripts/bgp.sh +++ b/files/scripts/bgp.sh @@ -30,7 +30,8 @@ function validate_restore_count() function check_fast_boot () { - if [[ $($SONIC_DB_CLI STATE_DB GET "FAST_REBOOT|system") == "1" ]]; then + SYSTEM_FAST_REBOOT=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` + if [[ x"${SYSTEM_FAST_REBOOT}" == x"true" ]]; then FAST_BOOT="true" else FAST_BOOT="false" diff --git a/files/scripts/service_mgmt.sh b/files/scripts/service_mgmt.sh index c529ef92ce5..a3709bf2bf8 100755 --- a/files/scripts/service_mgmt.sh +++ b/files/scripts/service_mgmt.sh @@ -19,7 +19,8 @@ function check_warm_boot() function check_fast_boot () { - if [[ $($SONIC_DB_CLI STATE_DB GET "FAST_REBOOT|system") == "1" ]]; then + SYSTEM_FAST_REBOOT=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` + if [[ x"${SYSTEM_FAST_REBOOT}" == x"true" ]]; then FAST_BOOT="true" else FAST_BOOT="false" diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh index 947bc88feb0..fb9177ef0df 100755 --- a/files/scripts/swss.sh +++ b/files/scripts/swss.sh @@ -60,7 +60,8 @@ function check_warm_boot() function check_fast_boot() { - if [[ $($SONIC_DB_CLI STATE_DB GET "FAST_REBOOT|system") == "1" ]]; then + SYSTEM_FAST_REBOOT=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` + if [[ x"${SYSTEM_FAST_REBOOT}" == x"true" ]]; then FAST_BOOT="true" else FAST_BOOT="false" @@ -284,8 +285,8 @@ stop() { # encountered error, e.g. syncd crashed. And swss needs to # be restarted. if [[ x"$FAST_BOOT" != x"true" ]]; then - debug "Clearing FAST_REBOOT flag..." - clean_up_tables STATE_DB "'FAST_REBOOT*'" + debug "Clearing FAST_RESTART_ENABLE_TABLE flag..." + sonic-db-cli STATE_DB hset "FAST_RESTART_ENABLE_TABLE|system" "enable" "false" fi # Unlock has to happen before reaching out to peer service unlock_service_state_change diff --git a/files/scripts/syncd_common.sh b/files/scripts/syncd_common.sh index 3d03c8b9e4e..a850e31b207 100755 --- a/files/scripts/syncd_common.sh +++ b/files/scripts/syncd_common.sh @@ -50,7 +50,8 @@ function check_warm_boot() function check_fast_boot() { - if [[ $($SONIC_DB_CLI STATE_DB GET "FAST_REBOOT|system") == "1" ]]; then + SYSTEM_FAST_REBOOT=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` + if [[ x"${SYSTEM_FAST_REBOOT}" == x"true" ]]; then FAST_BOOT="true" else FAST_BOOT="false" @@ -82,7 +83,8 @@ function getBootType() ;; *SONIC_BOOT_TYPE=fast*|*fast-reboot*) # check that the key exists - if [[ $($SONIC_DB_CLI STATE_DB GET "FAST_REBOOT|system") == "1" ]]; then + SYSTEM_FAST_REBOOT=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` + if [[ x"${SYSTEM_FAST_REBOOT}" == x"true" ]]; then TYPE='fast' else TYPE='cold' diff --git a/files/scripts/teamd.sh b/files/scripts/teamd.sh index 4de3f25c4db..dd6b05caa4c 100755 --- a/files/scripts/teamd.sh +++ b/files/scripts/teamd.sh @@ -32,7 +32,8 @@ function validate_restore_count() function check_fast_boot () { - if [[ $($SONIC_DB_CLI STATE_DB GET "FAST_REBOOT|system") == "1" ]]; then + SYSTEM_FAST_REBOOT=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` + if [[ x"${SYSTEM_FAST_REBOOT}" == x"true" ]]; then FAST_BOOT="true" else FAST_BOOT="false" diff --git a/src/sonic-py-common/sonic_py_common/device_info.py b/src/sonic-py-common/sonic_py_common/device_info.py index ea277c885b7..e2b5f500286 100644 --- a/src/sonic-py-common/sonic_py_common/device_info.py +++ b/src/sonic-py-common/sonic_py_common/device_info.py @@ -669,14 +669,16 @@ def is_warm_restart_enabled(container_name): # Check if System fast reboot is enabled. def is_fast_reboot_enabled(): - fb_system_state = 0 - cmd = 'sonic-db-cli STATE_DB get "FAST_REBOOT|system"' - proc = subprocess.Popen(cmd, shell=True, universal_newlines=True, stdout=subprocess.PIPE) - (stdout, stderr) = proc.communicate() - - if proc.returncode != 0: - log.log_error("Error running command '{}'".format(cmd)) - elif stdout: - fb_system_state = stdout.rstrip('\n') + state_db = SonicV2Connector(host='127.0.0.1') + state_db.connect(state_db.STATE_DB, False) + + TABLE_NAME_SEPARATOR = '|' + prefix = 'FAST_RESTART_ENABLE_TABLE' + TABLE_NAME_SEPARATOR + + # Get the system warm reboot enable state + _hash = '{}{}'.format(prefix, 'system') + fb_system_state = state_db.get(state_db.STATE_DB, _hash, "enable") + fb_enable_state = True if fb_system_state == "true" else False - return fb_system_state + state_db.close(state_db.STATE_DB) + return fb_enable_state From 0ea478d4de92ca3181cf5e67f81184a12c4c210c Mon Sep 17 00:00:00 2001 From: afeigin Date: Tue, 7 Mar 2023 17:38:34 +0000 Subject: [PATCH 2/4] update fast/warm-reboot finalizer --- .../warmboot-finalizer/finalize-warmboot.sh | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/files/image_config/warmboot-finalizer/finalize-warmboot.sh b/files/image_config/warmboot-finalizer/finalize-warmboot.sh index 7994539b0a8..f00036111ef 100755 --- a/files/image_config/warmboot-finalizer/finalize-warmboot.sh +++ b/files/image_config/warmboot-finalizer/finalize-warmboot.sh @@ -140,10 +140,15 @@ check_warm_boot if [[ x"${WARM_BOOT}" != x"true" ]]; then debug "warmboot is not enabled ..." - exit 0 + if [[ x"${FAST_BOOT}" != x"true" ]]; then + debug "fastboot is not enabled ..." + exit 0 + fi fi -restore_counters_folder +if [[ x"${WARM_BOOT}" == x"true" ]]; then + restore_counters_folder +fi get_component_list @@ -160,10 +165,12 @@ for i in `seq 60`; do sleep 5 done -stop_control_plane_assistant +if [[ x"${WARM_BOOT}" == x"true" ]]; then + stop_control_plane_assistant +fi # Save DB after stopped control plane assistant to avoid extra entries -debug "Save in-memory database after warm reboot ..." +debug "Save in-memory database after warm/fast reboot ..." config save -y if [[ -n "${list}" ]]; then @@ -173,4 +180,6 @@ fi if [ x"${FAST_REBOOT}" == x"true" ]; then finalize_fast_reboot fi -finalize_warm_boot +if [ x"${WARM_BOOT}" == x"true" ]; then + finalize_warm_boot +fi From 9f72383a1905a07f553ccb15a5b7027df9f5de7c Mon Sep 17 00:00:00 2001 From: afeigin Date: Tue, 14 Mar 2023 10:05:09 +0000 Subject: [PATCH 3/4] support compatibility for fast-reboot from previous versions (prior 202205) --- files/build_templates/docker_image_ctl.j2 | 3 ++- .../image_config/warmboot-finalizer/finalize-warmboot.sh | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index d2f22ec89c3..6879aeb703f 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -239,7 +239,8 @@ function postStartAction() fi if [[ "$BOOT_TYPE" == "fast" ]]; then - $SONIC_DB_CLI STATE_DB HSET "FAST_RESTART_ENABLE_TABLE|system" "enable" "true" + # set the key to expire in 3 minutes + $SONIC_DB_CLI STATE_DB SET "FAST_REBOOT|system" "1" "EX" "180" fi $SONIC_DB_CLI CONFIG_DB SET "CONFIG_DB_INITIALIZED" "1" diff --git a/files/image_config/warmboot-finalizer/finalize-warmboot.sh b/files/image_config/warmboot-finalizer/finalize-warmboot.sh index f00036111ef..597a9cceacb 100755 --- a/files/image_config/warmboot-finalizer/finalize-warmboot.sh +++ b/files/image_config/warmboot-finalizer/finalize-warmboot.sh @@ -140,13 +140,13 @@ check_warm_boot if [[ x"${WARM_BOOT}" != x"true" ]]; then debug "warmboot is not enabled ..." - if [[ x"${FAST_BOOT}" != x"true" ]]; then + if [[ x"${FAST_REBOOT}" != x"true" ]]; then debug "fastboot is not enabled ..." exit 0 fi fi -if [[ x"${WARM_BOOT}" == x"true" ]]; then +if [[ (x"${WARM_BOOT}" == x"true") && (x"${FAST_REBOOT}" != x"true") ]]; then restore_counters_folder fi @@ -165,7 +165,7 @@ for i in `seq 60`; do sleep 5 done -if [[ x"${WARM_BOOT}" == x"true" ]]; then +if [[ (x"${WARM_BOOT}" == x"true") && (x"${FAST_REBOOT}" != x"true") ]]; then stop_control_plane_assistant fi @@ -180,6 +180,7 @@ fi if [ x"${FAST_REBOOT}" == x"true" ]; then finalize_fast_reboot fi + if [ x"${WARM_BOOT}" == x"true" ]; then finalize_warm_boot -fi +fi \ No newline at end of file From 678bfcec51616f559f5d366330fed2b9176e46bd Mon Sep 17 00:00:00 2001 From: afeigin Date: Wed, 15 Mar 2023 10:33:21 +0000 Subject: [PATCH 4/4] advance pointers: sairedis, utilities --- src/sonic-sairedis | 2 +- src/sonic-utilities | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sonic-sairedis b/src/sonic-sairedis index f764a2e7b2f..23ac336477d 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit f764a2e7b2ff42bce791e1ab8c1bb1dba8c50aa7 +Subproject commit 23ac336477d74bf4b8a0804bb5009eb0e4ff881e diff --git a/src/sonic-utilities b/src/sonic-utilities index b8072eabff6..f861364c0ae 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit b8072eabff636166d360bc95705c88acccb3e0ba +Subproject commit f861364c0ae7ffc6bd1a8d517f96e19c72f58655